m3u8视频下载

m3u8视频下载

import aiohttp
import asyncio
from urllib import parse
import re
from Crypto.Cipher import AES

# ts地址
pattern = re.compile('.*?\.ts')
# key地址
pattern_key = re.compile('URI="(.*?)"')


async def get_url(url):
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as response:
            text = await response.text()
            key = pattern_key.findall(text)
            aes = ''
            # 是否加密
            if key:
                # 用于解密
                key_url = parse.urljoin(url, key[0])
                key_content = await get_key(session, key_url)
                aes = AES.new(key_content, AES.MODE_CBC, key_content)
            # 获取ts地址列表
            ts_list = pattern.findall(text)
            # 合并地址
            ts_url_list = [parse.urljoin(url, ts) for ts in ts_list]
            await asyncio.gather(*[get_ts_len(session, ts_url, aes, i) for i, ts_url in enumerate(ts_url_list)])


async def get_key(session, key_url):
    # 获取key
    async with session.get(key_url) as response:
        return await response.text()


async def get_ts(session, ts_url, aes, i):
    async with session.get(ts_url) as response:
        con = await response.read()
        # 解密
        if aes:
            con = aes.decrypt(con)
        with open(f'./{i}.ts', 'wb') as f:
            print(i)
            f.write(con)
          
          
def main(url):
	asyncio.run(get_url(url))



if __name__ == '__main__':
    url = ''
    main(url)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值