Flutter成人内容浏览插件nhentai的使用
Flutter成人内容浏览插件nhentai的使用
1. 插件功能介绍
nhentai_dart
是一个用于访问 nhentai.net 未公开 API 的 Dart 包,提供了以下功能:
- 完整的数据模型(书籍、图片、标签、评论、用户)
- 文本查询搜索
- 标签搜索
- 获取随机书籍
- 可配置的主机
- 支持自定义
Client
(通过package:http
) - 内置 HTTP 代理支持(可通过 URI 配置)
- 内置 User Agent 覆盖和 Cookies 支持
2. Web 平台注意事项
在 Web 平台上使用此模块是实验性的,并存在一些限制:
- 无法直接访问 nhentai,因为 CORS 限制。解决方案:使用支持 CORS 的镜像(例如 dev-mirror)。
API#getRandomBook
由于 XHR 的限制无法工作。- Web 平台不支持代理。
- Web 平台不支持 User Agent 覆盖。
- Web 平台不支持 Cookies 辅助函数。
3. 使用示例
导入包
import 'package:nhentai/nhentai.dart';
创建客户端实例
final api = API();
获取书籍数据
/// 如果书籍不存在或解析失败会抛出异常,详见文档。
final Book book = await api.getBook(177013);
// 打印书籍简要信息
print(
'Book: $book\n'
'Artists: ${book.tags.artists.join(', ')}\n'
'Languages: ${book.tags.languages.join(', ')}\n'
'Cover: ${book.cover.getUrl(api: api)}\n'
'First page: ${book.pages.first.getUrl(api: api)}\n'
'First page thumbnail: ${book.pages.first.thumbnail.getUrl(api: api)}\n',
);
搜索书籍
// 搜索与指定语言相同的书籍
// 打印前两页中每页的前两本书的名称
await for (final search in api.searchTagged(book.tags.languages.first, count: 2)) {
print(search);
print(search.books.take(2).join(', '));
}
// 单次查询并打印第一个结果
// 使用生成器进行单次查询,必须指定 `count` 为 1,否则流将进行两次请求
final Search search1 = await api.search('test', count: 1).first;
print(search1.books.first);
// 纯单次搜索请求
final NHentaiSearch search2 = await api.searchSinglePage('test');
print(search2.books.first);
配置代理和自定义主机
// 带有 HTTP 代理的 API 客户端
final proxyApi = NHentai.proxy(
// 代理 URI
'http://0xdeadbeef:0x0badf00d@example.com:1337/',
// 自定义主机配置,更改图片和缩略图主机
hosts: NHentaiHosts.only(
image: const NHentaiImageHost('i2.nhentai.net'),
thumbnail: const NHentaiThumbnailHost('t7.nhentai.net'),
),
);
// 带有自定义 HTTP 客户端的 API 客户端
final customClientApi = nh.API(
// 带有代理的 HTTP 客户端
client: IOClient(
HttpClient()
..addProxyCredentials(
'example.com',
1337,
'Basic',
HttpClientBasicCredentials('0xdeadbeef', '0x0badf00d'),
)
..findProxy = (uri) => 'PROXY example.com:1337',
),
// 多个主机配置,包含两个图片主机
hosts: NHentaiHosts.multiple(
image: [
// 通过专用类构造函数创建图片主机
const NHentaiImageHost('i7.nhentai.net'),
// 通过通用主机工厂创建图片主机配置
NHentaiHost(NHentaiHostType.image, 'i5.nhentai.net') as NHentaiImageHost,
],
),
);
4. 完整示例 Demo
以下是一个完整的示例 Demo,展示了如何使用 nhentai_dart
插件来获取书籍信息并进行搜索:
import 'dart:io';
import 'package:http/io_client.dart';
import 'package:nhentai/nhentai.dart' as nh;
Future<void> main() async {
// 创建默认参数的 API 客户端
final api = nh.API();
try {
// 获取指定 ID 的书籍
final NHentaiBook book = await api.getBook(177013);
// 打印书籍简要信息
print(
'Book: $book\n'
'Artists: ${book.tags.artists.join(', ')}\n'
'Languages: ${book.tags.languages.join(', ')}\n'
'Cover: ${book.cover.getUrl(api: api)}\n'
'First page: ${book.pages.first.getUrl(api: api)}\n'
'First page thumbnail: ${book.pages.first.thumbnail.getUrl(api: api)}\n',
);
// 搜索与指定语言相同的书籍
// 打印前两页中每页的前两本书的名称
await for (final search in api.searchTagged(book.tags.languages.first, count: 2)) {
print(search);
print(search.books.take(2).join(', '));
}
// 单次查询并打印第一个结果
// 使用生成器进行单次查询,必须指定 `count` 为 1,否则流将进行两次请求
final nh.Search search1 = await api.search('test', count: 1).first;
print(search1.books.first);
// 纯单次搜索请求
final NHentaiSearch search2 = await api.searchSinglePage('test');
print(search2.books.first);
} catch (e) {
print('Error: $e');
}
}
更多关于Flutter成人内容浏览插件nhentai的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复