Научите вас сканировать аудиоданные всего сайта Гималаев и исследовать естественные звуки Гималаев.
Научите вас сканировать аудиоданные всего сайта Гималаев и исследовать естественные звуки Гималаев.

1. Предисловие

Himalaya FM — известная платформа для обмена аудио. Ее доля на рынке мобильного аудио достигла 73 %, а число пользователей превысило 480 миллионов. Сегодня мы поможем вам преодолеть препятствия, исследовать звуки природы Гималаев. и добиться захвата в реальном времени и сохранить его локально.

Лично я считаю, что прослушивание книг — это также способ распознавать и чувствовать эмоции. Читая, мы можем проявлять воображение и иметь различные представления, но, слушая, слушая качественные голоса и материалы для чтения, мы можем попытаться воспринять некоторую информацию и эмоции из голосов других людей, точно так же, как мы это делаем в повседневной жизни, а не только Чтобы видеть глазами, нужно еще и слышать ушами.

2. Найдите URL-адрес аудио.

Сначала откройте сайт 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.

Вставьте сюда описание изображения

3. Обработка параметров запроса

Вставьте сюда описание изображения

Это верно,Вот и все: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

«Я действительно великий бог, ты можешь называть меня хозяином»

4. Повторно проанализируйте целевой веб-сайт.

Повторно проанализируйте целевой веб-сайт: 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, чтобы занять место (метод не уникален).

5. Код реализации

Код выглядит следующим образом

Язык кода:javascript
копировать
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

6. Результаты сканирования

Кто-то может спросить, какова цель этого? Я могу слушать прямо в приложении или на сайте!

Привет~ Для некоторых обязательных платных программ объем очень велик. Возможно, вы не сможете пользоваться контентом после истечения срока действия вашего членства, поэтому вы можете «загрузить» его таким образом.

Конечно, конечная цель — дать возможность каждому понять некоторые идеи сканеров.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose