# Dmhylib
Dmhylib 是一个用于搜索动漫花园的 Python 库。它提供了一个 `DmhySearch` 类,可以用来搜索、选择和保存搜索结果。
## 安装
可以通过 pip 安装:
```
pip install dmhylib
```
## 使用方法
### 导入
```python
from dmhylib import DmhySearch
```
### 创建搜索对象
```python
search = DmhySearch(parser='lxml', verify=True, timefmt='%Y/%m/%d %H:%M')
```
- `parser`: BeautifulSoup 解析器,默认为 'lxml'
- `verify`: 是否验证 SSL 证书,默认为 True
- `timefmt`: 时间格式,默认为 '%Y/%m/%d %H:%M'
### 执行搜索
```python
search.search(keyword="关键词", sort_id=0, team_id=0, order='date-desc', proxies=None, system_proxy=False)
```
- `keyword`: 搜索关键词
- `sort_id`: 排序 ID,默认为 0。可用的排序 ID 有: 0, 2, 31, 3, 41, 42, 4, 43, 44, 15, 6, 7, 9, 17, 18, 19, 20, 21, 12, 1
- `team_id`: 团队 ID,默认为 0
- `order`: 排序顺序,默认为 'date-desc'
- `proxies`: 代理设置,默认为 None
- `system_proxy`: 是否使用系统代理,默认为 False
### 选择搜索结果
```python
search.select(num)
```
- `num`: 要选择的搜索结果的索引
### 格式化文件大小
```python
search.size_format(unit='MB')
```
- `unit`: 目标单位,默认为 'MB'
将选中项的文件大小格式化为指定单位。
### 保存为 CSV
```python
search.save_csv(filename)
```
- `filename`: 要保存的 CSV 文件路径
将选中的搜索结果保存到 CSV 文件中。
## 属性
搜索后,可以通过以下属性访问结果:
- `search.sum`: 搜索结果总数
- `search.times`: 发布时间列表
- `search.titles`: 标题列表
- `search.sizes`: 文件大小列表
- `search.magnets`: 磁力链接列表
选择某个结果后,可以通过以下属性访问选中项:
- `search.time`: 选中项的发布时间
- `search.title`: 选中项的标题
- `search.size`: 选中项的文件大小
- `search.magnet`: 选中项的磁力链接
## 示例
```python
from dmhylib import DmhySearch
# 创建搜索对象
search = DmhySearch()
# 执行搜索
search.search(keyword="我推的孩子")
# 选择第一个结果
search.select(0)
# 格式化文件大小为 GB
search.size_format(unit='GB')
# 保存到 CSV 文件
search.save_csv("results.csv")
```
## 注意事项
- 在使用 `select()`, `size_format()`, 或 `save_csv()` 方法之前,必须先调用 `search()` 方法。
- `size_format()` 和 `save_csv()` 方法必须在 `select()` 方法之后调用。
## 依赖
本库依赖于以下 Python 包:
- BeautifulSoup4
- lxml
- requests
- rich
## 命令行界面(CLI)使用
Dmhylib 附赠了一个命令行界面,可以直接在终端中使用。
### 基本用法
```
dmhysearch search -k <关键词> [选项]
```
### 参数说明
- `-k`, `--keyword`: (必需) 搜索关键词
- `-s`, `--sort-id`: (可选) 搜索分类ID
- `-t`, `--team-id`: (可选) 发布团队ID
- `-o`, `--order`: (可选) 排序方式
### 示例
1. 基本搜索:
```
dmhysearch search -k "我推的孩子"
```
2. 使用特定分类ID搜索:
```
dmhysearch search -k "我推的孩子" -s 31
# "31"是指季度全集
```
3. 指定团队ID和排序方式:
```
dmhysearch search -k "我推的孩子" -t 619 -o "date-desc"
# "619"是桜都字幕组
```
### 使用流程
1. 运行搜索命令后,程序会显示搜索结果列表,包括序号、标题和文件大小。
2. 用户可以输入想要选择的项目的序号。
3. 如果选择了有效的序号,程序会显示所选项目的标题和磁力链接。
4. 输入 0 可以退出选择过程。
### 注意事项
- 如果不确定可用的参数,可以参考 dmhy.org 的查询字符串。
### 获取帮助
要查看所有可用的命令和选项,可以运行:
```
dmhysearch --help
```
或者查看特定命令的帮助:
```
dmhysearch search --help
```
## 许可证
本项目使用 GPL-3.0 许可证
Raw data
{
"_id": null,
"home_page": "https://github.com/adogecheems/Dmhylib/",
"name": "Dmhylib",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"keywords": "dmhy search download anime",
"author": "adogecheems",
"author_email": "adogecheems@outlook.com",
"download_url": "https://files.pythonhosted.org/packages/7a/27/ae3dbafa10ea4a663ad942b9a33b19625401c956943c92b56871aa7f86e5/dmhylib-2.0.0.tar.gz",
"platform": null,
"description": "# Dmhylib\n\nDmhylib \u662f\u4e00\u4e2a\u7528\u4e8e\u641c\u7d22\u52a8\u6f2b\u82b1\u56ed\u7684 Python \u5e93\u3002\u5b83\u63d0\u4f9b\u4e86\u4e00\u4e2a `DmhySearch` \u7c7b\uff0c\u53ef\u4ee5\u7528\u6765\u641c\u7d22\u3001\u9009\u62e9\u548c\u4fdd\u5b58\u641c\u7d22\u7ed3\u679c\u3002\n\n## \u5b89\u88c5\n\n\u53ef\u4ee5\u901a\u8fc7 pip \u5b89\u88c5:\n\n```\npip install dmhylib\n```\n\n## \u4f7f\u7528\u65b9\u6cd5\n\n### \u5bfc\u5165\n\n```python\nfrom dmhylib import DmhySearch\n```\n\n### \u521b\u5efa\u641c\u7d22\u5bf9\u8c61\n\n```python\nsearch = DmhySearch(parser='lxml', verify=True, timefmt='%Y/%m/%d %H:%M')\n```\n\n- `parser`: BeautifulSoup \u89e3\u6790\u5668\uff0c\u9ed8\u8ba4\u4e3a 'lxml'\n- `verify`: \u662f\u5426\u9a8c\u8bc1 SSL \u8bc1\u4e66\uff0c\u9ed8\u8ba4\u4e3a True\n- `timefmt`: \u65f6\u95f4\u683c\u5f0f\uff0c\u9ed8\u8ba4\u4e3a '%Y/%m/%d %H:%M'\n\n### \u6267\u884c\u641c\u7d22\n\n```python\nsearch.search(keyword=\"\u5173\u952e\u8bcd\", sort_id=0, team_id=0, order='date-desc', proxies=None, system_proxy=False)\n```\n\n- `keyword`: \u641c\u7d22\u5173\u952e\u8bcd\n- `sort_id`: \u6392\u5e8f ID\uff0c\u9ed8\u8ba4\u4e3a 0\u3002\u53ef\u7528\u7684\u6392\u5e8f ID \u6709: 0, 2, 31, 3, 41, 42, 4, 43, 44, 15, 6, 7, 9, 17, 18, 19, 20, 21, 12, 1\n- `team_id`: \u56e2\u961f ID\uff0c\u9ed8\u8ba4\u4e3a 0\n- `order`: \u6392\u5e8f\u987a\u5e8f\uff0c\u9ed8\u8ba4\u4e3a 'date-desc'\n- `proxies`: \u4ee3\u7406\u8bbe\u7f6e\uff0c\u9ed8\u8ba4\u4e3a None\n- `system_proxy`: \u662f\u5426\u4f7f\u7528\u7cfb\u7edf\u4ee3\u7406\uff0c\u9ed8\u8ba4\u4e3a False\n\n### \u9009\u62e9\u641c\u7d22\u7ed3\u679c\n\n```python\nsearch.select(num)\n```\n\n- `num`: \u8981\u9009\u62e9\u7684\u641c\u7d22\u7ed3\u679c\u7684\u7d22\u5f15\n\n### \u683c\u5f0f\u5316\u6587\u4ef6\u5927\u5c0f\n\n```python\nsearch.size_format(unit='MB')\n```\n\n- `unit`: \u76ee\u6807\u5355\u4f4d\uff0c\u9ed8\u8ba4\u4e3a 'MB'\n\n\u5c06\u9009\u4e2d\u9879\u7684\u6587\u4ef6\u5927\u5c0f\u683c\u5f0f\u5316\u4e3a\u6307\u5b9a\u5355\u4f4d\u3002\n\n### \u4fdd\u5b58\u4e3a CSV\n\n```python\nsearch.save_csv(filename)\n```\n\n- `filename`: \u8981\u4fdd\u5b58\u7684 CSV \u6587\u4ef6\u8def\u5f84\n\n\u5c06\u9009\u4e2d\u7684\u641c\u7d22\u7ed3\u679c\u4fdd\u5b58\u5230 CSV \u6587\u4ef6\u4e2d\u3002\n\n## \u5c5e\u6027\n\n\u641c\u7d22\u540e\uff0c\u53ef\u4ee5\u901a\u8fc7\u4ee5\u4e0b\u5c5e\u6027\u8bbf\u95ee\u7ed3\u679c:\n\n- `search.sum`: \u641c\u7d22\u7ed3\u679c\u603b\u6570\n- `search.times`: \u53d1\u5e03\u65f6\u95f4\u5217\u8868\n- `search.titles`: \u6807\u9898\u5217\u8868\n- `search.sizes`: \u6587\u4ef6\u5927\u5c0f\u5217\u8868\n- `search.magnets`: \u78c1\u529b\u94fe\u63a5\u5217\u8868\n\n\u9009\u62e9\u67d0\u4e2a\u7ed3\u679c\u540e\uff0c\u53ef\u4ee5\u901a\u8fc7\u4ee5\u4e0b\u5c5e\u6027\u8bbf\u95ee\u9009\u4e2d\u9879:\n\n- `search.time`: \u9009\u4e2d\u9879\u7684\u53d1\u5e03\u65f6\u95f4\n- `search.title`: \u9009\u4e2d\u9879\u7684\u6807\u9898\n- `search.size`: \u9009\u4e2d\u9879\u7684\u6587\u4ef6\u5927\u5c0f\n- `search.magnet`: \u9009\u4e2d\u9879\u7684\u78c1\u529b\u94fe\u63a5\n\n## \u793a\u4f8b\n\n```python\nfrom dmhylib import DmhySearch\n\n# \u521b\u5efa\u641c\u7d22\u5bf9\u8c61\nsearch = DmhySearch()\n\n# \u6267\u884c\u641c\u7d22\nsearch.search(keyword=\"\u6211\u63a8\u7684\u5b69\u5b50\")\n\n# \u9009\u62e9\u7b2c\u4e00\u4e2a\u7ed3\u679c\nsearch.select(0)\n\n# \u683c\u5f0f\u5316\u6587\u4ef6\u5927\u5c0f\u4e3a GB\nsearch.size_format(unit='GB')\n\n# \u4fdd\u5b58\u5230 CSV \u6587\u4ef6\nsearch.save_csv(\"results.csv\")\n```\n\n## \u6ce8\u610f\u4e8b\u9879\n\n- \u5728\u4f7f\u7528 `select()`, `size_format()`, \u6216 `save_csv()` \u65b9\u6cd5\u4e4b\u524d\uff0c\u5fc5\u987b\u5148\u8c03\u7528 `search()` \u65b9\u6cd5\u3002\n- `size_format()` \u548c `save_csv()` \u65b9\u6cd5\u5fc5\u987b\u5728 `select()` \u65b9\u6cd5\u4e4b\u540e\u8c03\u7528\u3002\n\n## \u4f9d\u8d56\n\n\u672c\u5e93\u4f9d\u8d56\u4e8e\u4ee5\u4e0b Python \u5305:\n\n- BeautifulSoup4\n- lxml\n- requests\n- rich\n\n## \u547d\u4ee4\u884c\u754c\u9762\uff08CLI\uff09\u4f7f\u7528\n\nDmhylib \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```\ndmhysearch search -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- `-s`, `--sort-id`: (\u53ef\u9009) \u641c\u7d22\u5206\u7c7bID\n- `-t`, `--team-id`: (\u53ef\u9009) \u53d1\u5e03\u56e2\u961fID\n- `-o`, `--order`: (\u53ef\u9009) \u6392\u5e8f\u65b9\u5f0f\n\n### \u793a\u4f8b\n\n1. \u57fa\u672c\u641c\u7d22\uff1a\n\n```\ndmhysearch search -k \"\u6211\u63a8\u7684\u5b69\u5b50\"\n```\n\n2. \u4f7f\u7528\u7279\u5b9a\u5206\u7c7bID\u641c\u7d22\uff1a\n\n```\ndmhysearch search -k \"\u6211\u63a8\u7684\u5b69\u5b50\" -s 31\n# \"31\"\u662f\u6307\u5b63\u5ea6\u5168\u96c6\n```\n\n3. \u6307\u5b9a\u56e2\u961fID\u548c\u6392\u5e8f\u65b9\u5f0f\uff1a\n\n```\ndmhysearch search -k \"\u6211\u63a8\u7684\u5b69\u5b50\" -t 619 -o \"date-desc\"\n# \"619\"\u662f\u685c\u90fd\u5b57\u5e55\u7ec4\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\u3002\n\n2. \u7528\u6237\u53ef\u4ee5\u8f93\u5165\u60f3\u8981\u9009\u62e9\u7684\u9879\u76ee\u7684\u5e8f\u53f7\u3002\n\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\u3002\n\n4. \u8f93\u5165 0 \u53ef\u4ee5\u9000\u51fa\u9009\u62e9\u8fc7\u7a0b\u3002\n\n### \u6ce8\u610f\u4e8b\u9879\n\n- \u5982\u679c\u4e0d\u786e\u5b9a\u53ef\u7528\u7684\u53c2\u6570\uff0c\u53ef\u4ee5\u53c2\u8003 dmhy.org \u7684\u67e5\u8be2\u5b57\u7b26\u4e32\u3002\n\n### \u83b7\u53d6\u5e2e\u52a9\n\n\u8981\u67e5\u770b\u6240\u6709\u53ef\u7528\u7684\u547d\u4ee4\u548c\u9009\u9879\uff0c\u53ef\u4ee5\u8fd0\u884c\uff1a\n\n```\ndmhysearch --help\n```\n\n\u6216\u8005\u67e5\u770b\u7279\u5b9a\u547d\u4ee4\u7684\u5e2e\u52a9\uff1a\n\n```\ndmhysearch search --help\n```\n\n## \u8bb8\u53ef\u8bc1\n\n\u672c\u9879\u76ee\u4f7f\u7528 GPL-3.0 \u8bb8\u53ef\u8bc1\n",
"bugtrack_url": null,
"license": "GPL-3.0",
"summary": "A library for searching and downloading from dmhy.org.",
"version": "2.0.0",
"project_urls": {
"Homepage": "https://github.com/adogecheems/Dmhylib/"
},
"split_keywords": [
"dmhy",
"search",
"download",
"anime"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "bd4b46f9ac5f53888461aa4344b1096110fc35e06836ff870b569f3c02478d6a",
"md5": "abdf55649dd7ed9040aea52b416ba194",
"sha256": "789e41ca7988dc550f32e2e395b48a0581b1df02809f3a6b0b90d92d5bf382e5"
},
"downloads": -1,
"filename": "Dmhylib-2.0.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "abdf55649dd7ed9040aea52b416ba194",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 21554,
"upload_time": "2024-08-11T07:41:20",
"upload_time_iso_8601": "2024-08-11T07:41:20.204967Z",
"url": "https://files.pythonhosted.org/packages/bd/4b/46f9ac5f53888461aa4344b1096110fc35e06836ff870b569f3c02478d6a/Dmhylib-2.0.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "7a27ae3dbafa10ea4a663ad942b9a33b19625401c956943c92b56871aa7f86e5",
"md5": "02a6bacb4e855b394e0ecbcb36389dc5",
"sha256": "3ce4675970984b3d16394a94613aaeee2f68726f2af1cd6571d1edfae9e85eb1"
},
"downloads": -1,
"filename": "dmhylib-2.0.0.tar.gz",
"has_sig": false,
"md5_digest": "02a6bacb4e855b394e0ecbcb36389dc5",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 22436,
"upload_time": "2024-08-11T07:41:22",
"upload_time_iso_8601": "2024-08-11T07:41:22.639943Z",
"url": "https://files.pythonhosted.org/packages/7a/27/ae3dbafa10ea4a663ad942b9a33b19625401c956943c92b56871aa7f86e5/dmhylib-2.0.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-08-11 07:41:22",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "adogecheems",
"github_project": "Dmhylib",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [],
"lcname": "dmhylib"
}