有一段时间收集了不少的写真集和漫画,但是一直苦于没有很好的组织和储存的方法,直到我找到了LycheeOrg/Lychee ,它的图片组织形式非常适合存放写真集或者漫画,于是我尝试把图片都放上去。体验很好,但是上传会很麻烦,因为它不支持文件夹上传,这意味着我需要一个一个上传图集并且创建相册,这简直是个灾难。
pychee6
于是我萌生了使用python写个上传器的想法,首先第一步就是找到一个能用的lychee的python库,经过lychee维护者ildyria推荐,我找到了Chostakovitch/pychee: Client for Lychee written in Python,然而已经很久没有维护了。所以我借鉴这个项目开发了一个lychee库x1ntt/pychee6。
目前只封装了比较常用的几个功能,例如上传下载图片和相册,创建移动等等。
同时考虑到api原生接口需要的album_id
是一个不方便的东西,还实现了相册路径转album_id
的功能,可以将诸如/depth_1/depth_2
这样的相册路径转换为形如p92kvXqyZUC6M-8CcPAwnCpd
的album_id
。
pychee6.cli
当然,只有一个库还不够,于是还开发了一个cli
作为命令行客户端,它可以按照下面的方式使用
shell
python3 -m pychee6.cli ls # 列出相册和图片
python3 -m pychee6.cli la # 列出相册
python3 -m pychee6.cli c_a / new_album # 在根目录创建名为`new_album`的相册
python3 -m pychee6.cli c_a /new_album deepth_1 # 在`new_album`下创建名为`deepth_2`的相册
python3 -m pychee6.cli d_a / ./tmp/ # 下载根目录下的相册到`./tmp/`
python3 -m pychee6.cli u_a /new_album ./tmp/test__album/ # 上传`./tmp/test__album/`目录到`/new_album`
python3 -m pychee6.cli u_p /new_album ./tmp/test__album/157_modify.webp # 上传图片
# 相册id和相册路径互相转换
python3 -m pychee6.cli c_v /new_album
python3 -m pychee6.cli c_v p92kvXqyZUC6M-8CcPAwnCpd
考虑到维护成本和功能需求,我并没有实现一个GUI界面。
下面是完整的帮助信息,更多请去 x1ntt/pychee6
shell
python -m pychee6.cli -h
usage: cli.py [-h] [-t TOKEN] [-u USER] [-p PASSWD] [-H HOST] [-m MAX_THREAD] [-v]
{upload_album,u_a,upload_photo,u_p,download_album,d_a,create_album,c_a,delete_album,del_a,list,ls,list_album,la,conv,c_v,reg_context,unreg_context} ...
这是LycheeClient的cli版本,你可以把这个当作库的使用示例。
大多数情况下,你可以使用album_id或者相册路径为参数。
album_id是一个24位长度的字符串形如:b4noPnuHQSSCXZL_IMsLEGAJ。
相册路径是以/开头的字符串形如:/deepth_1/deepth_2。其中单独的/表示根目录或者说未分类
positional arguments:
{upload_album,u_a,upload_photo,u_p,download_album,d_a,create_album,c_a,delete_album,del_a,list,ls,list_album,la,conv,c_v,reg_context,unreg_context}
upload_album (u_a) 上传相册,album_id为'/'则上传到根相册
upload_photo (u_p) 上传图片到相册,album_id为'/'则上传到未分类
download_album (d_a)
下载相册,album_id为'/'则下载所有
create_album (c_a) 创建相册,album_id为'/'则在根相册创建
delete_album (del_a)
删除指定相册
list (ls) 列出相册和图片
list_album (la) 仅显示相册
conv (c_v) album_id和album_path互相转换
reg_context 将上传下载功能注册到鼠标上下文菜单中
unreg_context 取消注册鼠标上下文菜单中的上传下载功能
options:
-h, --help show this help message and exit
-t, --token TOKEN 登录所需要的api token,与用户名二选一 可以通过 LYCHEE_TOKEN 环境变量提供
-u, --user USER 用户名 可以通过环境变量 LYCHEE_USERNAME 提供
-p, --passwd PASSWD 密码 可以通过环境变量 LYCHEE_PASSWORD 提供
-H, --host HOST 服务器地址,形如: http://exp.com:8808/ 可以通过环境变量 LYCHEE_HOST 提供
-m, --max_thread MAX_THREAD
线程池大小 影响上传下载数量,默认为5
-v, --verbose 输出调试信息
pychee6_cm
然而在使用了几次之后,发现只有一个命令行并不方便。当我需要上传一个文件夹时,我还需要打开cmd然后输入命令行,这其实很不方便。
于是我的另一个主意是,把cli的功能注册到windows资源管理器的上下文菜单,于是就有了x1ntt/pychee6_cm: 用于注册pychee.cli到windows资源管理的上下文菜单
效果如下:

上图展示了注册到上下文菜单、上传到指定相册、下载到文件夹的过程。
至此,已经能够满足我自己的使用了。
如果有遇到什么bug或者需求,欢迎到x1ntt/pychee6提出issue 🫡