Anisearch-lib


NameAnisearch-lib JSON
Version 1.3.5 PyPI version JSON
download
home_pagehttps://anisearch.mmoe.work
SummaryA library for searching anime magnet links
upload_time2024-09-29 14:31:34
maintainerNone
docs_urlNone
authoradogecheems
requires_pythonNone
licenseAGPLv3
keywords search download magnet link magnet-link torrent anime dmhy comicat kisssub miobt nyaa acg.rip acgrip tokyotosho cli commandline
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Anisearch

[English](https://github.com/adogecheems/anisearch/blob/master/README_en.md)

anisearch 是一个功能齐全的 Python 库,用于搜索动画磁力链接。它还提供了一个灵活的插件系统,允许用户从不同的来源搜索动画信息

## 功能特点

- 支持多个搜索源
- 强大的可扩展性
- CSV 导出功能
- 代理支持

## 安装

你可以直接使用 pip 安装 anisearch:

```
pip install Anisearch-lib
```

## 使用示例

以下是使用 anisearch 的基本示例:

```python
from anisearch import AniSearch

# 创建 AniSearch 实例
searcher = AniSearch()

# __init__()方法可选的参数:
# plugin_name: 搜索源名称,默认为 'dmhy'
# parser: beautifulsoup 解析器,在'dmhy'中默认为'lxml'
# verify: 是否验证 SSL 证书,在'dmhy'中默认为False
# time_fmt: 时间格式,默认为'%Y-%m-%d %H:%M:%S'

# 以上参数的默认值在选择不同的插件的时候可能会有所不同

# 搜索动画
searcher.search('我推的孩子')

# search()方法可选的参数:
# collected: 是否只搜索季度合集,默认为True
# proxies: 代理url
#
# 使用代理
# proxies = {
#     'http': 'http://10.10.1.10:3128',
#     'https': 'http://10.10.1.10:1080',
# } # 别当真,就是示例而已
# searcher.search("我推的孩子", proxies=proxies)
# system_proxy: 是否使用系统代理(好像总是不能工作)

# 搜索成功的话会出现如下字样:
# This search is complete: 我推的孩子

# 输出搜索结果列表
print(searcher.animes)

# 展示部分输出(在2024年八月的结果)
# [Anime('2024/03/21 13:25', '【动漫国字幕组】[【我推的孩子】][01-11][BDRip][AVC_AAC][1080P][简体][MP4]', '7.3GB', 'magnet:?xt=urn:btih:P76PROAB5JRUAPHIST63HGRUOMW7SEWU&dn=&tr=...

# 如果一切正常,选择第一个搜索结果(当然也可以选择其他的)
searcher.select(0)

# 选择后anime属性可用
print(searcher.anime.title)
print(searcher.anime.size)

# 输出:
# '【动漫国字幕组】[【我推的孩子】][01-11][BDRip][AVC_AAC][1080P][简体][MP4]'
# '7.3GB'
```

## 主要组件

### AniSearch 类

`AniSearch` 是主要的搜索类,提供以下方法:

- `search(keyword, collected=None, proxies=None, system_proxy=None, **extra_options)`: 搜索动画
- `select(index)`: 从搜索结果中选择一个动画
- `size_format(unit='MB')`: 转换选定动画的文件大小
- `save_csv(filename)`: 将搜索结果保存到 CSV 文件(所有结果)

** extra_options 参数会被并入爬取时的查询字符串中,可以用于指定额外的分类或选项,具体的查询字符串请自行查看搜索源搜索时的 url

![查询字符串](https://cdn.mmoe.work/img/url.png)

### Anime 类

`Anime` 类代表一个动画条目,包含以下属性:

- `time`: 发布时间
- `title`: 动画标题
- `size`: 文件大小
- `magnet`: 磁力链接

其__eq__方法被实现为比较两个 Anime 实例磁力链接的哈希值。

### 插件系统

AniSearch 使用基于元类的插件系统来支持不同的搜索源

### 已实现的插件

非常悲哀的是,以下搜索源都需要代理

- `dmhy`: 动漫花园搜索源(速度较快)
- `comicat`: [存档] 漫猫搜索源(实现非常慢,慎用,建议只搜索季度合集)
- `kisssub`: [存档] 爱恋搜索源(同上)
- `miobt`:[存档] MioBT 搜索源(同上)
- `nyaa`: nyaa.si 搜索源(速度超群,不能使用季度合集搜索)
- `acgrip`: acg.rip 搜索源(速度适中,不能使用季度合集搜索,由于站点的自身原因,获取的magnet是种子的下载链接)
- `tokyotosho` : 东京图书馆搜索源(速度适中,不能使用季度合集搜索,绝大部分资源都需要英/日文才能搜到)

## 创建自定义插件
要创建自定义插件,您需要继承 BasePlugin 类并实现 search 方法,anisearch 提供了一个实用的http请求函数 `anisearch.plugins._webget.get_html()`,可以直接使用。以下是一个简单的示例:

```python
# 运行此代码,没有异常说明自定义插件创建成功,已经注册在插件系统中
from anisearch.plugins import BasePlugin
from anisearch.plugins.Anime import Anime
from anisearch.plugins._webget import get_html


class Custom(BasePlugin):
    abstract = False

    def __init__(self, parser, verify, timefmt) -> None:
        super().__init__(parser, verify, timefmt)

    def search(self, keyword, collected=True, proxies=None, system_proxy=False, **extra_options):
        html = get_html("<url>", proxies=proxies, system_proxy=system_proxy, verify=self._verify)

        # 这里实现您的搜索逻辑

        # 返回一个 Anime 对象的列表
        return [Anime("2023/06/01 12:00", "Custom Anime", "1.5GB", "magnet:?xt=urn:btih:..."), ...]
```

### 使用自定义插件示例

```python
searcher_custom = AniSearch(plugin_name='custom')

# 如果文件没有放在项目plugins目录下,需要手动将其引入命名空间
# 请务必将类名(遵守pep8命名规范)、插件名、文件名保持一致,大小写会自动处理

searcher_custom.search("我推的孩子")
```

## 命令行界面(CLI)使用

anisearch 附赠了一个命令行界面,可以直接在终端中使用。

### 基本用法

```
anisearch -k <关键词> [选项]
```

### 参数说明

- `-k`, `--keyword`: (必需) 搜索关键词
- `-p`, `--plugin`: (可选) 搜索插件,默认为 `dmhy`
- `-c`, `--collected`: (可选) 是否只搜索季度合集

### 示例

1. 基本搜索:

```
anisearch -k "我推的孩子"
```

2. 使用特定搜索插件搜索:

```
anisearch -k "我推的孩子" -p nyaa
```

### 使用流程

1. 运行搜索命令后,程序会显示搜索结果列表,包括序号、标题和文件大小
2. 用户可以输入想要选择的项目的序号
3. 如果选择了有效的序号,程序会显示所选项目的标题和磁力链接
4. 输入 0 可以退出选择过程

## 贡献

欢迎贡献!请随时提交 pull requests 或开启 issues 来改进这个项目

## 许可证

AGPLv3

            

Raw data

            {
    "_id": null,
    "home_page": "https://anisearch.mmoe.work",
    "name": "Anisearch-lib",
    "maintainer": null,
    "docs_url": null,
    "requires_python": null,
    "maintainer_email": null,
    "keywords": "search download magnet link magnet-link torrent anime dmhy comicat kisssub miobt nyaa acg.rip acgrip tokyotosho cli commandline",
    "author": "adogecheems",
    "author_email": "adogecheems@outlook.com",
    "download_url": "https://files.pythonhosted.org/packages/01/37/44a6350c0321b71db96586595aa4b2d2d1ecdc5efae3297106e482c0520a/anisearch_lib-1.3.5.tar.gz",
    "platform": null,
    "description": "# Anisearch\n\n[English](https://github.com/adogecheems/anisearch/blob/master/README_en.md)\n\nanisearch \u662f\u4e00\u4e2a\u529f\u80fd\u9f50\u5168\u7684 Python \u5e93\uff0c\u7528\u4e8e\u641c\u7d22\u52a8\u753b\u78c1\u529b\u94fe\u63a5\u3002\u5b83\u8fd8\u63d0\u4f9b\u4e86\u4e00\u4e2a\u7075\u6d3b\u7684\u63d2\u4ef6\u7cfb\u7edf\uff0c\u5141\u8bb8\u7528\u6237\u4ece\u4e0d\u540c\u7684\u6765\u6e90\u641c\u7d22\u52a8\u753b\u4fe1\u606f\n\n## \u529f\u80fd\u7279\u70b9\n\n- \u652f\u6301\u591a\u4e2a\u641c\u7d22\u6e90\n- \u5f3a\u5927\u7684\u53ef\u6269\u5c55\u6027\n- CSV \u5bfc\u51fa\u529f\u80fd\n- \u4ee3\u7406\u652f\u6301\n\n## \u5b89\u88c5\n\n\u4f60\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528 pip \u5b89\u88c5 anisearch\uff1a\n\n```\npip install Anisearch-lib\n```\n\n## \u4f7f\u7528\u793a\u4f8b\n\n\u4ee5\u4e0b\u662f\u4f7f\u7528 anisearch \u7684\u57fa\u672c\u793a\u4f8b\uff1a\n\n```python\nfrom anisearch import AniSearch\n\n# \u521b\u5efa AniSearch \u5b9e\u4f8b\nsearcher = AniSearch()\n\n# __init__()\u65b9\u6cd5\u53ef\u9009\u7684\u53c2\u6570\uff1a\n# plugin_name: \u641c\u7d22\u6e90\u540d\u79f0\uff0c\u9ed8\u8ba4\u4e3a 'dmhy'\n# parser: beautifulsoup \u89e3\u6790\u5668\uff0c\u5728'dmhy'\u4e2d\u9ed8\u8ba4\u4e3a'lxml'\n# verify: \u662f\u5426\u9a8c\u8bc1 SSL \u8bc1\u4e66\uff0c\u5728'dmhy'\u4e2d\u9ed8\u8ba4\u4e3aFalse\n# time_fmt: \u65f6\u95f4\u683c\u5f0f\uff0c\u9ed8\u8ba4\u4e3a'%Y-%m-%d %H:%M:%S'\n\n# \u4ee5\u4e0a\u53c2\u6570\u7684\u9ed8\u8ba4\u503c\u5728\u9009\u62e9\u4e0d\u540c\u7684\u63d2\u4ef6\u7684\u65f6\u5019\u53ef\u80fd\u4f1a\u6709\u6240\u4e0d\u540c\n\n# \u641c\u7d22\u52a8\u753b\nsearcher.search('\u6211\u63a8\u7684\u5b69\u5b50')\n\n# search()\u65b9\u6cd5\u53ef\u9009\u7684\u53c2\u6570\uff1a\n# collected: \u662f\u5426\u53ea\u641c\u7d22\u5b63\u5ea6\u5408\u96c6\uff0c\u9ed8\u8ba4\u4e3aTrue\n# proxies: \u4ee3\u7406url\n#\n# \u4f7f\u7528\u4ee3\u7406\n# proxies = {\n#     'http': 'http://10.10.1.10:3128',\n#     'https': 'http://10.10.1.10:1080',\n# } # \u522b\u5f53\u771f\uff0c\u5c31\u662f\u793a\u4f8b\u800c\u5df2\n# searcher.search(\"\u6211\u63a8\u7684\u5b69\u5b50\", proxies=proxies)\n# system_proxy: \u662f\u5426\u4f7f\u7528\u7cfb\u7edf\u4ee3\u7406(\u597d\u50cf\u603b\u662f\u4e0d\u80fd\u5de5\u4f5c)\n\n# \u641c\u7d22\u6210\u529f\u7684\u8bdd\u4f1a\u51fa\u73b0\u5982\u4e0b\u5b57\u6837:\n# This search is complete: \u6211\u63a8\u7684\u5b69\u5b50\n\n# \u8f93\u51fa\u641c\u7d22\u7ed3\u679c\u5217\u8868\nprint(searcher.animes)\n\n# \u5c55\u793a\u90e8\u5206\u8f93\u51fa\uff08\u57282024\u5e74\u516b\u6708\u7684\u7ed3\u679c\uff09\n# [Anime('2024/03/21 13:25', '\u3010\u52a8\u6f2b\u56fd\u5b57\u5e55\u7ec4\u3011[\u3010\u6211\u63a8\u7684\u5b69\u5b50\u3011][01-11][BDRip][AVC_AAC][1080P][\u7b80\u4f53][MP4]', '7.3GB', 'magnet:?xt=urn:btih:P76PROAB5JRUAPHIST63HGRUOMW7SEWU&dn=&tr=...\n\n# \u5982\u679c\u4e00\u5207\u6b63\u5e38\uff0c\u9009\u62e9\u7b2c\u4e00\u4e2a\u641c\u7d22\u7ed3\u679c\uff08\u5f53\u7136\u4e5f\u53ef\u4ee5\u9009\u62e9\u5176\u4ed6\u7684\uff09\nsearcher.select(0)\n\n# \u9009\u62e9\u540eanime\u5c5e\u6027\u53ef\u7528\nprint(searcher.anime.title)\nprint(searcher.anime.size)\n\n# \u8f93\u51fa\uff1a\n# '\u3010\u52a8\u6f2b\u56fd\u5b57\u5e55\u7ec4\u3011[\u3010\u6211\u63a8\u7684\u5b69\u5b50\u3011][01-11][BDRip][AVC_AAC][1080P][\u7b80\u4f53][MP4]'\n# '7.3GB'\n```\n\n## \u4e3b\u8981\u7ec4\u4ef6\n\n### AniSearch \u7c7b\n\n`AniSearch` \u662f\u4e3b\u8981\u7684\u641c\u7d22\u7c7b\uff0c\u63d0\u4f9b\u4ee5\u4e0b\u65b9\u6cd5\uff1a\n\n- `search(keyword, collected=None, proxies=None, system_proxy=None, **extra_options)`: \u641c\u7d22\u52a8\u753b\n- `select(index)`: \u4ece\u641c\u7d22\u7ed3\u679c\u4e2d\u9009\u62e9\u4e00\u4e2a\u52a8\u753b\n- `size_format(unit='MB')`: \u8f6c\u6362\u9009\u5b9a\u52a8\u753b\u7684\u6587\u4ef6\u5927\u5c0f\n- `save_csv(filename)`: \u5c06\u641c\u7d22\u7ed3\u679c\u4fdd\u5b58\u5230 CSV \u6587\u4ef6\uff08\u6240\u6709\u7ed3\u679c\uff09\n\n** extra_options \u53c2\u6570\u4f1a\u88ab\u5e76\u5165\u722c\u53d6\u65f6\u7684\u67e5\u8be2\u5b57\u7b26\u4e32\u4e2d\uff0c\u53ef\u4ee5\u7528\u4e8e\u6307\u5b9a\u989d\u5916\u7684\u5206\u7c7b\u6216\u9009\u9879\uff0c\u5177\u4f53\u7684\u67e5\u8be2\u5b57\u7b26\u4e32\u8bf7\u81ea\u884c\u67e5\u770b\u641c\u7d22\u6e90\u641c\u7d22\u65f6\u7684 url\n\n![\u67e5\u8be2\u5b57\u7b26\u4e32](https://cdn.mmoe.work/img/url.png)\n\n### Anime \u7c7b\n\n`Anime` \u7c7b\u4ee3\u8868\u4e00\u4e2a\u52a8\u753b\u6761\u76ee\uff0c\u5305\u542b\u4ee5\u4e0b\u5c5e\u6027\uff1a\n\n- `time`: \u53d1\u5e03\u65f6\u95f4\n- `title`: \u52a8\u753b\u6807\u9898\n- `size`: \u6587\u4ef6\u5927\u5c0f\n- `magnet`: \u78c1\u529b\u94fe\u63a5\n\n\u5176__eq__\u65b9\u6cd5\u88ab\u5b9e\u73b0\u4e3a\u6bd4\u8f83\u4e24\u4e2a Anime \u5b9e\u4f8b\u78c1\u529b\u94fe\u63a5\u7684\u54c8\u5e0c\u503c\u3002\n\n### \u63d2\u4ef6\u7cfb\u7edf\n\nAniSearch \u4f7f\u7528\u57fa\u4e8e\u5143\u7c7b\u7684\u63d2\u4ef6\u7cfb\u7edf\u6765\u652f\u6301\u4e0d\u540c\u7684\u641c\u7d22\u6e90\n\n### \u5df2\u5b9e\u73b0\u7684\u63d2\u4ef6\n\n\u975e\u5e38\u60b2\u54c0\u7684\u662f\uff0c\u4ee5\u4e0b\u641c\u7d22\u6e90\u90fd\u9700\u8981\u4ee3\u7406\n\n- `dmhy`: \u52a8\u6f2b\u82b1\u56ed\u641c\u7d22\u6e90\uff08\u901f\u5ea6\u8f83\u5feb\uff09\n- `comicat`: [\u5b58\u6863] \u6f2b\u732b\u641c\u7d22\u6e90\uff08\u5b9e\u73b0\u975e\u5e38\u6162\uff0c\u614e\u7528\uff0c\u5efa\u8bae\u53ea\u641c\u7d22\u5b63\u5ea6\u5408\u96c6\uff09\n- `kisssub`: [\u5b58\u6863] \u7231\u604b\u641c\u7d22\u6e90\uff08\u540c\u4e0a\uff09\n- `miobt`\uff1a[\u5b58\u6863] MioBT \u641c\u7d22\u6e90\uff08\u540c\u4e0a\uff09\n- `nyaa`: nyaa.si \u641c\u7d22\u6e90\uff08\u901f\u5ea6\u8d85\u7fa4\uff0c\u4e0d\u80fd\u4f7f\u7528\u5b63\u5ea6\u5408\u96c6\u641c\u7d22\uff09\n- `acgrip`: acg.rip \u641c\u7d22\u6e90\uff08\u901f\u5ea6\u9002\u4e2d\uff0c\u4e0d\u80fd\u4f7f\u7528\u5b63\u5ea6\u5408\u96c6\u641c\u7d22\uff0c\u7531\u4e8e\u7ad9\u70b9\u7684\u81ea\u8eab\u539f\u56e0\uff0c\u83b7\u53d6\u7684magnet\u662f\u79cd\u5b50\u7684\u4e0b\u8f7d\u94fe\u63a5\uff09\n- `tokyotosho` : \u4e1c\u4eac\u56fe\u4e66\u9986\u641c\u7d22\u6e90\uff08\u901f\u5ea6\u9002\u4e2d\uff0c\u4e0d\u80fd\u4f7f\u7528\u5b63\u5ea6\u5408\u96c6\u641c\u7d22\uff0c\u7edd\u5927\u90e8\u5206\u8d44\u6e90\u90fd\u9700\u8981\u82f1/\u65e5\u6587\u624d\u80fd\u641c\u5230\uff09\n\n## \u521b\u5efa\u81ea\u5b9a\u4e49\u63d2\u4ef6\n\u8981\u521b\u5efa\u81ea\u5b9a\u4e49\u63d2\u4ef6\uff0c\u60a8\u9700\u8981\u7ee7\u627f BasePlugin \u7c7b\u5e76\u5b9e\u73b0 search \u65b9\u6cd5\uff0canisearch \u63d0\u4f9b\u4e86\u4e00\u4e2a\u5b9e\u7528\u7684http\u8bf7\u6c42\u51fd\u6570 `anisearch.plugins._webget.get_html()`\uff0c\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u3002\u4ee5\u4e0b\u662f\u4e00\u4e2a\u7b80\u5355\u7684\u793a\u4f8b\uff1a\n\n```python\n# \u8fd0\u884c\u6b64\u4ee3\u7801\uff0c\u6ca1\u6709\u5f02\u5e38\u8bf4\u660e\u81ea\u5b9a\u4e49\u63d2\u4ef6\u521b\u5efa\u6210\u529f\uff0c\u5df2\u7ecf\u6ce8\u518c\u5728\u63d2\u4ef6\u7cfb\u7edf\u4e2d\nfrom anisearch.plugins import BasePlugin\nfrom anisearch.plugins.Anime import Anime\nfrom anisearch.plugins._webget import get_html\n\n\nclass Custom(BasePlugin):\n    abstract = False\n\n    def __init__(self, parser, verify, timefmt) -> None:\n        super().__init__(parser, verify, timefmt)\n\n    def search(self, keyword, collected=True, proxies=None, system_proxy=False, **extra_options):\n        html = get_html(\"<url>\", proxies=proxies, system_proxy=system_proxy, verify=self._verify)\n\n        # \u8fd9\u91cc\u5b9e\u73b0\u60a8\u7684\u641c\u7d22\u903b\u8f91\n\n        # \u8fd4\u56de\u4e00\u4e2a Anime \u5bf9\u8c61\u7684\u5217\u8868\n        return [Anime(\"2023/06/01 12:00\", \"Custom Anime\", \"1.5GB\", \"magnet:?xt=urn:btih:...\"), ...]\n```\n\n### \u4f7f\u7528\u81ea\u5b9a\u4e49\u63d2\u4ef6\u793a\u4f8b\n\n```python\nsearcher_custom = AniSearch(plugin_name='custom')\n\n# \u5982\u679c\u6587\u4ef6\u6ca1\u6709\u653e\u5728\u9879\u76eeplugins\u76ee\u5f55\u4e0b\uff0c\u9700\u8981\u624b\u52a8\u5c06\u5176\u5f15\u5165\u547d\u540d\u7a7a\u95f4\n# \u8bf7\u52a1\u5fc5\u5c06\u7c7b\u540d\uff08\u9075\u5b88pep8\u547d\u540d\u89c4\u8303\uff09\u3001\u63d2\u4ef6\u540d\u3001\u6587\u4ef6\u540d\u4fdd\u6301\u4e00\u81f4\uff0c\u5927\u5c0f\u5199\u4f1a\u81ea\u52a8\u5904\u7406\n\nsearcher_custom.search(\"\u6211\u63a8\u7684\u5b69\u5b50\")\n```\n\n## \u547d\u4ee4\u884c\u754c\u9762\uff08CLI\uff09\u4f7f\u7528\n\nanisearch \u9644\u8d60\u4e86\u4e00\u4e2a\u547d\u4ee4\u884c\u754c\u9762\uff0c\u53ef\u4ee5\u76f4\u63a5\u5728\u7ec8\u7aef\u4e2d\u4f7f\u7528\u3002\n\n### \u57fa\u672c\u7528\u6cd5\n\n```\nanisearch -k <\u5173\u952e\u8bcd> [\u9009\u9879]\n```\n\n### \u53c2\u6570\u8bf4\u660e\n\n- `-k`, `--keyword`: (\u5fc5\u9700) \u641c\u7d22\u5173\u952e\u8bcd\n- `-p`, `--plugin`: (\u53ef\u9009) \u641c\u7d22\u63d2\u4ef6\uff0c\u9ed8\u8ba4\u4e3a `dmhy`\n- `-c`, `--collected`: (\u53ef\u9009) \u662f\u5426\u53ea\u641c\u7d22\u5b63\u5ea6\u5408\u96c6\n\n### \u793a\u4f8b\n\n1. \u57fa\u672c\u641c\u7d22\uff1a\n\n```\nanisearch -k \"\u6211\u63a8\u7684\u5b69\u5b50\"\n```\n\n2. \u4f7f\u7528\u7279\u5b9a\u641c\u7d22\u63d2\u4ef6\u641c\u7d22\uff1a\n\n```\nanisearch -k \"\u6211\u63a8\u7684\u5b69\u5b50\" -p nyaa\n```\n\n### \u4f7f\u7528\u6d41\u7a0b\n\n1. \u8fd0\u884c\u641c\u7d22\u547d\u4ee4\u540e\uff0c\u7a0b\u5e8f\u4f1a\u663e\u793a\u641c\u7d22\u7ed3\u679c\u5217\u8868\uff0c\u5305\u62ec\u5e8f\u53f7\u3001\u6807\u9898\u548c\u6587\u4ef6\u5927\u5c0f\n2. \u7528\u6237\u53ef\u4ee5\u8f93\u5165\u60f3\u8981\u9009\u62e9\u7684\u9879\u76ee\u7684\u5e8f\u53f7\n3. \u5982\u679c\u9009\u62e9\u4e86\u6709\u6548\u7684\u5e8f\u53f7\uff0c\u7a0b\u5e8f\u4f1a\u663e\u793a\u6240\u9009\u9879\u76ee\u7684\u6807\u9898\u548c\u78c1\u529b\u94fe\u63a5\n4. \u8f93\u5165 0 \u53ef\u4ee5\u9000\u51fa\u9009\u62e9\u8fc7\u7a0b\n\n## \u8d21\u732e\n\n\u6b22\u8fce\u8d21\u732e\uff01\u8bf7\u968f\u65f6\u63d0\u4ea4 pull requests \u6216\u5f00\u542f issues \u6765\u6539\u8fdb\u8fd9\u4e2a\u9879\u76ee\n\n## \u8bb8\u53ef\u8bc1\n\nAGPLv3\n",
    "bugtrack_url": null,
    "license": "AGPLv3",
    "summary": "A library for searching anime magnet links",
    "version": "1.3.5",
    "project_urls": {
        "Homepage": "https://anisearch.mmoe.work"
    },
    "split_keywords": [
        "search",
        "download",
        "magnet",
        "link",
        "magnet-link",
        "torrent",
        "anime",
        "dmhy",
        "comicat",
        "kisssub",
        "miobt",
        "nyaa",
        "acg.rip",
        "acgrip",
        "tokyotosho",
        "cli",
        "commandline"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ee27479a762948bf99b2a8066e8653c06fd537afd2704a5c37fdb2ce6bf52696",
                "md5": "75ff19ab9f3a8e967b35f857e3742f16",
                "sha256": "3a75b0b50888b01662e897cd2df47de0e21108af582377ca7afb5e9d034e1d20"
            },
            "downloads": -1,
            "filename": "Anisearch_lib-1.3.5-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "75ff19ab9f3a8e967b35f857e3742f16",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": null,
            "size": 31843,
            "upload_time": "2024-09-29T14:31:32",
            "upload_time_iso_8601": "2024-09-29T14:31:32.185648Z",
            "url": "https://files.pythonhosted.org/packages/ee/27/479a762948bf99b2a8066e8653c06fd537afd2704a5c37fdb2ce6bf52696/Anisearch_lib-1.3.5-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "013744a6350c0321b71db96586595aa4b2d2d1ecdc5efae3297106e482c0520a",
                "md5": "f2eda1a1261a8e1ef6645010d4da54c5",
                "sha256": "cff8b6413022c2b6471a8dc229fe207d50775325d9e61f36aa04f6eeb7300465"
            },
            "downloads": -1,
            "filename": "anisearch_lib-1.3.5.tar.gz",
            "has_sig": false,
            "md5_digest": "f2eda1a1261a8e1ef6645010d4da54c5",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 27425,
            "upload_time": "2024-09-29T14:31:34",
            "upload_time_iso_8601": "2024-09-29T14:31:34.075042Z",
            "url": "https://files.pythonhosted.org/packages/01/37/44a6350c0321b71db96586595aa4b2d2d1ecdc5efae3297106e482c0520a/anisearch_lib-1.3.5.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-09-29 14:31:34",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "anisearch-lib"
}
        
Elapsed time: 0.47289s