美文网首页
某FM续集-电台

某FM续集-电台

作者: format_b1d8 | 来源:发表于2021-02-23 08:51 被阅读0次

目标站点 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)

注意,本文章只用于分享学习,禁止商用

相关文章

网友评论

      本文标题:某FM续集-电台

      本文链接:https://www.haomeiwen.com/subject/efjkfltx.html