hr3lxphr6j / bililive-go

一个直播录制工具
GNU General Public License v3.0
3.64k stars 475 forks source link

能否支持手机端抖音的分享链接录制 #512

Open loveqianool opened 1 year ago

loveqianool commented 1 year ago

目标网站任意直播间的示例 url,精确到具体直播间

https://v.douyin.com/iEqQwcx

列举其他已支持上述网站的开源工具

暂未发现

自由描述

https://v.douyin.com/iEqQwcx >> https://webcast.amemv.com/douyin/webcast/reflow/7261563736028728116 >> https://live.douyin.com/887137105722 手机端复制链接都是 v.douyin.com,而目前手机端打开只能跳转到 webcast.amemv.com,需要模拟 PC 端 User-agent 才能复制到能录制的链接,这导致在手机端进行录制操作繁琐。

kira1928 commented 1 year ago

我记得我看过这个格式的链接的问题,不仅仅是 user-agent 那么简单,里面好像还有一些需要在浏览器环境中执行的秘密流程。 总之靠代码实现没有那么简单,需要其他路过的大佬的协助!

Mr-liu1999-nuc commented 1 month ago

目前我是这么实现的 v.douyin的转换 from flask import Flask, render_template, request from selenium import webdriver from selenium.webdriver.firefox.options import Options from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By import requests import re import time

app = Flask(name)

@app.route('/', methods=['GET', 'POST']) def index(): if request.method == 'POST':

获取 POST 请求中的文本内容

    text = request.form['text']
    # 提取链接
    link = extract_link(text)
    if link:
        print("extract_link:", link)
        # 使用 Selenium 访问链接并获取最终的 URL
        final_url = get_final_url(link)
        print("final_url:", final_url)
        # 发送最终 URL 到指定的 API 接口
        #api_url = 'http://192.168.10.100:8787/api/lives'
        api_url = 'http://192.168.10.100:8788/api/lives'
        data = [{'url': final_url, 'listen': True}]
        response = requests.post(api_url, json=data)
        print(data)
        print("Response Status Code:", response.status_code)
        print(response.text.encode('utf-8'))
        return response.text.encode('utf-8')
    else: 
        print("err")

# 渲染 HTML 模板,显示表单页面
return render_template('index.html')

def extract_link(text):

使用正则表达式匹配链接

pattern = r'https://[^\s]+'
match = re.search(pattern, text)
if match:
    link = match.group()
    return link
else:
    return None

def get_final_url(url):

设置 GeckoDriver 路径

gecko_driver_path = './geckodriver'

# 设置 Firefox 选项
firefox_options = Options()
firefox_options.headless = True  # 无头模式,不显示浏览器界面

# 创建 Firefox 驱动
driver = webdriver.Firefox(executable_path=gecko_driver_path, options=firefox_options)

# 打开链接
driver.get(url)

# 等待页面加载完成,最长等待时间设置为10秒
wait = WebDriverWait(driver, 10)
time.sleep(30)

# 获取当前页面的 URL
final_url = driver.current_url
#print("Final URL:", final_url)

# 关闭浏览器驱动
driver.quit()

return  final_url

if name == 'main':

app.run(host='0.0.0.0', port=5000)
kira1928 commented 1 month ago

你这里用到了 selenium,对单纯的 golang 程序来说,这不太现实。。