注意:这篇文章上次更新于1039天前,文章内容可能已经过时。
为了给我的资源分享站和GitHub主页增加一个花里胡哨的Readme,利用 GitHub 上提供的下载 Pixiv 日榜的代码每天定时下载 P 站的日榜,并选择前三张放在 Readme 里。日榜每天都更新,图片每天都要下载,我又是一个喜欢屯东西的人,那么就面临了一个下载下来的图片保存到哪里的问题。一开始想的自然是存到阿里云盘,但是国内提供的服务就是没有隐私可言,存在别人那里的东西都会被人看光光,至少是被阿里云的鉴黄算法看光光😂,于是就出现了下面这种情况。
直接把我图片给删除了!👍
文件存储在 GitHub 虽然访问比困难,但是起码东西是在的。为了能够自动化执行下载图片和上传图片到 GitHub 的过程,就需要通过调用 API 来实现。
创建仓库 和 上传文件的操作都需要使用 access_token ,在执行代码之前首先到 https://github.com/settings/tokens 去生成一个token。
接下来就可以按照文档的说明创建仓库和上传图片了。
需要注意的是,对于上传的文件内容要进行 Base64 编码。
根据文档编写上传文件的 Python 代码:
import json
import base64
import requests
# 获取文件的 Base64 编码结果
def get_content(file_path):
with open(file_path,'rb') as f:
f_data = f.read()
data_b64 = base64.b64encode(f_data).decode('utf-8') # 将二进制文件编码后转换为字符串形式
return data_b64
def upload_file(content,file_name,repo_name,token):
url = f"https://api.github.com/repos/{repo_name}/contents/{file_name}"
headers = {"Authorization": "token " + token}
data = {
"message": "upload file",
"committer":{
"name": "username",
"email": "xx@xx.com"
},
"content": content
}
req = requests.put(url=url, data=data, headers=headers)
if __name__ == '__main__':
token = ''
f_data = get_content("./pic.jpg")
upload_file(f_data,"pic.jpg","UserName/RepoName",token)
更简单的方法是使用 PyGithub 提供的封装接口
首先安装 PyGithub 包
pip install PyGithub
在代码中直接调用 create_file 上传文件。
from github import Github
token = ''
g = Github(token)
user = g.get_user()
repo = user.create_repo("仓库名")
# 如果是已经存在的仓库,可以使用get_repo来获得repo对象
# repo = g.get_repo('用户名/仓库名')
# 读取文件并上传
with open('./pic.jpg','rb') as f:
data = f.read()
# 不需要进行Base64编码,编码过程在create_file内部已经完成了
repo.create_file('文件名','提交的message',data)
自动下载图片和转存图片的完整代码可以到我的仓库中进行查看。
https://github.com/WANG-Guangxin/Download-Pixiv-Ranking
全程白嫖 Github Action 资源。
拿捏🤏