SanYeCao-Nonebot/src/videos/billibili/biliVideos.py

62 lines
1.9 KiB
Python
Raw Normal View History

import os
import pickle
import requests
import hashlib
import urllib.parse
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument("--headless")
if not os.path.exists('bili.cookie'):
# 使用Selenium模拟浏览器获取Cookie
driver = webdriver.Chrome(options=chrome_options)
driver.get("https://www.bilibili.com")
# cookies = driver.get_cookies()
with open('bili.cookie', 'wb') as f:
pickle.dump(driver.get_cookies(), f)
driver.quit()
cookies = pickle.load(open('bili.cookie', 'rb'))
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36",
"referer": "https://www.bilibili.com/",
"Cookie": "; ".join([f"{c['name']}={c['value']}" for c in cookies])
}
appkey = '1d8b6e7d45233436'
appsec = '560c52ccd288fed045859ed18bffd973'
params = {
'search_type':'video'
}
def appsign(params, appkey, appsec):
"""为请求参数进行 APP 签名"""
params.update({'appkey': appkey})
params = dict(sorted(params.items())) # 按照 key 重排参数
query = urllib.parse.urlencode(params) # 序列化参数
sign = hashlib.md5((query+appsec).encode()).hexdigest() # 计算 api 签名
params.update({'sign':sign})
return params
def get(keyword):
signed_params = appsign(params, appkey, appsec)
query = urllib.parse.urlencode(signed_params)
url = f"https://api.bilibili.com/x/web-interface/search/type?keyword={keyword}&"
session = requests.session()
session.get("https://www.bilibili.com/", headers=headers)
response = session.get(url + query, headers=headers).json()
# print(response['code'])
return response
# print(signed_params)
# print(query)
if __name__ == "__main__":
print(get('海南某211台风过后现状111'))