爬虫爬取qq看点视频

我的上一篇文章有讲到graia机器人配置的问题,这次用他和爬虫实现一个比较有趣的东西
在这里插入图片描述
群友在查看电脑端qq看点的分享视频时会出现这种情况无法查看,但也并不是完全没有办法获取到视频的链接
在这里插入图片描述
mcl中我们可以看到这样的东西,显然这是一个app消息,里面有一些链接

{
  "app": "com.tencent.biz.pubaccount.readinjoy",
  "view": "baseView",
  "ver": "1.0.0.69",
  "prompt": "[视频]两星武器+两星圣遗物优菈VS公子!!",
  "meta": {
    "data": {
      "id": "none",
      "rowkey": "57060ed7437393ah",
      "uin": "1653490853",
      "puin": "1001014387914",
      "nick": "@{uin:1001014387914,nick:月枫Aurora}",
      "contentJumpUrl": "https:\/\/web.kandian.qq.com\/tpl\/sharePage?kandianshare.html5.qq.com=1&_bid=4563&pgyid=2008&rowkey=57060ed7437393ah&enc_u=uDW52aqCa5WF6tHvmNsoKg==",
      "avatar": "http:\/\/p.qpic.cn\/kd_face\/ajNVdqHZLLD2TyCdTfAB8ic2l5FswicLVVxrYMLH7Yp6k\/0",
      "avatarJumpUrl": "https:\/\/kandian.qq.com\/mqq\/vue\/main?_wv=10145&_bid=3302&adfrom=qqshare&x5PreFetch=1&accountId=MTAwMTAxNDM4NzkxNA==",
      "iconJumpUrl": "mqqapi:\/\/readinjoy\/open?src_type=internal&target=1&version=1",
      "media": [
        {
          "isVideo": true,
          "videoDuration": 483,
          "width": 1920,
          "height": 1080,
          "url": "http:\/\/qqpublic.qpic.cn\/qq_public_cover\/0\/0-2453122286-F3BDFB3840A93FAFB76992C8D2C2F84E_vsmcut\/0?busiType=2"
        }
      ],
      "title": "两星武器+两星圣遗物优菈VS公子!!",
      "type": 2,
      "isAIO": 1,
      "appName": "kandian"
    }
  }
}

在里面可以找到contentJumpUrl,https://web.kandian.qq.com/tpl/sharePage?kandianshare.html5.qq.com=1&_bid=4563&pgyid=2008&rowkey=57060ed7437393ah&enc_u=uDW52aqCa5WF6tHvmNsoKg==这个链接就是我们需要爬取的链接
接下来要寻找视频的直链
在这里插入图片描述

把上面的contentjumpurl输入到浏览器中f12查找可以发现视频的直链在这里
这个请求需要的参数在这里
{“user”:{“account”:{“account_type”:1,“user_id”:“0”,“req_recommend_flag”:0}},“device”:{“app_version”:“0”,“qua”:"",“os”:3,“device_id”:"",“terminal_id”:"",“app_type”:3,“guid”:"",“ip”:"",“network”:0},“share_rowkey”:“57060ed7437393ah”,“page”:{“tab_id”:"",“rowkeys”:[“57060ed7437393ah”],“load_more_count”:0,“refresh_count”:0,“load_type”:1},“cookie”:"",“ext”:{}}
我们要获取的是这个rowkeys和keyws(内容一样)
这个参数可以在之前的contentJumpUrl里找到
所以我们要做的就是用mcl获取卡片信息里的url里的rowkeys参数然后爬取视频直链
代码如下

# -*- coding: UTF-8 -*-
import json
from graia.broadcast import Broadcast, BaseEvent
from graia.application.entry import *
from graia.application.message.elements.internal import *
import requests
from graia.scheduler import timers
import graia.scheduler
from graia.application.event.mirai import FriendRecallEvent, GroupRecallEvent
accout=234654570
loop = asyncio.get_event_loop()
bcc = Broadcast(loop=loop)
sche = graia.scheduler.GraiaScheduler(loop=loop, broadcast=bcc)
app = GraiaMiraiApplication(
    broadcast=bcc,
    connect_info=Session(
        host="http://localhost:10008",  # 填入 httpapi 服务运行的地址
        authKey="yszzsyszzs",  # 填入 authKey
        account=accout,  # 你的机器人的 qq 号
        websocket=True  # Graia 已经可以根据所配置的消息接收的方式来保证消息接收部分的正常运作.
    ))
def qqkandian(key):
    url = "https://cgi.kandian.qq.com/trpc.tkdqq.kd_share_video_recommend.ShareVideoRecommend/GetFeed?g_tk=0&bkn=0"
    data = {"user": {"account": {"account_type": 1, "user_id": "0", "req_recommend_flag": 0}},
            "device": {"app_version": "0", "qua": "", "os": 3, "device_id": "", "terminal_id": "", "app_type": 3,
                       "guid": "", "ip": "", "network": 0}, "share_rowkey": key,
            "page": {"tab_id": "", "rowkeys": [key], "load_more_count": 0, "refresh_count": 0,
                     "load_type": 1}, "cookie": "", "ext": {}}
    return requests.post(url, json=data).json()['result']['feedData']['feeds'][0]['card']['feed']['tweet']['post']['video']['url']
@bcc.receiver("FriendMessage")
async def friend_message_listener(message: MessageChain, app: GraiaMiraiApplication, friend: Friend):
    if message.get(App):
        con=message.get(App)[0].content
        con=json.loads(con)
        url=con['meta']['data']['contentJumpUrl']
        key=url.split('&')[3].split('=')[1]
        await  app.sendFriendMessage(friend, MessageChain.create([Plain(qqkandian(key))]))
app.launch_blocking()

graia的配置可以看我的上一篇文章
运行之后向机器人转发消息就可以看到视频的链接了
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值