目标站点 https://www.qingting.fm/
该网站的电台和节目不同,电台是实时的。前期工作准备,需要知道电台id,比如:
https://www.qingting.fm/radios/4953
其中4953就是电台id。
点击播放,会发现下面的结果
image.png发现音频url后缀名为aac,于是通过全局搜索查找生成url的代码
image.png通过打断点分析得知,t是开始时间,n是结束时间,r是处理的后缀url,
例如:"4953_20210221_030000_060000_24_0.aac"
(吐槽下,代码太多,debugger等待的时间太久了)
知道t和n了之后,我在节目信息中找到了一样的数据:
image.png然后完整的音频url是这样的:
https://lcache.qingting.fm/cache/20210222/4953/4953_20210222_100000_120000_24_0.aac
下面是url分析
1. https://lcache.qingting.fm/cache/为固定地址,指向电台,无需改动
2. 20210222 是当前时间,使用datetime.datetime.now().strftime('%Y%m%d')就可以
3. 4953为电台ID,这个需要自己慢慢找映射关系
4. 4953_20210222_100000_120000_24_0.aac 是使用了下滑线拼接的电台ID,当前时间,开始时间,结束时间和_24_0.aac
逻辑已经搞清楚了,接下来是代码
import requests
import datetime
import os
station_id = '电台ID'
def get_url(station_id):
url = f'https://rapi.qingting.fm/v2/channels/{station_id}/playbills'
print(url)
res = requests.get(url).json()['data'][str(datetime.now().isoweekday()+1)] # 获取今天时间,作为字典的键
for i in res:
title = i['title'] # 标题
start_time = i['start_time'].replace(':','')
end_time = i['end_time'].replace(':','')
time = datetime.datetime.now().strftime('%Y%m%d')
user = i['broadcasters'] # 作者名和id
if user:
author = user[0]['username']
author_id = user[0]['id']
else:
author = ""
author_id = ''
release_time = datetime.datetime.now().strftime('%Y-%m-%d') + ' ' + i['start_time'] # 发布时间
crawl_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')# 抓取时键
# 拼接最终url
title_link = f'https://lcache.qingting.fm/cache/{time}/{station_id}/{station_id}_{time}_{start_time}_{end_time}_24_0.aac'
data_dic = {'title': title, 'title_link': title_link, 'content': content,
'author': author, 'author_id': author_id, 'release_time': release_time,
'crawl_time': crawl_time}
save(data_dic)
def save(data):
dic_name = data['time']
name = data['title']
resp = requests.get(data['title_link']).content
if not os.path.exists(dic_name):
os.mkdir(dic_name)
print(f"正在保存{dic_name}/{name}.mp3")
with open(f'{dic_name}/{name}.mp3','wb') as w:
w.write(resp)
get_url(station_id)
注意,本文章只用于分享学习,禁止商用
网友评论