Spaces:
Sleeping
Sleeping
import gradio as gr | |
# coding: utf-8 | |
# Your code here! | |
import requests | |
from bs4 import BeautifulSoup | |
import html | |
import os | |
import json | |
def dlvid(vid): | |
s = requests.Session() | |
url = f"https://www.nicovideo.jp/watch/{vid}" | |
headers = { | |
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0', | |
} | |
# 发送请求 | |
response = s.get(url, headers=headers) | |
if response.status_code == 200: | |
# 解析 HTML | |
soup = BeautifulSoup(response.text, 'html.parser') | |
# 获取 data-api-data 的值 | |
data_api_data = soup.find('div', id='js-initial-watch-data').get('data-api-data') | |
# 对值进行 HTML 解码并转换为 JSON | |
json_data = json.loads(html.unescape(data_api_data)) | |
# 在此处你可以将 JSON 数据加载并进行显示 | |
# 解析 json_data 为字典 | |
client_watchTrackId = json_data['client']['watchTrackId'] | |
accessRightKey = json_data['media']['domand']['accessRightKey'] | |
url = f"https://nvapi.nicovideo.jp/v1/watch/{vid}/access-rights/hls?actionTrackId={client_watchTrackId}" | |
payload = json.dumps({ | |
"outputs": [ | |
[ | |
"video-h264-720p", | |
"audio-aac-192kbps" | |
] | |
] | |
}) | |
headers = { | |
'origin': 'https://www.nicovideo.jp', | |
'referer': 'https://www.nicovideo.jp/', | |
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0', | |
'x-access-right-key': accessRightKey, | |
'x-frontend-id': '6', | |
'x-frontend-version': '0', | |
'x-request-with': 'https://www.nicovideo.jp' | |
} | |
response = s.request("POST", url, headers=headers, data=payload) | |
hlsjson=response.json() | |
hlsuri=hlsjson['data']['contentUrl'] | |
# 删除可能存在的旧的 test.mp4 文件 | |
if os.path.exists("test.mp4"): | |
os.remove("test.mp4") | |
# 使用 ffmpeg 将 m3u8 转换为 mp4 | |
mp3link = hlsuri # 假设你的 m3u8 地址存储在 mp3link 中 | |
ffmpeg_command = f'ffmpeg -protocol_whitelist "concat,file,http,https,tcp,tls,crypto" -i "{mp3link}" -c copy -cookies "{s.cookies.get_dict()}" "test.mp4"' | |
os.system(ffmpeg_command) | |
return 'test.mp4' | |
else: | |
print("请求失败:", response.status_code) | |
demo = gr.Interface(fn=dlvid, inputs="text", outputs="video") | |
demo.launch() | |