Himalaya FM — известная платформа для обмена аудио. Ее доля на рынке мобильного аудио достигла 73 %, а число пользователей превысило 480 миллионов. Сегодня мы поможем вам преодолеть препятствия, исследовать звуки природы Гималаев. и добиться захвата в реальном времени и сохранить его локально.
Лично я считаю, что прослушивание книг — это также способ распознавать и чувствовать эмоции. При чтении мы можем проявлять воображение и иметь различные представления, но, слушая, слушая качественные голоса и материалы для чтения, мы можем попытаться воспринять некоторую информацию и эмоции из голосов других людей, точно так же, как мы это делаем в повседневной жизни, а не только Чтобы видеть глазами, нужно еще и слышать ушами.
Сначала откройте сайт Himalayan:https://www.ximalaya.com/
Затем мы вводим ключевое слово Поиск,здесь сЗаброшенная деревня Онмёдзи
Например,Как показано ниже:
Сканированные данные следующие:
Вы найдете его: https://aod.cos.tx.xmcdn.com/group82/M00/8E/B8/wKg5HF8b_PXC6K1wADMmSFDB0hw087.m4a — это ссылка для загрузки MP3, нажмите, чтобы скачать.
Посетите: https://aod.cos.tx.xmcdn.com/
jПосле моего анализа это должен быть прокси-запрос Nigux, поэтому мне нужно найти источник этого URL-адреса.
Вставьте сюда описание изображения
Вставьте сюда описание изображения
Это верно,Вот и все:https://www.ximalaya.com/revision/play/v1/audio?id=68966138&ptype=1
в параметрах запроса,есть одинxm-sign
需要处理下
这个xm-sign
да:md5(Временная метка сервера)(100Случайное число внутри)Временная метка сервера(100Случайное число внутри)текущая временная метка。
Я вижу это, почему? Потому что я великий бог, нет почему? ? ?
Получить временную метку сервера,я тоже это обнаружил,даhttps://www.ximalaya.com/revision/time
«Я действительно великий бог, ты можешь называть меня хозяином»
Повторно проанализируйте целевой веб-сайт: https://www.ximalaya.com/yinyue/12576446/. Анализируйте каждую веб-страницуurlКакая разница:第一页的даhttps://www.ximalaya.com/revision/play/albumalbumId=12576446&pageNum=1&sort=1&pageSize=30
Вторая страницаhttps://www.ximalaya.com/revision/play/albumalbumId=12576446&pageNum=2&sort=1&pageSize=30
Страница 3https://www.ximalaya.com/revision/play/albumalbumId=12576446&pageNum=3&sort=1&pageSize=30
Всего страниц семнадцать. Вы можете использовать метод .format в Python, чтобы занять место (метод не уникален).
Код выглядит следующим образом
import hashlib
import json
import os
import re
import time
import random
import requests
'''Скачать аудиокнигу'''
class ximalaya(object):
def __init__(self):
self.base_url = 'https://www.ximalaya.com'
self.base_api = 'https://www.ximalaya.com/revision/play/album?albumId={}&pageNum={}&sort=0&pageSize=30'
self.time_api = 'https://www.ximalaya.com/revision/time'
self.header = {'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:63.0) Gecko/20100101 Firefox/63.0'}
self.s = requests.session()
def get_time(self):
"""
Получить временную метку сервера
:return:
"""
r = self.s.get(self.time_api, headers=self.header)
return r.text
def get_sign(self):
"""
Получить знак: md5 (метка времени сервера) (случайное число в пределах 100) метка времени сервера (случайное число в пределах 100) текущая метка времени
:return: xm_sign
"""
nowtime = str(round(time.time() * 1000))
servertime = self.get_time()
sign = str(hashlib.md5("himalaya-{}".format(servertime).encode()).hexdigest()) + "({})".format(
str(round(random.random() * 100))) + servertime + "({})".format(str(round(random.random() * 100))) + nowtime
self.header["xm-sign"] = sign
def index_choose(self):
xm_id = input(u'Пожалуйста, введите идентификатор гималайской программы, которую нужно получить:')
xima.get_fm(xm_id)
self.index_choose()
@staticmethod
def make_dir(xm_fm_id):
# Пожалуйста, измените путь сохранения самостоятельно. Вот путь, использующий идентификатор аудиокниги в качестве папки.
fm_path = './{}'.format(xm_fm_id)
f = os.path.exists(fm_path)
if not f:
os.makedirs(fm_path)
print('make file success')
else:
print('file already exists')
return fm_path
def get_fm(self, xm_fm_id,lable='youshengshu'):
# Создать URL-адрес на основе идентификатора аудиокниги
fm_url = self.base_url + '/{}/{}'.format(lable,xm_fm_id)
r_fm_url = self.s.get(fm_url, headers=self.header)
fm_title = re.findall('<h1 class="title vA_">(.*?)</h1>', r_fm_url.text, re.S)[0]
print('Название книги:' + fm_title)
# Создайте новую папку с идентификатором аудиокниги.
fm_path = self.make_dir(xm_fm_id)
# Получите максимальное количество страниц
s = re.findall(r'/{}/{}/p(\d+)/'.format(lable,xm_fm_id), r_fm_url.text, re.S)
max_page = sorted([int(i) for i in s])[-1]
if max_page:
for page in range(1, int(max_page) + 1):
print('th' + str(page) + 'Страница')
self.get_sign()
r = self.s.get(self.base_api.format(xm_fm_id, page), headers=self.header)
r_json = json.loads(r.text)
for audio in r_json['data']['tracksAudioPlay']:
audio_title = str(audio['trackName']).replace(' ', '')
audio_src = audio['src']
self.get_detail(audio_title, audio_src, fm_path)
# Каждый раз при сканировании 1 страницы, 30 аудио, 3 секунды сна.
time.sleep(3)
else:
print(os.error)
def get_detail(self, title, src, path):
r_audio_src = self.s.get(src, headers=self.header)
m4a_path = path+'/' + title + '.m4a'
if not os.path.exists(m4a_path):
with open(m4a_path, 'wb') as f:
f.write(r_audio_src.content)
print(title + «Сохранено...»)
else:
print(title + 'm4a уже существует')
if __name__ == '__main__':
xima = ximalaya()
xima.index_choose()
# 12576446
Кто-то может спросить, какова цель этого? Я могу слушать прямо в приложении или на сайте!
Привет~ Для некоторых обязательных платных программ объем очень велик. Возможно, вы не сможете пользоваться контентом после истечения срока действия вашего членства, поэтому вы можете «загрузить» его таким образом.
Конечно, конечная цель — дать возможность каждому понять некоторые идеи сканеров.