美文网首页
即刻视频下载

即刻视频下载

作者: halfempty | 来源:发表于2019-04-20 15:11 被阅读0次

    1. 前言

    玩即刻看到喜欢的视频不能下载, 即使收藏也可能因为一些原因找不着, 心累啊
    但作为一个ITer, 不会轻易被眼前的困难打倒, 有现成的就拿来用, 没有的话就自己造

    2. 分析过程

    手机抓包比较麻烦, 所以直接使用网页版登录
    F12源码查看, 发现html标签中并没有url链接, 但是播放时, 会出现一堆xxxx.ts请求, 那么这些请求哪来的呢
    往上查找, 有一个xxxx.m3u8的请求, 其响应的内容恰好包括.ts请求的地址

    image.png

    参考https://www.jianshu.com/p/e97f6555a070, 大致了解了一下M3U8格式
    于是接下来的重点是解析m3u8请求的响应内容

    还好即刻内的m3u8没有加密链接, 只需要拼接即可

    3. 效果图

    Peek 2019-04-20 14-42.gif

    4. 源码

    import PySimpleGUI as sg
    import requests
    import os
    import uuid
    
    def getMV(url):
        if url.endswith('/'):
            url = url[:-1]
        baseUrl = url.rsplit('/', 1)[0]
    
        resp = requests.get(url)
        lines = resp.text.split('\n')
        if not lines or lines[0] != '#EXTM3U':
            return
        
        filename = '{}.mp4'.format(uuid.uuid1())
        if os.path.exists(filename):
            os.remove(filename)
        with open(file=filename, mode='wb+') as fp:
            for line in lines:
                if line.endswith('.ts'):
                    seg = baseUrl + '/' + line
                    resp = requests.get(seg)
                    if resp.status_code == 200:
                        fp.write(resp.content)
    
    layout = [
        [sg.Text('Input m3u8 urls here:')],
        [sg.Multiline('', key='url', size=(80, 10))],
        [sg.ProgressBar(100, size=(30, 20), key='progbar'), sg.Text('Downloading ...', key='mark')],
        [sg.Submit(), sg.Cancel()],
    ]
    
    window = sg.Window('Download m3u8').Layout(layout)
    while True:
        event, values = window.Read()
        if event is None or event == 'Cancel':
            break
        
        urls = values['url'].split('\n')
        count = len(urls)
        if count == 0:
            window.FindElement('mark').Update('No url found')
            continue
    
        base = 100 / count
        for i in range(count):
            url = urls[i].strip()
            if url:
                getMV(url=url)
            window.FindElement('progbar').UpdateBar(base * (i + 1))
        window.FindElement('mark').Update('Done')
    
    window.Close()
    

    相关文章

      网友评论

          本文标题:即刻视频下载

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