美文网首页视频网站地址解析下载
芒果TV视频的地址解析下载

芒果TV视频的地址解析下载

作者: Maslino | 来源:发表于2016-11-02 22:29 被阅读4051次

以芒果TV播放页地址http://www.mgtv.com/v/10/167938/c/2942052.html�为例,说说如何解析得到真实视频地址。

提取视频ID(即vid)

芒果TV的视频ID可以从播放页地址中得到。上述播放页地址中,2942052就是视频ID.

请求接口

以视频ID为参数请求接口 http://v.api.mgtv.com/player/video?retry=1&video_id=2942052 返回的JSON数据如下:

{
  "status": 200,
  "msg": "",
  "data": {
    "user": {
      "id": "",
      "uuid": "",
      "isvip": "0",
      "purview": "200",
      "ip": "1.95.84.161"
    },
    "info": {
      "video_id": "3467275",
      "root_id": "10",
      "root_name": "新闻",
      "collection_id": "298221",
      "collection_name": "午间新闻2016",
      "clip_type": "2",
      "title": "长沙着力解决房产证遗留问题",
      "sub_title": "长沙着力解决房产证遗留问题",
      "series": "",
      "url": "http://www.hunantv.com/v/10/298221/c/3467275.html",
      "thumb": "http://2img.mgtv.com/preview/sp_images/2016/xinwen/129747/2942052/20160106130629996.jpg_220x123.jpg",
      "desc": "长沙着力解决房产证遗留问题",
      "icon": "",
      "ispayment": "0",
      "isdrm": "0",
      "isiplimit": "0",
      "duration": "37",
      "trialtime": "300",
      "scale": "16:9",
      "istry": "0",
      "price_vip": "2.5",
      "price_novip": "5",
      "price": "0"
    },
    "stream": [
      {
        "url": "/vod.do?fmt=2&pno=1000&fid=AD299930AAB40177B5F10D4AF1471071&now=1478094895&gsid=a599287b6be0403988d92fae7a7f930a&file=%2Fmp4%2F2016%2Fxinwen%2Fwjxw_46493%2FAD299930AAB40177B5F10D4AF1471071_20160106_1_1_388_mp4%2F27647495F355811D49F4A26327EC35DC.m3u8",
        "name": "标清"
      },
      {
        "url": "/vod.do?fmt=2&pno=1000&fid=CBA97B6D9BA73EB84283817B1FE38FE8&now=1478094895&gsid=7f3a643f38dc469d81fd8bc942c6aa89&file=%2Fmp4%2F2016%2Fxinwen%2Fwjxw_46493%2FCBA97B6D9BA73EB84283817B1FE38FE8_20160106_1_1_719_mp4%2FB2B29E3A4D135CB9B86B85841D12139C.m3u8",
        "name": "高清"
      },
      {
        "url": "/vod.do?fmt=2&pno=1000&fid=593B5886239791678A15C4A872A60B08&now=1478094895&gsid=79b4eb17ce3b441084b4828230fdfdd7&file=%2Fmp4%2F2016%2Fxinwen%2Fwjxw_46493%2F593B5886239791678A15C4A872A60B08_20160106_1_1_1100_mp4%2FE2017FFD796C00BB185FBC30B6D7360B.m3u8",
        "name": "超清"
      }
    ],
    "stream_domain": [
      "http://disp.titan.mgtv.com",
      "http://disp1.titan.mgtv.com",
      "http://disp2.titan.mgtv.com"
    ],
    "share": {
      "weibo": "http://service.weibo.com/share/share.php?appkey=152400019&url=http%3A%2F%2Fwww.hunantv.com%2Fv%2F10%2F298221%2Fc%2F3467275.html%3Ffrom%3Dwb&title=%E9%95%BF%E6%B2%99%E7%9D%80%E5%8A%9B%E8%A7%A3%E5%86%B3%E6%88%BF%E4%BA%A7%E8%AF%81%E9%81%97%E7%95%99%E9%97%AE%E9%A2%98&content=utf-8&pic=http://2img.mgtv.com/preview/sp_images/2016/xinwen/129747/2942052/20160106130629996.jpg_220x123.jpg",
      "weixin": "http://www.hunantv.com/share/weixin/?url=http://www.hunantv.com/v/10/298221/c/3467275.html&title=%E9%95%BF%E6%B2%99%E7%9D%80%E5%8A%9B%E8%A7%A3%E5%86%B3%E6%88%BF%E4%BA%A7%E8%AF%81%E9%81%97%E7%95%99%E9%97%AE%E9%A2%98",
      "qq": "http://connect.qq.com/widget/shareqq/index.html?title=%E9%95%BF%E6%B2%99%E7%9D%80%E5%8A%9B%E8%A7%A3%E5%86%B3%E6%88%BF%E4%BA%A7%E8%AF%81%E9%81%97%E7%95%99%E9%97%AE%E9%A2%98&desc=%E5%9C%A8%E8%8A%92%E6%9E%9CTV%E4%B8%8A%E7%9C%8B%E8%A7%81%E8%BF%99%E6%9D%A1%E8%A7%86%E9%A2%91%E8%BF%98%E4%B8%8D%E9%94%99%E5%93%A6%EF%BC%9A%E9%95%BF%E6%B2%99%E7%9D%80%E5%8A%9B%E8%A7%A3%E5%86%B3%E6%88%BF%E4%BA%A7%E8%AF%81%E9%81%97%E7%95%99%E9%97%AE%E9%A2%98&site=%E8%8A%92%E6%9E%9CTV&url=http://www.hunantv.com/v/10/298221/c/3467275.html&tpa=dW5pb25faWQ9MTAzMjUyXzEwMDAwMV8wMV8wMQ",
      "qzone": "http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=http://www.hunantv.com/v/10/298221/c/3467275.html&title=%E9%95%BF%E6%B2%99%E7%9D%80%E5%8A%9B%E8%A7%A3%E5%86%B3%E6%88%BF%E4%BA%A7%E8%AF%81%E9%81%97%E7%95%99%E9%97%AE%E9%A2%98"
    },
    "skipad": [
      "http://i1.hunantv.com/ui/2015/images/skipad.jpg",
      "http://order.mgtv.com/pay/pc/index.html"
    ],
    "tips": {
      "title": "会员跳广告(买12送3)",
      "url": "http://order.mgtv.com/pay/pc/index.html",
      "img": ""
    },
    "frame": {
      "second": [],
      "images": []
    },
    "points": {
      "start": [],
      "end": [],
      "content": []
    },
    "next": {
      "title": "长沙2016春运“两证”核发",
      "img": "http://0img.mgtv.com/preview/sp_images/2016/xinwen/129747/2942051/20160106125233250.jpg_220x123.jpg",
      "url": "/v/10/298221/c/3467257.html",
      "duration": "23"
    }
  }
}

我们可以看到,stream列表里面共有3个清晰度,stream_domain列表里面共有3个域名。假如选择超清清晰度对应的url,然后在url前面加上3个域名中的任一个,构成一个地址 http://disp.titan.mgtv.com/vod.do?fmt=2&pno=1000&fid=593B5886239791678A15C4A872A60B08&now=1478094895&gsid=79b4eb17ce3b441084b4828230fdfdd7&file=%2Fmp4%2F2016%2Fxinwen%2Fwjxw_46493%2F593B5886239791678A15C4A872A60B08_20160106_1_1_1100_mp4%2FE2017FFD796C00BB185FBC30B6D7360B.m3u8

请求这个地址得到的也是一个JSON格式数据:

{
  "ver": "2015-02-25 v1.0.1",
  "isothercdn": "1",
  "info": "http://pcvideoaliyun.titan.mgtv.com/mp4/2016/xinwen/wjxw_46493/593B5886239791678A15C4A872A60B08_20160106_1_1_1100_mp4/E2017FFD796C00BB185FBC30B6D7360B.m3u8?uuid=66e980da9e284bbe8222cae71fcc650a&t=581a6306&pno=1000&sign=ccedb70160e9136870fbd72864f11bb2&win=3600&srgid=25021&urgid=81&srgids=25021&nid=25021&payload=usertoken%3dhit%3d0%5eruip%3d23024801&rdur=21600&arange=0&limitrate=0&fid=593B5886239791678A15C4A872A60B08&ver=0x03",
  "status": "ok",
  "loc": "81-1.95.84.161",
  "t": "1478095494",
  "idc": "aliyun_cdn"
}

其中,info是一个m3u8地址,请求m3u8地址 http://pcvideoaliyun.titan.mgtv.com/mp4/2016/xinwen/wjxw_46493/593B5886239791678A15C4A872A60B08_20160106_1_1_1100_mp4/E2017FFD796C00BB185FBC30B6D7360B.m3u8?uuid=66e980da9e284bbe8222cae71fcc650a&t=581a6306&pno=1000&sign=ccedb70160e9136870fbd72864f11bb2&win=3600&srgid=25021&urgid=81&srgids=25021&nid=25021&payload=usertoken%3dhit%3d0%5eruip%3d23024801&rdur=21600&arange=0&limitrate=0&fid=593B5886239791678A15C4A872A60B08&ver=0x03 ,得到如下m3u8内容:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:11
#EXT-X-MEDIA-SEQUENCE:0
#EXT-MGTV-VIDEO-WIDTH:1280
#EXT-MGTV-VIDEO-HEIGHT:720
#EXT-MGTV-File-SIZE:699360
#EXTINF:5.080000,
5976B00263913818AE86F0122D7B766F_0_5080_1101_v02_mp4.ts?uuid=66e980da9e284bbe8222cae71fcc650a&t=581a6306&pno=1000&sign=ccedb70160e9136870fbd72864f11bb2&win=3600&srgid=25021&urgid=81&srgids=25021&nid=25021&payload=usertoken%3dhit%3d0%5eruip%3d23024801&rdur=21600&arange=0&limitrate=0&fid=593B5886239791678A15C4A872A60B08&ver=0x03
#EXT-MGTV-File-SIZE:512488
#EXTINF:5.000000,
01FC81B6CE4051E6CA9D990A72FF9B61_5080_10080_819_v02_mp4.ts?uuid=66e980da9e284bbe8222cae71fcc650a&t=581a6306&pno=1000&sign=ccedb70160e9136870fbd72864f11bb2&win=3600&srgid=25021&urgid=81&srgids=25021&nid=25021&payload=usertoken%3dhit%3d0%5eruip%3d23024801&rdur=21600&arange=0&limitrate=0&fid=593B5886239791678A15C4A872A60B08&ver=0x03
#EXT-MGTV-File-SIZE:1392140
#EXTINF:10.000000,
E1A9A55392CA363DD79F9F34C5AB1D45_10080_20080_1113_v02_mp4.ts?uuid=66e980da9e284bbe8222cae71fcc650a&t=581a6306&pno=1000&sign=ccedb70160e9136870fbd72864f11bb2&win=3600&srgid=25021&urgid=81&srgids=25021&nid=25021&payload=usertoken%3dhit%3d0%5eruip%3d23024801&rdur=21600&arange=0&limitrate=0&fid=593B5886239791678A15C4A872A60B08&ver=0x03
#EXT-MGTV-File-SIZE:2260136
#EXTINF:10.000000,
645A04A7B53530E5FA5CB5FCCF772A35_20080_30080_1808_v02_mp4.ts?uuid=66e980da9e284bbe8222cae71fcc650a&t=581a6306&pno=1000&sign=ccedb70160e9136870fbd72864f11bb2&win=3600&srgid=25021&urgid=81&srgids=25021&nid=25021&payload=usertoken%3dhit%3d0%5eruip%3d23024801&rdur=21600&arange=0&limitrate=0&fid=593B5886239791678A15C4A872A60B08&ver=0x03
#EXT-MGTV-File-SIZE:926652
#EXTINF:7.080000,
B7D675030CAB254C04330380F8A8A2AF_30080_37160_1047_v02_mp4.ts?uuid=66e980da9e284bbe8222cae71fcc650a&t=581a6306&pno=1000&sign=ccedb70160e9136870fbd72864f11bb2&win=3600&srgid=25021&urgid=81&srgids=25021&nid=25021&payload=usertoken%3dhit%3d0%5eruip%3d23024801&rdur=21600&arange=0&limitrate=0&fid=593B5886239791678A15C4A872A60B08&ver=0x03
#EXT-X-ENDLIST

那些不以#号开头的行就是视频分段地址的一部分。只不过,完整的视频分段地址需要构造出来。如何构造呢?我们用浏览器开发者工具观察到最终的视频地址是这样的:

http://pcvideoaliyun.titan.mgtv.com/mp4/2016/xinwen/wjxw_46493/CBA97B6D9BA73EB84283817B1FE38FE8_20160106_1_1_719_mp4/B4FBE7EEE4C4E58313038787AFA1CBF7_30080_37160_773_v02_mp4.ts?uuid=b6e729c483cb4ebfa2ca6cccc08bacff&t=581a661e&pno=1000&sign=b454c0a00e9240c96c877662329699cb&win=3600&srgid=25021&urgid=81&srgids=25021&nid=25021&payload=usertoken%3dhit%3d0%5eruip%3d23024801&rdur=21600&arange=0&limitrate=0&fid=CBA97B6D9BA73EB84283817B1FE38FE8&ver=0x03&r=309659237103548&tt=3167&yfmode=3

而m3u8地址是这样的:

http://pcvideoaliyun.titan.mgtv.com/mp4/2016/xinwen/wjxw_46493/593B5886239791678A15C4A872A60B08_20160106_1_1_1100_mp4/E2017FFD796C00BB185FBC30B6D7360B.m3u8?uuid=66e980da9e284bbe8222cae71fcc650a&t=581a6306&pno=1000&sign=ccedb70160e9136870fbd72864f11bb2&win=3600&srgid=25021&urgid=81&srgids=25021&nid=25021&payload=usertoken=hit=0%5Eruip=23024801&rdur=21600&arange=0&limitrate=0&fid=593B5886239791678A15C4A872A60B08&ver=0x03

这两个地址的前面一部分是一样的,有木有?这下该知道如何构造完整的视频分段地址了吧。

Python代码示例

import requests
import json
import re
import os
import urlparse
import random

vid = re.search(r'/(\d+).html', 'http://www.mgtv.com/v/10/167938/c/2942052.html').group(1)
r = requests.get('http://v.api.mgtv.com/player/video?retry=1&video_id=%s' % vid)
data = json.loads(r.content)
streams = data['data']['stream']
stream_domains = data['data']['stream_domain']
for stream in streams:
    print stream['name']
    stream_domain = random.choice(stream_domains)
    url = urlparse.urljoin(stream_domain, stream['url'])
    r = requests.get(url)
    data = json.loads(r.content)
    m3u8_url = data['info']
    parse_result = urlparse.urlparse(m3u8_url)
    r = requests.get(m3u8_url)
    segments = re.findall(r'^[^#][^\r][^\n]*', r.content, re.MULTILINE)
    for s in segments:
        print '%s://%s%s/%s' % (parse_result.scheme, parse_result.netloc, os.path.dirname(parse_result.path), s)

相关文章

网友评论

  • 艺灵设计:时过一年,昨日研究了一天,发现芒果已把文章中提到的接口关掉了?(反正打不开了),今日又是折腾了一天,不停刷新浏览器看请求数据,最终发现了类似文章中提供的数据格式,访问接口后返回的是m3u8链接,直接访问会提示下载,几经折腾,终于看到了原视频网址(心中窃喜)。回来再按照刚爬的数据进行拼接测试,果然可以访问。 vip视频的还没有测试,先来报喜。
    759e6a7b33d9:您好,可以分享一下吗,感激
    spider_spider:你好 请问有看过微博视频的加密吗 他是怎样通过页面的地址就能获得视频地址的 而不需要通过js动态加载
    Maslino:@艺灵设计 赞👍

本文标题:芒果TV视频的地址解析下载

本文链接:https://www.haomeiwen.com/subject/jvhbuttx.html