Flutter非官方API访问插件genius_api_unofficial的使用
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实现(例如GeniusApiRawExtended
或GeniusApiWrapped
)。
我想在新实现中最终添加的功能包括:
- 一些实用方法
- 完全类型化的方法调用和响应
- 未记录的API端点
目前,该库仅通过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
更多关于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'),
),
],
),
),
);
}
}
注意事项
- API Token:确保你已经从Genius官网获取了有效的API访问令牌,并将其替换为代码中的
YOUR_ACCESS_TOKEN
。 - Song ID:将
SONG_ID
替换为你想要获取数据的歌曲的ID。 - 错误处理:在实际应用中,应该添加更多的错误处理逻辑,以处理各种可能的异常情况,例如网络错误、无效的API令牌等。
- 插件更新:由于这是一个非官方插件,它可能不包含完整的错误处理或文档。因此,建议在使用前查看插件的源代码和示例代码,以了解其完整的功能和限制。
希望这个示例代码能帮助你开始使用genius_api_unofficial
插件。如果你遇到任何问题,请查阅插件的官方文档或GitHub仓库的issue区以获取帮助。