Python 蜻蜓fm有声书批量下载 支持账号登录 原创源码

本文介绍了如何使用Python批量下载蜻蜓FM有声书,包括账号登录、参数解析、加密算法应用,特别是HMAC-MD5签名的生成过程。通过分析网页源码和调用API,详细展示了完整的下载流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

其中还带了一些参数比如access_token,qingting_id(登录成功的response中有,上图没有登录所有是空的),另外还有一些比如t是时间戳,

device_id=MOBILESITE(不变)

关键就在于sign(尝试过不加sign会返回一个签名错误)

可以通过全局搜索试一下是哪个js生成的这个sign我全局搜索了一下

device_id

mian.一大堆.js 找到了生成sign的函数(需要自己分辨一下是一个device_id: "MOBILESITE"的)

搜索其他关键字应该也是可以顺利找到的

这里的sign是u这个变量它是由c这个变量通过一堆加密处理得到的

我们可以控制台输出一下u和c

所以我们就知道了sign实际是加密了请求的其他参数

一开始我误以为是单纯的MD5所以卡了好久(还进入函数内部看他具体是怎么实现的看的一头雾水)

其实代码已经告诉用的是

createHmac(“md5”, “fpMn12&38f_2e”)

查了下Hmac发现就是一种现成的算法,还有不同的模式MD5是其中一种,需要一个秘钥

这里什么都告诉你了,用Hmac-md5秘钥是fpMn12&38f_2e

找个在线加密的网站试了下,果然和刚才控制台输出的一样

python的话需要import

hmac这个库

import hmac

import time

base_url = “https://audio.qingting.fm”

bookid = “294280”

id = “11590788”

access_token = “”

qingting_id =“”

timestamp = str(round(time.time()*1000))

data = f"/audiostream/redirect/{bookid}/{id}?access_token={access_token}&device_id=MOBILESITE&qingting_id={qingting_id}&t={timestamp}"

message = data.encode(‘utf-8’)

key = “fpMn12&38f_2e”.encode(‘utf-8’)

sign = hmac.new(key, message, digestmod=‘MD5’).hexdigest()

whole_url = base_url+data+“&sign=”+sign

print(whole_url)

得到一个音频可以做到了剩下的就是得到一堆了,其实我们得到每个音频的id就可以了

我请求的是这个接口

info_api = ‘https://i.qingting.fm/capi/channel/{self.bookid}/programs/{self.version}?curpage={str(page)}&pagesize=30&order=asc’

version在声书主页的源代码中,只要改curpage就可以翻页了

完整源码

import requests

import re

import hmac

import time

from tqdm import tqdm

from bs4 import BeautifulSoup

import os

import json

import sys

import urllib3

urllib3.disable_warnings()

class QingTing():

def init(self,user_id,password,bookurl,ifLogin):

self.ifLogin = ifLogin

self.user_id = user_id

self.password = password

self.session = requests.session()

self.session.headers.update({‘user-agent’: ‘Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36’})

self.login_url = “https://u2.qingting.fm/u2/api/v4/user/login”

self.qingting_id = ‘’

self.access_token = ‘’

self.bookurl = bookurl

self.bookurl = ‘https://www.qingting.fm/channels/257790’

self.bookid = self.bookurl.split(‘/’)[-1]

self.version = ‘’

self.qingtinghost = ‘https://audio.qingting.fm’

self.save_path = ‘’

self.bookname = ‘’

def login(self,user_id,password):

data = {

‘account_type’: ‘5’,

‘device_id’: ‘web’,

‘user_id’: user_id,

‘password’: password

}

response = self.session.post(self.login_url,data=data,verify=False)

if response.status_code==200:

temp = response.json()

errorno = temp[‘errorno’]

errormsg = temp[‘errormsg’]

if errorno == 0:

print(‘login successful!’,‘登录成功!’)

data = temp[‘data’]

self.qingting_id = data[‘qingting_id’]

self.access_token = data[‘access_token’]

else:

print(‘Login failed’,‘登录失败’)

print(errormsg)

time.sleep(10)

sys.exit(0)

def __get_version(self):

response = self.session.get(url=self.bookurl,verify=False)

if response.status_code==200:

soup = BeautifulSoup(response.text,‘lxml’)

temp_bookname = soup.select(‘div.album-info-root > div.top > div.info.right > h1’)[0].string

replaced_pattern = ‘[\/😗?"<>|]’

self.bookname = re.sub(replaced_pattern,’ ',temp_bookname,flags=re.M +re.S)

if not os.path.exists(self.bookname):

os.makedirs(self.bookname)

matched = re.search(‘“version”:“(\w+)”’,response.text,re.S)

if matched:

version = matched.group(1)

self.version = version

return version

def __get_total_page(self):

self.__get_version()

page = 1

info_api = f’https://i.qingting.fm/capi/channel/{self.bookid}/programs/{self.version}?curpage={str(page)}&pagesize=30&order=asc’

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
img

(1)Python所有方向的学习路线(新版)

这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

最近我才对这些路线做了一下新的更新,知识体系更全面了。

在这里插入图片描述

(2)Python学习视频

包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。

在这里插入图片描述

(3)100多个练手项目

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。

在这里插入图片描述

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

nimg.cn/f5aeb4050ab547cf90b1a028d1aacb1d.png#pic_center)

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值