Skip to content

Instantly share code, notes, and snippets.

@kaixinol
Created August 10, 2023 03:45
Show Gist options
  • Save kaixinol/8bfff7aef3cc5183367542ada763e28d to your computer and use it in GitHub Desktop.
Save kaixinol/8bfff7aef3cc5183367542ada763e28d to your computer and use it in GitHub Desktop.
提取B站上自己已购买的商城表情 python脚本
# pip install requests multitasking loguru
import requests
import multitasking
import signal
import os
from loguru import logger
import re
signal.signal(signal.SIGINT, multitasking.killall)
multitasking.set_max_threads(multitasking.config["CPU_CORES"] * 2)
@multitasking.task
def download(url: str,path: str):
if 'http' not in url:
logger.warning(f"{url}非有效URL,略过")
return
try:
f=requests.get(url)
with open(path,"wb") as code:
code.write(f.content)
except Exception as e:
logger.error(e)
def get_valid_filename(s:str):
s = s.strip().replace(' ', '_')
return re.sub(r'(?u)[^-\w.]', '_', s)
url = 'https://api.bilibili.com/x/emote/user/panel/web'
data = {
'business': 'reply'
}
SESSDATA=input("SESSDATA=")
headers = {
'Cookie': f'SESSDATA={SESSDATA}'
}
if not SESSDATA:
logger.warning('SESSDATA为空只能读取到免费的表情包')
response = requests.get(url, params=data, headers=headers)
result = response.json()
stickers=result['data']["packages"]
logger.info(f'共找到{len(stickers)}个表情包')
print('\t'.join([i['text'] for i in stickers]))
for i in stickers:
if not os.path.exists(i['text']):
os.mkdir(i['text'])
download(i['url'],f"./{i['text']}/{get_valid_filename(i['text'])}icon.png")
for ii in i['emote']:
download(ii['url'],f"./{i['text']}/{get_valid_filename(ii['text'])}.png")
logger.success(i['text']+"\t下载完毕")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment