Flutter非官方API访问插件genius_api_unofficial的使用

发布于 1周前 作者 gougou168 来自 Flutter

Flutter非官方API访问插件genius_api_unofficial的使用

此库为你提供了与Genius API交互的便捷接口。 它并非官方Genius产品

所有可用的API文档被复制并适应为注释形式,以便你能够直接从IDE中看到类/方法的用法。

所有与API相关的类均以GeniusApi开头。

核心类
  • GeniusApiOptions 允许你配置方法调用。
  • GeniusApiTextFormat 是请求服务器响应格式。
  • GeniusApiResponse 包含成功方法调用的响应。
  • GeniusApiException 将在HTTP状态码不同于2xx时抛出。
主要API类
  • GeniusApiAuth 允许你获取accessToken,既可以在服务器端也可以在客户端。
  • GeniusApiRaw 提供了所有其他官方文档化的方法。
  • GeniusApi 是一个基本的抽象API类,你可以扩展它来编写自己的实现。

计划

我计划在未来添加一些更多的Genius API实现(例如GeniusApiRawExtendedGeniusApiWrapped)。

我想在新实现中最终添加的功能包括:

目前,该库仅通过GeniusApiRaw实现提供与Genius API的全面接口,没有更多内容。

使用

每个方法都有详细的文档,并且参数与官方API文档中列出的一致。

你可以在测试文件夹中找到每个方法的使用示例。

简单的使用示例:

final api = GeniusApiRaw(
  accessToken: 'token here',
  // 设置所有方法返回纯文本而不是默认的dom格式。
  defaultOptions: GeniusApiOptions(textFormat: GeniusApiTextFormat.plain),
);

// 获取歌曲 "https://genius.com/Yxngxr1-riley-reid-lyrics" 的信息。
final res = await api.getSong(4585202);
print(res.data!['song']['full_title']); // 输出 "Riley Reid by yxngxr1"

进一步阅读

查看Dart pub包的API文档以获取有关所有包成员的详细信息。

功能和问题

请在问题追踪器中提交功能请求和错误报告。

链接

对于在GitHub上看到这些内容的人:


示例代码

import 'package:genius_api_unofficial/genius_api_unofficial.dart';

Future<void> main() async {
  // 创建一个auth对象以在客户端使用。
  final auth = GeniusApiAuth.client(
    clientId: 'your client_id here from https://genius.com/api-clients',
    redirectUri: 'your redirect_uri here from https://genius.com/api-clients',
  );

  // 如果你在桌面平台上(Windows, Linux 或 MacOS),浏览器将打开
  // 并显示Genius认证页面。
  // 否则你需要使用`constructAuthorize`来获取Uri并自行打开。
  await auth.authorize(
    scope: GeniusApiAuthScope.values.toList(), // 请求所有可用的作用域。
    responseType: GeniusApiAuthResponseType.token, // 直接获取令牌。
    // responseType: GeniusApiAuthResponseType.code, // 获取URL中的代码以稍后进行交换。
  );

  // 某种方式从Url中获取到令牌,或者你可以不认证用户直接使用客户端访问令牌 http://genius.com/api-clients
  final api = GeniusApiRaw(
    accessToken: 'token here',
    // 设置所有方法返回纯文本而不是默认的dom格式。
    defaultOptions: GeniusApiOptions(textFormat: GeniusApiTextFormat.plain),
  );

  // 获取歌曲 "https://genius.com/Yxngxr1-riley-reid-lyrics" 的信息。
  final res = await api.getSong(4585202);
  print(res.data!['song']['full_title']); // 输出 "Riley Reid by yxngxr1"
}

更多关于Flutter非官方API访问插件genius_api_unofficial的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter非官方API访问插件genius_api_unofficial的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用非官方API访问插件genius_api_unofficial的示例代码。请注意,由于这是一个非官方的插件,具体的使用方法和API可能会随着插件版本的更新而变化。因此,建议在使用前查看该插件的官方文档或GitHub仓库以获取最新信息。

首先,确保你已经在pubspec.yaml文件中添加了该插件的依赖项:

dependencies:
  flutter:
    sdk: flutter
  genius_api_unofficial: ^最新版本号  # 替换为实际可用的最新版本号

然后,运行flutter pub get来安装依赖项。

接下来,是一个基本的Flutter应用示例,展示如何使用genius_api_unofficial插件来访问Genius的API。

main.dart

import 'package:flutter/material.dart';
import 'package:genius_api_unofficial/genius_api_unofficial.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Genius API Unofficial Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String result = '';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Genius API Unofficial Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Fetching data from Genius API...',
              style: TextStyle(fontSize: 20),
            ),
            SizedBox(height: 20),
            Text(
              result,
              style: TextStyle(fontSize: 18),
              maxLines: 5,
              overflow: TextOverflow.ellipsis,
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                setState(() {
                  result = 'Fetching...';
                });

                try {
                  // Replace 'YOUR_ACCESS_TOKEN' with your actual Genius API access token
                  // Replace 'SONG_ID' with the ID of the song you want to fetch
                  final response = await GeniusApiUnofficial.getSong('YOUR_ACCESS_TOKEN', 'SONG_ID');
                  
                  // Assuming the response is a JSON string, parse it to a Map
                  final data = await jsonDecode(response);

                  // Extract the song title as an example
                  final songTitle = data['response']['song']['title'];

                  setState(() {
                    result = 'Song Title: $songTitle';
                  });
                } catch (e) {
                  setState(() {
                    result = 'Error: ${e.toString()}';
                  });
                }
              },
              child: Text('Fetch Song Data'),
            ),
          ],
        ),
      ),
    );
  }
}

注意事项

  1. API Token:确保你已经从Genius官网获取了有效的API访问令牌,并将其替换为代码中的YOUR_ACCESS_TOKEN
  2. Song ID:将SONG_ID替换为你想要获取数据的歌曲的ID。
  3. 错误处理:在实际应用中,应该添加更多的错误处理逻辑,以处理各种可能的异常情况,例如网络错误、无效的API令牌等。
  4. 插件更新:由于这是一个非官方插件,它可能不包含完整的错误处理或文档。因此,建议在使用前查看插件的源代码和示例代码,以了解其完整的功能和限制。

希望这个示例代码能帮助你开始使用genius_api_unofficial插件。如果你遇到任何问题,请查阅插件的官方文档或GitHub仓库的issue区以获取帮助。

回到顶部