J'ai découvert en créant un script python pour enregistrer radiko tout en lisant le code des prédécesseurs

Résumé

Environnement éprouvé

Ce que j'ai fait

https://github.com/1021ky/radiko_recorder

Ce que j'ai trouvé

Un protocole appelé hls utilisé dans Radiko

Aperçu de ce qui se passe lorsque vous écoutez un programme sur Radiko

Il s'avère que le client et le serveur communiquent entre eux via HTTP, comme indiqué dans la figure ci-dessous.

処理概要.png

Comment avez-vous trouvé

En gros, ça ressemble à ça. Je ne suis pas allé bien dans cet ordre et j'ai fait plusieurs allers-retours.

  1. Lire le code écrit par une autre personne → Je comprends que le traitement des autorisations et l'acquisition de fichiers audio sont nécessaires
  2. Écrivez le code → Appelez l'API de Radiko et obtenez le code d'état HTTP 40X, afin de savoir qu'il manque quelque chose
  3. Découvrez quel type de communication est effectué avec les outils de développement de Google Chrome → Comprenez que cela était insuffisant en regardant le contenu de communication spécifique
  4. Après avoir écrit le code, je vais résumer ce que j'ai fait cette fois → Il y avait des mots que je ne pouvais pas bien expliquer → Je comprends que hls et m3u8 sont spécifiés par RFC, pas par les spécifications originales de Radiko

J'ai lu le code de l'article suivant.

  1. Simple script d'enregistrement Radiko
  2. [Python] Play Radico
  3. J'ai créé un logiciel qui recherche et enregistre automatiquement radiko, super A & G, sound spring et son avec Python3
  4. Enregistrement Road to radiko (téléchargement) Partie 1

Depuis 1 a été écrit dans un script shell, j'ai recherché sur Google les commandes que je ne comprenais pas et j'ai immédiatement su de quel type de paquet j'avais besoin.

Cependant, je ne savais pas trop pourquoi le prétraitement avait été effectué ni ce qu'il faisait. (La puissance de la coque est insuffisante.) J'essayais d'en écrire quelques-uns en Python, que j'utilise habituellement, donc c'était facile à comprendre, et j'ai trouvé que le processus que je ne comprenais pas dans le script shell auparavant était le processus d'autorisation. En 4, j'ai découvert comment savoir quel type de logique est utilisé pour générer la clé partielle des spécifications originales de Radiko.

Maintenant que nous avons les packages et les bibliothèques dont nous avons besoin, nous avons écrit le code. Ainsi, comme mentionné ci-dessus, j'ai appelé l'API de Radiko et renvoyé un code d'état HTTP 40X.J'ai donc étudié ce que font les outils de développement Chrome sur le navigateur qui échoueraient avec mon code. Voici le moment où j'ai enquêté sur le processus d'autorisation. devtool_auth.png

En regardant le contenu de la demande, je savais quand et où j'avais besoin de quelque chose dans l'en-tête de demande qui commençait avec X-Radiko - ***. Quand j'ai jeté un coup d'œil rapide au code, je l'avais oublié. Donc, cela a finalement commencé à fonctionner.

Ce que j'ai dans l'article

Qu'est-ce que hls lors de sa mise en place? Qu'est-ce que m3u8? Je me suis demandé à nouveau, et quand je l'ai recherché, j'ai trouvé que c'était décidé par RFC. Si cela a été décidé par RFC, j'ai également trouvé qu'il pourrait y avoir une bibliothèque qui les rend faciles à manipuler.

La bibliothèque m3u8 était facile à utiliser et nettoyait mon code en désordre. De plus, la lecture de la RFC et la compréhension des termes ont facilité le nom des méthodes et des variables. Par exemple, les variables Master Playlist et Media playlist avaient des noms très appropriés avant la lecture du RFC et n'étaient pas bien compris lors de la relecture.

Un livre récemment lu, Isao Ueda.101 principes qui vous seront utiles pour toute une vie que vous voudrez apprendre d'ici la troisième année des principes de programmation.

Il y a aussi le dicton que "les bons programmeurs écrivent du bon code, les grands programmeurs empruntent du bon code".

Il y avait. Quand je l'ai lu, je l'ai compris d'une manière ou d'une autre, mais cette fois, j'ai le sentiment que savoir quelle est la norme mènera à un niveau de compréhension plus élevé.

Résumé

Recommended Posts

J'ai découvert en créant un script python pour enregistrer radiko tout en lisant le code des prédécesseurs
J'ai fait un script pour enregistrer la fenêtre active en utilisant win32gui de Python
Premier python ② Essayez d'écrire du code tout en examinant les fonctionnalités de python
Je l'ai découvert en analysant les avis du site de changement d'emploi! ??
J'ai écrit le code pour écrire le code Brainf * ck en python
J'ai essayé d'obtenir le code d'authentification de l'API Qiita avec Python.
J'ai essayé de vérifier et d'analyser l'accélération de Python par Cython
Code Python pour déterminer les signaux mensuels pour les investissements de force relative
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
J'ai essayé de vérifier le résultat du test A / B avec le test du chi carré
Python: je souhaite mesurer proprement le temps de traitement d'une fonction
J'ai créé une fonction pour voir le mouvement d'un tableau à deux dimensions (Python)
Django super introduction par les débutants Python! Partie 2 J'ai essayé d'utiliser les fonctions pratiques du modèle
[Vous devez le savoir! ] J'ai essayé de mettre en place un environnement Python de manière rentable en utilisant pleinement les privilèges des étudiants universitaires.
J'ai créé un script pour vérifier si l'anglais est entré dans la position spécifiée du fichier JSON en Python.
[python] Comment trier par le Nth Mth élément d'un tableau multidimensionnel
Script Python pour obtenir une liste d'exemples d'entrée pour le concours AtCoder
J'ai essayé de refactoriser le code de Python débutant (lycéen)
J'ai utilisé Python pour découvrir les choix de rôle des 51 "Yachts" dans le monde.
Ajouter une fonction pour indiquer la météo d'aujourd'hui au bot slack (fabriqué par python)
Modèle de script python pour lire le contenu du fichier
Récupérer le code retour d'un script Python depuis bat
J'ai vérifié les versions de Blender et Python
J'ai senti que j'avais porté le code Python en C ++ 98.
Note Python: Le mystère de l'attribution d'une variable à une variable
J'ai essayé de résumer les opérations de chaîne de Python
Django super introduction par les débutants Python! Partie 6 J'ai essayé d'implémenter la fonction de connexion
J'ai essayé de créer une API RESTful en connectant l'API rapide du framework Python explosif à MySQL.
J'ai créé une classe pour obtenir le résultat de l'analyse par MeCab dans ndarray avec python
[OCI] Script Python pour obtenir l'adresse IP d'une instance de calcul dans Cloud Shell
J'ai créé une fonction pour découper l'image de python openCV, alors veuillez l'utiliser.
J'ai écrit un doctest dans "J'ai essayé de simuler la probabilité d'un jeu de bingo avec Python"
Script Python qui peut vérifier l'état du serveur à partir du navigateur
Une histoire que je voulais faire quand j'ai eu une liste de sessions d'étude avec Python
J'ai essayé de trouver l'entropie de l'image avec python
J'ai remplacé le livre de recettes Windows PowerShell par un script python.
Découvrez la largeur apparente d'une chaîne en python
[Python] Comment créer une liste de chaînes de caractères caractère par caractère
Je veux démarrer beaucoup de processus à partir de python
J'ai fait une fonction pour vérifier le modèle de DCGAN
[Python] J'ai essayé de visualiser la relation de suivi de Twitter
Attacher au processus Python de la destination SSH et déboguer
Le processus de création et d'amélioration du code Python orienté objet
Je veux connaître la nature de Python et pip
J'ai essayé de changer le script python de 2.7.11 à 3.6.0 sur Windows10
Script Python qui compare le contenu de deux répertoires
J'ai essayé de remodeler le code de Python débutant (lycéen) en crunchy orienté objet
Une histoire sur l'écriture d'AWS Lambda et de devenir un peu accro aux valeurs par défaut des arguments Python
Publiez le script shell créé pour réduire les problèmes de création de LiveUSB sous Linux
J'ai essayé de vérifier l'identification du locuteur par l'API de reconnaissance du locuteur d'Azure Cognitive Services avec Python. # 1
J'ai essayé de vérifier l'identification du locuteur par l'API de reconnaissance du locuteur d'Azure Cognitive Services avec Python. # 2
J'ai essayé de trouver la différence entre A + = B et A = A + B en Python, alors notez
J'ai essayé de résumer le contenu de chaque paquet enregistré par Python pip en une seule ligne
[Python] Comment utiliser l'instruction for. Une méthode d'extraction en spécifiant une plage ou des conditions.