# aligo
🚀🔥 简单、易用、可扩展的 [阿里云盘](https://www.alipan.com/) API 接口库 👍👍
[wiki 文档](https://github.com/foyoux/aligo/wiki) + [examples](https://github.com/foyoux/aligo/tree/main/examples)
> 文档写得很简单,详情请查看 代码提示 + 文档注释
>
> 有任何疑问 请 [issue](https://github.com/foyoux/aligo/issues/new?assignees=&labels=&template=bug_report.md&title=)
> 或 加入 **aligo交流反馈群** (群二维码在底部)
>
> 附带一份文档 [阿里云盘开放平台文档](https://www.yuque.com/aliyundrive/zpfszx/fitzlb1uyy0pv0iw)
## 安装
[![python version](https://img.shields.io/pypi/pyversions/aligo)](https://pypi.org/project/aligo/) [![Downloads](https://static.pepy.tech/personalized-badge/aligo?period=total&units=international_system&left_color=black&right_color=orange&left_text=Downloads)](https://pepy.tech/project/aligo)
```sh
pip install -U aligo
pip install git+https://github.com/foyoux/aligo.git
```
> **Notes:** 最近官方更新了接口,导致 `get_file_list` 无法直接获取下载链接,现在需要单独使用 `get_download_url` 接口获取下载链接。
>
> 对于不常用(没有封装)的接口,可以直接通过 `self.post` 方法直接发送请求。
>
> 接口变动较多,有问题请反馈,我会尽快修复。
## 快速入门
```python
"""快速入门"""
from aligo import Aligo
if __name__ == '__main__':
ali = Aligo() # 第一次使用,会弹出二维码,供扫描登录
user = ali.get_user() # 获取用户信息
print(user.user_name, user.nick_name, user.phone) # 打印用户信息
file_list = ali.get_file_list() # 获取网盘根目录文件列表
for file in file_list: # 遍历文件列表
# 注意:print(file) 默认只显示部分信息,但是实际上file有很多的属性
print(file.file_id, file.name, file.type) # 打印文件信息
```
https://user-images.githubusercontent.com/35125624/150529002-c2f1b80b-fb11-4e0a-9fd7-6f57f678ccf5.mp4
## 基本功能
- [x] 完全的代码提示
- [x] 持久化登录、多帐户登录
- [x] 福利码兑换
- [x] 文件夹同步
- [x] 在线解压缩
- [x] 支持功能扩展
- [x] 搜索文件/标签
- [x] 获取重复文件列表
- [x] 文件(夹)重命名
- [x] 文件(夹)上传下载
- [x] 文件(夹)移动复制
- [x] 文件(夹)删除恢复
- [x] 获取文档在线预览接口
- [x] 文件(夹)分享 保存 收藏
- [x] 文件(夹)自定义分享(无限制)
- [x] 获取帐户、云盘(容量)等基本信息
- [x] 相册 创建 删除 修改 添加文件 获取文件
> **Notes:**
> 1. 由于秒传链接的失效,自定分享信息的有效期只有4个小时。
> 2. 阿里云盘不同于其他网盘或系统,其定位文件不是基于文件名(路径),而是通过 `file_id`,这才是唯一定位文件的方式,**aligo** 中提供了简便函数 `get_file_by_path`/`get_folder_by_path`,通过网盘路径获取文件对象,通过 其上的 `file_id` 属性即可获取所需文件标识。但不建议频繁使用此方法,因为内部是通过 `get_file_list` 遍历得到的。
> 3. 在保存超大分享时(分享中的文件特别多),执行保存全部的方法 - `share_file_save_all_to_drive`,它会立刻执行完毕,但是文件不会立刻被保存到网盘中,阿里云盘服务器会帮你在后台陆续将所有文件存到你的网盘中;所有当你使用 `share_file_save_all_to_drive` 保存超大分享时,却只看到一部分文件时,不用疑惑,这是正常情况。
## 登录
1. 网页扫码登录
```python
from aligo import Aligo
# 提供 port 参数即可, 之后打开浏览器访问 http://<YOUR_IP>:<port>
ali = Aligo(port=8080)
```
2. 发送登录二维码到邮箱(推荐)
**最佳实践**:建议将邮箱绑定到微信,这样能实时收到提醒,登录过期后也可以第一时间收到登录请求。
```python
from aligo import Aligo, EMailConfig
if __name__ == '__main__':
email_config = EMailConfig(
email='<接收登录邮件的邮箱地址>',
# 自配邮箱
user='',
password='',
host='',
port=0,
)
ali = Aligo(email=email_config)
```
## 如何操作资源盘
```python
from aligo import Aligo
if __name__ == '__main__':
ali = Aligo()
drives = ali.list_my_drives()
# resource_drive_id = [drive.drive_id for drive in drives if drive.drive_name == 'resource'][0]
v2_user = ali.v2_user_get()
resource_drive_id = v2_user.resource_drive_id
# 如果后续默认操作资源盘
# ali.default_drive_id = resource_drive_id
file_list = ali.get_file_list(drive_id=resource_drive_id)
for file in file_list:
print(file)
```
## 如何自定义配置文件路径
```py
from aligo import set_config_folder, Aligo
if __name__ == '__main__':
# 创建 Aligo 对象前,先设置配置文件目录,默认是 <用户目录>/.aligo
set_config_folder('/home/aligo')
# 会创建 /home/aligo/小号1.json 配置文件
ali1 = Aligo(name='小号1')
# 会创建 /home/aligo/小号2.json 配置文件
ali2 = Aligo(name='小号2')
```
## 关于扩展功能
一般步骤:
1. 使用浏览器或其他抓包工具,观察通信过程;
2. 获取 url/path + 请求体;
3. 继承 `Aligo`, 使用现有的方法 `self._post` 等,进行发送请求;
会自动维护 **token**, 你只需关注如何发送请求即可
[扩展功能举栗🌰 - 配有视频和代码](https://github.com/foyoux/aligo/issues/24)
## 如何彻底删除文件?
> 无需先移动文件到回收站
此功能太危险,**aligo** 未直接提供。不过 [这里](https://github.com/foyoux/aligo/wiki/%E8%87%AA%E5%AE%9A%E4%B9%89%E5%8A%9F%E8%83%BD---%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4%E6%96%87%E4%BB%B6) 扩展了该功能,请小心使用!
## 声明
此项目仅供学习交流,若有不妥之处,侵联必删。
---
<table align="center">
<thead align="center">
<tr>
<td><h2>❤️🔥欢迎加入🤝🏼</h2></td>
</tr>
</thead>
<tbody align="center">
<tr>
<td><img src="http://110.42.175.98/github/aligo/wechat.jpg#qrcode" alt="aligo反馈交流群"/></td>
</tr>
</tbody>
<tfoot align="center">
<tr>
<td>😃 添加时,请附上留言消息 “aligo” 😜</td>
</tr>
</tfoot>
</table>
> 本来是群二维码,但是加进来发广告的太多了,所以改成了个人二维码。
Raw data
{
"_id": null,
"home_page": null,
"name": "aligo",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": "aligo",
"author": "foyoux",
"author_email": null,
"download_url": "https://files.pythonhosted.org/packages/58/83/8929f3a139af4b4d550a9d8839faa4c71de10b8f8821386ff14910b60e81/aligo-6.2.4.tar.gz",
"platform": null,
"description": "# aligo\n\n\ud83d\ude80\ud83d\udd25 \u7b80\u5355\u3001\u6613\u7528\u3001\u53ef\u6269\u5c55\u7684 [\u963f\u91cc\u4e91\u76d8](https://www.alipan.com/) API \u63a5\u53e3\u5e93 \ud83d\udc4d\ud83d\udc4d\n\n[wiki \u6587\u6863](https://github.com/foyoux/aligo/wiki) + [examples](https://github.com/foyoux/aligo/tree/main/examples)\n\n> \u6587\u6863\u5199\u5f97\u5f88\u7b80\u5355\uff0c\u8be6\u60c5\u8bf7\u67e5\u770b \u4ee3\u7801\u63d0\u793a + \u6587\u6863\u6ce8\u91ca\n> \n> \u6709\u4efb\u4f55\u7591\u95ee \u8bf7 [issue](https://github.com/foyoux/aligo/issues/new?assignees=&labels=&template=bug_report.md&title=)\n> \u6216 \u52a0\u5165 **aligo\u4ea4\u6d41\u53cd\u9988\u7fa4** \uff08\u7fa4\u4e8c\u7ef4\u7801\u5728\u5e95\u90e8\uff09\n> \n> \u9644\u5e26\u4e00\u4efd\u6587\u6863 [\u963f\u91cc\u4e91\u76d8\u5f00\u653e\u5e73\u53f0\u6587\u6863](https://www.yuque.com/aliyundrive/zpfszx/fitzlb1uyy0pv0iw)\n\n## \u5b89\u88c5\n\n[![python version](https://img.shields.io/pypi/pyversions/aligo)](https://pypi.org/project/aligo/) [![Downloads](https://static.pepy.tech/personalized-badge/aligo?period=total&units=international_system&left_color=black&right_color=orange&left_text=Downloads)](https://pepy.tech/project/aligo)\n\n```sh\npip install -U aligo\npip install git+https://github.com/foyoux/aligo.git\n```\n\n> **Notes\uff1a** \u6700\u8fd1\u5b98\u65b9\u66f4\u65b0\u4e86\u63a5\u53e3\uff0c\u5bfc\u81f4 `get_file_list` \u65e0\u6cd5\u76f4\u63a5\u83b7\u53d6\u4e0b\u8f7d\u94fe\u63a5\uff0c\u73b0\u5728\u9700\u8981\u5355\u72ec\u4f7f\u7528 `get_download_url` \u63a5\u53e3\u83b7\u53d6\u4e0b\u8f7d\u94fe\u63a5\u3002\n> \n> \u5bf9\u4e8e\u4e0d\u5e38\u7528\uff08\u6ca1\u6709\u5c01\u88c5\uff09\u7684\u63a5\u53e3\uff0c\u53ef\u4ee5\u76f4\u63a5\u901a\u8fc7 `self.post` \u65b9\u6cd5\u76f4\u63a5\u53d1\u9001\u8bf7\u6c42\u3002\n>\n> \u63a5\u53e3\u53d8\u52a8\u8f83\u591a\uff0c\u6709\u95ee\u9898\u8bf7\u53cd\u9988\uff0c\u6211\u4f1a\u5c3d\u5feb\u4fee\u590d\u3002\n\n## \u5feb\u901f\u5165\u95e8\n\n```python\n\"\"\"\u5feb\u901f\u5165\u95e8\"\"\"\nfrom aligo import Aligo\n\nif __name__ == '__main__':\n ali = Aligo() # \u7b2c\u4e00\u6b21\u4f7f\u7528\uff0c\u4f1a\u5f39\u51fa\u4e8c\u7ef4\u7801\uff0c\u4f9b\u626b\u63cf\u767b\u5f55\n\n user = ali.get_user() # \u83b7\u53d6\u7528\u6237\u4fe1\u606f\n print(user.user_name, user.nick_name, user.phone) # \u6253\u5370\u7528\u6237\u4fe1\u606f\n\n file_list = ali.get_file_list() # \u83b7\u53d6\u7f51\u76d8\u6839\u76ee\u5f55\u6587\u4ef6\u5217\u8868\n for file in file_list: # \u904d\u5386\u6587\u4ef6\u5217\u8868\n # \u6ce8\u610f\uff1aprint(file) \u9ed8\u8ba4\u53ea\u663e\u793a\u90e8\u5206\u4fe1\u606f\uff0c\u4f46\u662f\u5b9e\u9645\u4e0afile\u6709\u5f88\u591a\u7684\u5c5e\u6027\n print(file.file_id, file.name, file.type) # \u6253\u5370\u6587\u4ef6\u4fe1\u606f\n```\n\nhttps://user-images.githubusercontent.com/35125624/150529002-c2f1b80b-fb11-4e0a-9fd7-6f57f678ccf5.mp4\n\n## \u57fa\u672c\u529f\u80fd\n\n- [x] \u5b8c\u5168\u7684\u4ee3\u7801\u63d0\u793a\n- [x] \u6301\u4e45\u5316\u767b\u5f55\u3001\u591a\u5e10\u6237\u767b\u5f55\n- [x] \u798f\u5229\u7801\u5151\u6362\n- [x] \u6587\u4ef6\u5939\u540c\u6b65\n- [x] \u5728\u7ebf\u89e3\u538b\u7f29\n- [x] \u652f\u6301\u529f\u80fd\u6269\u5c55\n- [x] \u641c\u7d22\u6587\u4ef6/\u6807\u7b7e\n- [x] \u83b7\u53d6\u91cd\u590d\u6587\u4ef6\u5217\u8868\n- [x] \u6587\u4ef6\uff08\u5939\uff09\u91cd\u547d\u540d\n- [x] \u6587\u4ef6\uff08\u5939\uff09\u4e0a\u4f20\u4e0b\u8f7d\n- [x] \u6587\u4ef6\uff08\u5939\uff09\u79fb\u52a8\u590d\u5236\n- [x] \u6587\u4ef6\uff08\u5939\uff09\u5220\u9664\u6062\u590d\n- [x] \u83b7\u53d6\u6587\u6863\u5728\u7ebf\u9884\u89c8\u63a5\u53e3\n- [x] \u6587\u4ef6\uff08\u5939\uff09\u5206\u4eab \u4fdd\u5b58 \u6536\u85cf\n- [x] \u6587\u4ef6\uff08\u5939\uff09\u81ea\u5b9a\u4e49\u5206\u4eab\uff08\u65e0\u9650\u5236\uff09\n- [x] \u83b7\u53d6\u5e10\u6237\u3001\u4e91\u76d8\uff08\u5bb9\u91cf\uff09\u7b49\u57fa\u672c\u4fe1\u606f\n- [x] \u76f8\u518c \u521b\u5efa \u5220\u9664 \u4fee\u6539 \u6dfb\u52a0\u6587\u4ef6 \u83b7\u53d6\u6587\u4ef6\n\n> **Notes\uff1a**\n> 1. \u7531\u4e8e\u79d2\u4f20\u94fe\u63a5\u7684\u5931\u6548\uff0c\u81ea\u5b9a\u5206\u4eab\u4fe1\u606f\u7684\u6709\u6548\u671f\u53ea\u67094\u4e2a\u5c0f\u65f6\u3002\n> 2. \u963f\u91cc\u4e91\u76d8\u4e0d\u540c\u4e8e\u5176\u4ed6\u7f51\u76d8\u6216\u7cfb\u7edf\uff0c\u5176\u5b9a\u4f4d\u6587\u4ef6\u4e0d\u662f\u57fa\u4e8e\u6587\u4ef6\u540d\uff08\u8def\u5f84\uff09\uff0c\u800c\u662f\u901a\u8fc7 `file_id`\uff0c\u8fd9\u624d\u662f\u552f\u4e00\u5b9a\u4f4d\u6587\u4ef6\u7684\u65b9\u5f0f\uff0c**aligo** \u4e2d\u63d0\u4f9b\u4e86\u7b80\u4fbf\u51fd\u6570 `get_file_by_path`/`get_folder_by_path`\uff0c\u901a\u8fc7\u7f51\u76d8\u8def\u5f84\u83b7\u53d6\u6587\u4ef6\u5bf9\u8c61\uff0c\u901a\u8fc7 \u5176\u4e0a\u7684 `file_id` \u5c5e\u6027\u5373\u53ef\u83b7\u53d6\u6240\u9700\u6587\u4ef6\u6807\u8bc6\u3002\u4f46\u4e0d\u5efa\u8bae\u9891\u7e41\u4f7f\u7528\u6b64\u65b9\u6cd5\uff0c\u56e0\u4e3a\u5185\u90e8\u662f\u901a\u8fc7 `get_file_list` \u904d\u5386\u5f97\u5230\u7684\u3002\n> 3. \u5728\u4fdd\u5b58\u8d85\u5927\u5206\u4eab\u65f6\uff08\u5206\u4eab\u4e2d\u7684\u6587\u4ef6\u7279\u522b\u591a\uff09\uff0c\u6267\u884c\u4fdd\u5b58\u5168\u90e8\u7684\u65b9\u6cd5 - `share_file_save_all_to_drive`\uff0c\u5b83\u4f1a\u7acb\u523b\u6267\u884c\u5b8c\u6bd5\uff0c\u4f46\u662f\u6587\u4ef6\u4e0d\u4f1a\u7acb\u523b\u88ab\u4fdd\u5b58\u5230\u7f51\u76d8\u4e2d\uff0c\u963f\u91cc\u4e91\u76d8\u670d\u52a1\u5668\u4f1a\u5e2e\u4f60\u5728\u540e\u53f0\u9646\u7eed\u5c06\u6240\u6709\u6587\u4ef6\u5b58\u5230\u4f60\u7684\u7f51\u76d8\u4e2d\uff1b\u6240\u6709\u5f53\u4f60\u4f7f\u7528 `share_file_save_all_to_drive` \u4fdd\u5b58\u8d85\u5927\u5206\u4eab\u65f6\uff0c\u5374\u53ea\u770b\u5230\u4e00\u90e8\u5206\u6587\u4ef6\u65f6\uff0c\u4e0d\u7528\u7591\u60d1\uff0c\u8fd9\u662f\u6b63\u5e38\u60c5\u51b5\u3002\n\n## \u767b\u5f55\n\n1. \u7f51\u9875\u626b\u7801\u767b\u5f55\n\n ```python\n from aligo import Aligo\n \n # \u63d0\u4f9b port \u53c2\u6570\u5373\u53ef, \u4e4b\u540e\u6253\u5f00\u6d4f\u89c8\u5668\u8bbf\u95ee http://<YOUR_IP>:<port>\n ali = Aligo(port=8080)\n ```\n\n2. \u53d1\u9001\u767b\u5f55\u4e8c\u7ef4\u7801\u5230\u90ae\u7bb1\uff08\u63a8\u8350\uff09\n\n **\u6700\u4f73\u5b9e\u8df5**\uff1a\u5efa\u8bae\u5c06\u90ae\u7bb1\u7ed1\u5b9a\u5230\u5fae\u4fe1\uff0c\u8fd9\u6837\u80fd\u5b9e\u65f6\u6536\u5230\u63d0\u9192\uff0c\u767b\u5f55\u8fc7\u671f\u540e\u4e5f\u53ef\u4ee5\u7b2c\u4e00\u65f6\u95f4\u6536\u5230\u767b\u5f55\u8bf7\u6c42\u3002\n \n ```python\n from aligo import Aligo, EMailConfig\n \n if __name__ == '__main__':\n email_config = EMailConfig(\n email='<\u63a5\u6536\u767b\u5f55\u90ae\u4ef6\u7684\u90ae\u7bb1\u5730\u5740>',\n # \u81ea\u914d\u90ae\u7bb1\n user='',\n password='',\n host='',\n port=0,\n )\n ali = Aligo(email=email_config)\n ```\n\n## \u5982\u4f55\u64cd\u4f5c\u8d44\u6e90\u76d8\n\n```python\nfrom aligo import Aligo\n\nif __name__ == '__main__':\n ali = Aligo()\n \n drives = ali.list_my_drives()\n # resource_drive_id = [drive.drive_id for drive in drives if drive.drive_name == 'resource'][0]\n \n v2_user = ali.v2_user_get()\n resource_drive_id = v2_user.resource_drive_id\n \n # \u5982\u679c\u540e\u7eed\u9ed8\u8ba4\u64cd\u4f5c\u8d44\u6e90\u76d8\n # ali.default_drive_id = resource_drive_id\n \n file_list = ali.get_file_list(drive_id=resource_drive_id)\n for file in file_list:\n print(file)\n```\n\n## \u5982\u4f55\u81ea\u5b9a\u4e49\u914d\u7f6e\u6587\u4ef6\u8def\u5f84\n\n```py\nfrom aligo import set_config_folder, Aligo\n\nif __name__ == '__main__':\n # \u521b\u5efa Aligo \u5bf9\u8c61\u524d\uff0c\u5148\u8bbe\u7f6e\u914d\u7f6e\u6587\u4ef6\u76ee\u5f55\uff0c\u9ed8\u8ba4\u662f <\u7528\u6237\u76ee\u5f55>/.aligo\n set_config_folder('/home/aligo')\n # \u4f1a\u521b\u5efa /home/aligo/\u5c0f\u53f71.json \u914d\u7f6e\u6587\u4ef6\n ali1 = Aligo(name='\u5c0f\u53f71')\n # \u4f1a\u521b\u5efa /home/aligo/\u5c0f\u53f72.json \u914d\u7f6e\u6587\u4ef6\n ali2 = Aligo(name='\u5c0f\u53f72')\n```\n\n## \u5173\u4e8e\u6269\u5c55\u529f\u80fd\n\n\u4e00\u822c\u6b65\u9aa4\uff1a\n\n 1. \u4f7f\u7528\u6d4f\u89c8\u5668\u6216\u5176\u4ed6\u6293\u5305\u5de5\u5177\uff0c\u89c2\u5bdf\u901a\u4fe1\u8fc7\u7a0b\uff1b\n 2. \u83b7\u53d6 url/path + \u8bf7\u6c42\u4f53\uff1b\n 3. \u7ee7\u627f `Aligo`, \u4f7f\u7528\u73b0\u6709\u7684\u65b9\u6cd5 `self._post` \u7b49\uff0c\u8fdb\u884c\u53d1\u9001\u8bf7\u6c42\uff1b\n \n\u4f1a\u81ea\u52a8\u7ef4\u62a4 **token**, \u4f60\u53ea\u9700\u5173\u6ce8\u5982\u4f55\u53d1\u9001\u8bf7\u6c42\u5373\u53ef\n\n[\u6269\u5c55\u529f\u80fd\u4e3e\u6817\ud83c\udf30 - \u914d\u6709\u89c6\u9891\u548c\u4ee3\u7801](https://github.com/foyoux/aligo/issues/24)\n\n\n## \u5982\u4f55\u5f7b\u5e95\u5220\u9664\u6587\u4ef6\uff1f\n> \u65e0\u9700\u5148\u79fb\u52a8\u6587\u4ef6\u5230\u56de\u6536\u7ad9\n\n\u6b64\u529f\u80fd\u592a\u5371\u9669\uff0c**aligo** \u672a\u76f4\u63a5\u63d0\u4f9b\u3002\u4e0d\u8fc7 [\u8fd9\u91cc](https://github.com/foyoux/aligo/wiki/%E8%87%AA%E5%AE%9A%E4%B9%89%E5%8A%9F%E8%83%BD---%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4%E6%96%87%E4%BB%B6) \u6269\u5c55\u4e86\u8be5\u529f\u80fd\uff0c\u8bf7\u5c0f\u5fc3\u4f7f\u7528\uff01\n\n\n## \u58f0\u660e\n\n\u6b64\u9879\u76ee\u4ec5\u4f9b\u5b66\u4e60\u4ea4\u6d41\uff0c\u82e5\u6709\u4e0d\u59a5\u4e4b\u5904\uff0c\u4fb5\u8054\u5fc5\u5220\u3002\n\n---\n\n<table align=\"center\">\n <thead align=\"center\">\n <tr>\n <td><h2>\u2764\ufe0f\u200d\ud83d\udd25\u6b22\u8fce\u52a0\u5165\ud83e\udd1d\ud83c\udffc</h2></td>\n </tr>\n </thead>\n <tbody align=\"center\">\n <tr>\n <td><img src=\"http://110.42.175.98/github/aligo/wechat.jpg#qrcode\" alt=\"aligo\u53cd\u9988\u4ea4\u6d41\u7fa4\"/></td>\n </tr>\n </tbody>\n <tfoot align=\"center\">\n <tr>\n <td>\ud83d\ude03 \u6dfb\u52a0\u65f6\uff0c\u8bf7\u9644\u4e0a\u7559\u8a00\u6d88\u606f \u201caligo\u201d \ud83d\ude1c</td>\n </tr>\n </tfoot>\n</table>\n\n> \u672c\u6765\u662f\u7fa4\u4e8c\u7ef4\u7801\uff0c\u4f46\u662f\u52a0\u8fdb\u6765\u53d1\u5e7f\u544a\u7684\u592a\u591a\u4e86\uff0c\u6240\u4ee5\u6539\u6210\u4e86\u4e2a\u4eba\u4e8c\u7ef4\u7801\u3002\n",
"bugtrack_url": null,
"license": null,
"summary": "aliyun drive sdk",
"version": "6.2.4",
"project_urls": {
"Bug Tracker": "https://github.com/foyoux/aligo/issues",
"Homepage": "https://github.com/foyoux/aligo",
"Source": "https://github.com/foyoux/aligo"
},
"split_keywords": [
"aligo"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "48f1affdd74e8103bbb9c46f01d536e765b993af55d3151e580e7b738045df37",
"md5": "e88a560ddc44e7c5ab9a5abb2ffb966f",
"sha256": "47348d4bbdbac1e4663660e689a11ea9caecdb108a334dedf5e6cae062b789d5"
},
"downloads": -1,
"filename": "aligo-6.2.4-py3-none-any.whl",
"has_sig": false,
"md5_digest": "e88a560ddc44e7c5ab9a5abb2ffb966f",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 141374,
"upload_time": "2024-06-02T06:38:06",
"upload_time_iso_8601": "2024-06-02T06:38:06.015565Z",
"url": "https://files.pythonhosted.org/packages/48/f1/affdd74e8103bbb9c46f01d536e765b993af55d3151e580e7b738045df37/aligo-6.2.4-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "58838929f3a139af4b4d550a9d8839faa4c71de10b8f8821386ff14910b60e81",
"md5": "f83c257e9bd5663d327ebc14323f842f",
"sha256": "69a160911f7ec17580b89c1e0bd0f33904208be38bd79d3bfccbff209f2044bd"
},
"downloads": -1,
"filename": "aligo-6.2.4.tar.gz",
"has_sig": false,
"md5_digest": "f83c257e9bd5663d327ebc14323f842f",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 82568,
"upload_time": "2024-06-02T06:38:12",
"upload_time_iso_8601": "2024-06-02T06:38:12.043535Z",
"url": "https://files.pythonhosted.org/packages/58/83/8929f3a139af4b4d550a9d8839faa4c71de10b8f8821386ff14910b60e81/aligo-6.2.4.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-06-02 06:38:12",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "foyoux",
"github_project": "aligo",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "datclass",
"specs": [
[
">=",
"0.2.22"
]
]
},
{
"name": "requests",
"specs": [
[
">=",
"2.9.0"
]
]
},
{
"name": "qrcode",
"specs": []
},
{
"name": "coloredlogs",
"specs": []
},
{
"name": "tqdm",
"specs": [
[
">=",
"4.50.0"
]
]
},
{
"name": "qrcode_terminal",
"specs": []
}
],
"lcname": "aligo"
}