站点图标 TIME 1948

Telegram bot + Huginn解析抖音无水印视频

前言

最近总是从抖音下载视频,但是直接抖音分享下载的视频是带有水印的,不是很喜欢。后来就去捷径库里面找了个捷径来下载抖音的分享视频,也可行,但是运行过程中有很多广告和其他的提示。后来发现网页版的抖音可以直接下载无水印版本的视频,正好看了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还可以实现很多其他功能,有兴趣可以加入HOME自动化交流群交流分享。这个小案例,我也是慢慢看了很多案例总结的。以后可以自己把喜欢的小姐姐都存到tg了,开心?。

退出移动版