最近做了一个小的家庭NAS项目:用python爬虫定期抓取某动漫网站页面中的下载链接数量,当下载数量增加时即该动漫已经更新最新的一集,然后取得最新一集的URL后用群晖自带的Download Station自动开始下载。
先附上一份群晖官方的Download Station webapi文档:https://global.download.synology.com/download/Document/Software/DeveloperGuide/Package/DownloadStation/All/enu/Synology_Download_Station_Web_API.pdf
官方文档中的例子给出的如下参数已经过时,与我实际查询出来的参数不一样,大家要根据实际情况做修改。
官方给的:
{
"data":{
"SYNO.API.Auth":{
"path":"auth.cgi",
"minVersion":1,
"maxVersion":2
},
"SYNO.DownloadStation.Task":{
"path":"DownloadStation/task.cgi",
"minVersion":1,
"maxVersion":1
}
},
"success":true
}
实际查询的:(版本和某些路径已经改变)
{
"data":{
"SYNO.API.Auth":{
"maxVersion":7,
"minVersion":1,
"path":"entry.cgi"
},
"SYNO.DownloadStation.Task":{
"maxVersion":3,
"minVersion":1,
"path":"DownloadStation/task.cgi"
}
},
"success":true
}
简单写一下本人用到的几个调用方法,其他的使用方法都比较类似,大家可以参考文档自行摸索。
省略用python爬虫抓取下载链接的内容,大家已经可以搜到很多关于requests模块的用法。
当得到下载地址url后,第一步:查看webapi所需的参数。响应结果如上。
# 构建header
header = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36"
}
# 构建session
login_session = requests.session()
# get方法获取API参数
re = login_session.get(
"https://x.x.x.x(你NAS的ip地址):5001/webapi/query.cgi?api=SYNO.API.Info&version=1&method=query&query=SYNO.API.Auth,SYNO.DownloadStation.Task",
headers=header, verify=False)
print(re.text)
第二步:配置登录服务器
#准备登录的传入的参数
syno_login_data = {
"api": "SYNO.API.Auth",
"version": 7,
"method": "login",
"account": "NAS用户名",
"passwd": "NAS密码",
"session": "DownloadStation",
"format": "cookie"
}
url = "https://x.x.x.x(NAS的ip地址):5001/webapi/entry.cgi?api=SYNO.API.Auth"
# 用post方法进行登录
response = login_session.post(url=url, headers=header, data=syno_login_data, verify=False)
print(response.text)
成功后得到如下响应:
{
"data":{
"account":"用户名",
"device_id":"你的设备id",
"ik_message":"",
"is_portal_port":false,
"sid":"你的sid",
"synotoken":"--------"
},
"success":true
}
第三步:进行下载
# 准备下载用到的参数
download_data = {
"api": "SYNO.DownloadStation.Task",
"version": 1,
"method": "create",
"uri": "你的下载地址url,实测磁力链接也可直接用"
}
response = login_session.post("https://x.x.x.x:5001/webapi/DownloadStation/task.cgi", headers=header, data=download_data,
verify=False)
print(response.text)
成功后得到如下响应:
{"success":true}
到此已经开始了下载任务,可以用以下方法查看进行中下载任务情况:
response = login_session.get(
"https://x.x.x.x:5001/webapi/DownloadStation/task.cgi?api=SYNO.DownloadStation.Task&version=1&method=list",
headers=header, verify=False)
print(response.text)
成功后得到响应:
{
"data":{
"offset":0,
"tasks":[
{
"id":"dbid_192",
"size":475165655,
"status":"seeding",
"title":"你的任务名",
"type":"bt",
"username":"你的用户名"
}
],
"total":1
},
"success":true
}
以上就是最近搞的小自动化玩意儿,还可以调用钉钉机器人等对任务的开始/完成进行通知~