前言
最近总是从抖音下载视频,但是直接抖音分享下载的视频是带有水印的,不是很喜欢。后来就去捷径库里面找了个捷径来下载抖音的分享视频,也可行,但是运行过程中有很多广告和其他的提示。后来发现网页版的抖音可以直接下载无水印版本的视频,正好看了huginn的自动化教程,正好拿来试试手。
流程
大概想法是,先获取抖音的视频分享链接,然后把链接发给一个telegram bot, 然后bot把链接传给huginn,在huginn里面解析并渲染网页,然后获取无水印视频的地址,最后将视频地址传回telegram bot,这样就完成了一个任务。
获取telegram bot
tg内通过加 @BotFather 为好友来新建一个bot,设置成功后会获得一个<token>,这个将会在后面用到。详细的tg bot api可以参考: https://core.telegram.org/bots/api 。
结束创建bot之后,给新建的bot输入几句话,然后通过 https://api.telegram.org/bot<你自己的token>/getUpdates ,就可以活得你与bot的通话信息。
{
ok: true,
result: [
{
update_id: 140863081,
message: {
message_id: 2,
from: {
id: 338083968,
is_bot: false,
first_name: "zaoldyeck",
username: "zaoldyeck9970",
language_code: "zh-Hant-TW"
},
chat: {
id: 338083968,
first_name: "zaoldyeck",
username: "zaoldyeck9970",
type: "private"
},
date: 1527754411,
text: "Hello"
}
}
]
}
类似与这样的格式,其中from里面的id,就是你的tg id,后面建立与你的通讯需要用到。
推送tg消息到huginn
这里通过webhook的方式,将tg的消息推送到huginn。
huginn + https 配置
由于tg要求webhook的链接必须是https的格式,所以首先需要对huginn端口进行https配置,这里采用nginx来实现,具体配置参考huginn官方配置,链接: https://github.com/huginn/huginn/wiki/Nginx-reverse-proxy-configuration 。
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name huginn.xxx.com;
# SSL
ssl_certificate /usr/local/nginx/conf/ssl/huginn.xxx.com/fullchain.cer;
ssl_certificate_key /usr/local/nginx/conf/ssl/huginn.xxx.com/huginn.xxx.com.key;
# reverse proxy
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Range $http_range;
proxy_set_header If-Range $http_if_range;
proxy_redirect off;
}
}
# HTTP redirect
server {
listen 80;
listen [::]:80;
server_name huginn.xxx.com;
return 301 https://huginn.xxx.com$request_uri;
}
在huginn中新建 WebhookAgent
参考配置如下:
{
"secret": "xyz",
"expected_receive_period_in_days": 1,
"payload_path": ".",
"event_headers": "",
"event_headers_key": "headers",
"score_threshold": 0.5
}
secret可以随便填写,其他的保持默认即可。配置完成后保存,然后查看详情,即可显示你的webhook链接,下面会用到。
设置Telegram bot webhook链接
参考方法: https://core.telegram.org/bots/api#setwebhook。示例如下
https://api.telegram.org/bot<token>/setWebhook?url=<webhook_url>
将上面获取的token和webhook链接替换,输入浏览器,看到输出:
{
ok: true,
result: true,
description: "Webhook was set"
}
即已经成功设置了webhook链接。再次通过bot输入抖音的分享链接,即可在huginn端获取到输入的信息。
获取如下格式的信息:
{
"update_id": 443335567,
"message": {
"message_id": 19,
"from": {
"id": 955116238,
"is_bot": false,
"first_name": "XXCC",
"username": "lree",
"language_code": "zh-hans"
},
"chat": {
"id": 812315217,
"first_name": "XXCC",
"username": "lree",
"type": "private"
},
"date": 1653056078,
"text": "7.94 jpq:/ 艾特列表第一个就是请你吃饭的人 哈哈哈哈%%我能请你吃个饭吗 %%复古dv https://v.douyin.com/FXemske/ 复制此链接,打开Dou音搜索,直接观看视频!",
"entities": [
{
"offset": 50,
"length": 29,
"type": "url"
}
]
},
"headers": {
}
}
huginn解析抖音分享链接
这里新建一个JavascriptAgent来解析获取的信息里面的url链接。
将上一个agent的数据作为source传入。参考代码如下:
Agent.receive = function() {
var events = this.incomingEvents();
var re = new RegExp('[a-zA-z]+://[^\\s]*');
for(var i = 0; i < events.length; i++) {
var data=re.exec(events[i].payload.message.text);
this.createEvent({ 'url': data });
}
}
用正则表达式筛选出url,然后创建为{{url}}参数输出,即可获取抖音网页链接。
获取抖音无水印视频的地址
获取的抖音网页并不是静态的html网页,动态网页需要先通过浏览器渲染才能拿到渲染的html网页结构,这里直接通过huginn内置的 Phantom Js Cloud Agent 来进行渲染并输出。
使用 Phantom Js Cloud 平台,需要先注册,免费的每天有500页面的渲染额度,注册成功后可以获取一个可用的api。
然后新建一个 Phantom Js Cloud Agent, 并传入上一个agent产生的数据。Api key输入注册后产生的api key。Url参数: {{url}}, 即上面创建的url变量。 Render type: 默认html即可。其他的默认, User agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36 Edg/101.0.1210.39。
经过Phantom Js Cloud 平台选然后,会给出一个html的网页链接地址,传入后一个agent进行网页分析。
解析渲染后的网页
新建一个WebsiteAgent,接受上一个agent的数据作为Sources。
WebsiteAgent是页面分析工具,打开抖音视频链接地址,可以看到抖音视频原始链接在一个video的标签下面。获取其中一个链接,即为原始视频链接。示例代码:
{
"expected_update_period_in_days": "2",
"url_from_event": "{{ url }}",
"type": "html",
"mode": "on_change",
"extract": {
"url": {
"css": "video[@mediatype='video']/source",
"value": "@src"
}
}
}
WebsiteAgent提取器的用法,请参考此agent的说明。这一步获取的url即为抖音视频的原始链接。下一步即可将链接推送回telegram。
将链接推送回Telegram
这里通过PostAgent和Telegram api的sendMessage方法来实现。
post_url
URL为https://api.telegram.org/bot<token>/sendMessage
,将<token>
部分换成自己的Bot token,可以保存到Credentials里。
参考格式如下:
{
"post_url": "https://api.telegram.org/bot<token>/sendMessage",
"expected_receive_period_in_days": "1",
"content_type": "json",
"method": "post",
"payload": {
"chat_id": "924135516",
"text": "{{url}}"
},
"headers": {},
"emit_events": "false",
"no_merge": "false",
"output_mode": "clean"
}
将里面的<token>,chat id换成自己的即可。
到此为止,所有的agent已经创建完毕,上面agent创建后推荐开启选项中的Propagate immediately,可以提高处理速度。这是再到telegram bot中输入抖音的分享链接后,过一会儿就会收到原始视频的链接。
huginn还可以实现很多其他功能,有兴趣可以加入AI自动化交流群交流分享。这个小案例,我也是慢慢看了很多案例总结的。以后可以自己把喜欢的小姐姐都存到tg了,开心?。