Ich fand es heraus, indem ich ein Python-Skript erstellte, um Radiko aufzuzeichnen, während ich den Code der Vorgänger las

Zusammenfassung

Versuchte Umgebung

Was ich gemacht habe

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

Was ich fand

Ein Protokoll namens hls, das in Radiko verwendet wird

Überblick darüber, was passiert, wenn Sie ein Programm auf Radiko hören

Es stellt sich heraus, dass Client und Server über HTTP miteinander kommunizieren, wie in der folgenden Abbildung dargestellt.

処理概要.png

Wie hast du das herausgefunden

Ungefähr so sieht es aus. Ich konnte nicht reibungslos in dieser Reihenfolge vorgehen und ging mehrmals hin und her.

  1. Lesen Sie den von einer anderen Person geschriebenen Code → Ich verstehe, dass die Autorisierungsverarbeitung und die Verarbeitung der Audiodateierfassung erforderlich sind
  2. Schreiben Sie den Code → Rufen Sie die API von Radiko auf und erhalten Sie den HTTP-Statuscode 40X, damit Sie wissen, dass etwas fehlt
  3. Finden Sie heraus, welche Art von Kommunikation mit den Entwicklertools von Google Chrome durchgeführt wird → Verstehen Sie, dass dies nicht ausreichend war, indem Sie sich den spezifischen Kommunikationsinhalt ansehen
  4. Nachdem ich den Code geschrieben habe, werde ich zusammenfassen, was ich diesmal getan habe → Es gab Wörter, die ich nicht gut erklären konnte → Ich verstehe, dass hls und m3u8 von RFC spezifiziert werden, nicht von Radikos ursprünglichen Spezifikationen

Ich habe den Code aus dem folgenden Artikel gelesen.

  1. Einfaches Radiko-Aufzeichnungsskript
  2. [Python] Play Radico
  3. Ich habe eine Software erstellt, die Radiko, Super A & G, Sound Spring und Sound mit Python3 automatisch sucht und aufzeichnet
  4. Weg zur Radiko-Aufnahme (Download) Teil 1

Da ich in einem Shell-Skript geschrieben war, googelte ich die Befehle, die ich nicht verstand, und wusste sofort, welche Art von Paket ich brauchte.

Ich war mir jedoch nicht sicher, warum die Vorverarbeitung durchgeführt wurde oder was sie tat. (Die Shell-Leistung ist nicht ausreichend.) Ich habe versucht, einige in Python zu schreiben, die ich normalerweise verwende, daher war es leicht zu verstehen, und ich stellte fest, dass der Prozess, den ich zuvor im Shell-Skript nicht verstanden hatte, der Autorisierungsprozess war. In 4 fand ich heraus, wie man herausfindet, mit welcher Logik der Teilschlüssel der ursprünglichen Spezifikationen von Radiko generiert wird.

Nachdem wir die benötigten Pakete und Bibliotheken haben, haben wir den Code geschrieben. Wie oben erwähnt, habe ich die API von Radiko aufgerufen und einen 40-fachen HTTP-Statuscode zurückgegeben. Daher habe ich untersucht, was die Chrome-Entwicklertools im Browser tun, die mit meinem Code fehlschlagen würden. Das Folgende ist, als ich den Autorisierungsprozess untersucht habe. devtool_auth.png

Als ich mir den Inhalt der Anfrage ansah, wusste ich, wann und wo ich etwas brauchte, beginnend mit X-Radiko - *** im Anforderungsheader. Als ich mir den Code kurz ansah, hatte ich ihn übersehen. Also fing es endlich an zu arbeiten.

Was ich in dem Artikel bekommen habe

Was ist hls beim Zusammenstellen? Was ist m3u8? Ich fragte mich noch einmal und als ich es nachschlug, stellte ich fest, dass es von RFC entschieden wurde. Wenn es von RFC entschieden wurde, stellte ich auch fest, dass es möglicherweise eine Bibliothek gibt, mit der sie einfach zu handhaben sind.

Die m3u8-Bibliothek war einfach zu bedienen und bereinigte meinen unordentlichen Code. Das Lesen des RFC und das Verstehen der Begriffe erleichterten auch das Benennen von Methoden und Variablen. Zum Beispiel hatten die Variablen Master Playlist und Media Playlist Namen, die vor dem Lesen des RFC sehr passend waren und beim erneuten Lesen nicht gut verstanden wurden.

Kürzlich gelesenes Buch, Isao Ueda. 101 Prinzipien, die ein Leben lang nützlich sein werden und die Sie bis zum dritten Jahr des Prinzips der Programmierung erwerben möchten.

Es gibt auch das Sprichwort, dass "gute Programmierer guten Code schreiben, gute Programmierer guten Code ausleihen".

Dort war. Als ich es las, verstand ich es irgendwie, aber dieses Mal habe ich das Gefühl, dass das Wissen um den Standard zu einem höheren Verständnis führt.

Zusammenfassung

Recommended Posts

Ich fand es heraus, indem ich ein Python-Skript erstellte, um Radiko aufzuzeichnen, während ich den Code der Vorgänger las
Ich habe ein Skript erstellt, das das aktive Fenster mit win32gui von Python aufzeichnet
Erste Python ② Versuchen Sie, Code zu schreiben, während Sie die Funktionen von Python untersuchen
Ich habe es herausgefunden, indem ich die Bewertungen der Website für Jobwechsel analysiert habe! ??
Ich habe den Code geschrieben, um den Brainf * ck-Code in Python zu schreiben
Ich habe versucht, den Authentifizierungscode der Qiita-API mit Python abzurufen.
Ich habe versucht, die Beschleunigung von Python durch Cython zu verifizieren und zu analysieren
Python-Code zur Bestimmung der monatlichen Signale für Investitionen mit relativer Stärke
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
Ich habe versucht, das Ergebnis des A / B-Tests mit dem Chi-Quadrat-Test zu überprüfen
Python: Ich möchte die Verarbeitungszeit einer Funktion genau messen
Ich habe eine Funktion erstellt, um die Bewegung eines zweidimensionalen Arrays (Python) zu sehen.
Django super Einführung von Python-Anfängern! Teil 2 Ich habe versucht, die praktischen Funktionen der Vorlage zu nutzen
[Du musst es wissen! ] Ich habe versucht, eine Python-Umgebung gewinnbringend einzurichten, indem ich die Privilegien von Universitätsstudenten voll ausgenutzt habe.
Ich habe ein Skript erstellt, um zu überprüfen, ob an der angegebenen Position der JSON-Datei in Python Englisch eingegeben wird.
[Python] So sortieren Sie nach dem N-ten M-ten Element eines mehrdimensionalen Arrays
Python-Skript zum Abrufen einer Liste von Eingabebeispielen für den AtCoder-Wettbewerb
Ich habe versucht, den Code des Python-Anfängers (Schüler der Mittelstufe) zu überarbeiten.
Ich habe Python verwendet, um mich über die Rollenauswahl der 51 "Yachten" in der Welt zu informieren.
Fügen Sie eine Funktion hinzu, um dem Wetter heute mitzuteilen, dass der Bot locker ist (hergestellt von Python).
Vorlage des Python-Skripts zum Lesen des Inhalts der Datei
Holen Sie sich den Rückkehrcode eines Python-Skripts von bat
Ich habe mir die Versionen von Blender und Python angesehen
Ich hatte das Gefühl, dass ich den Python-Code nach C ++ 98 portiert habe.
Python Hinweis: Das Rätsel, einer Variablen eine Variable zuzuweisen
Ich habe versucht, die String-Operationen von Python zusammenzufassen
Django super Einführung von Python-Anfängern! Teil 6 Ich habe versucht, die Login-Funktion zu implementieren
Ich habe versucht, eine RESTful-API zu erstellen, indem ich die explosive Fast-API des Python-Frameworks mit MySQL verbunden habe.
Ich habe eine Klasse erstellt, um das Analyseergebnis von MeCab in ndarray mit Python zu erhalten
[OCI] Python-Skript zum Abrufen der IP-Adresse einer Recheninstanz in Cloud Shell
Ich habe eine Funktion zum Trimmen des Bildes von Python openCV erstellt. Verwenden Sie sie daher bitte.
Ich schrieb einen Test in "Ich habe versucht, die Wahrscheinlichkeit eines Bingospiels mit Python zu simulieren".
Python-Skript, das den Status des Servers über den Browser überprüfen kann
Eine Geschichte, die ich machen wollte, als ich eine Liste von Lernsitzungen mit Python bekam
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich habe das Windows PowerShell-Kochbuch durch ein Python-Skript ersetzt.
Finden Sie die scheinbare Breite einer Zeichenfolge in Python heraus
[Python] So erstellen Sie eine Liste von Zeichenfolgen Zeichen für Zeichen
Ich möchte viele Prozesse von Python aus starten
Ich habe eine Funktion erstellt, um das Modell von DCGAN zu überprüfen
[Python] Ich habe versucht, die folgende Beziehung von Twitter zu visualisieren
Anhängen an den Python-Prozess des SSH-Ziels und Debuggen
Der Prozess, Python-Code objektorientiert zu machen und zu verbessern
Ich möchte die Natur von Python und Pip kennenlernen
Ich habe versucht, das Python-Skript unter Windows 10 von 2.7.11 auf 3.6.0 zu ändern
Python-Skript, das den Inhalt zweier Verzeichnisse vergleicht
Ich habe versucht, den Code des Python-Anfängers (Schüler der Mittelstufe) in objektorientiertes Knuspriges umzuwandeln
Eine Geschichte über das Schreiben von AWS Lambda und ein wenig Abhängigkeit von den Standardwerten von Python-Argumenten
Veröffentlichen Sie das erstellte Shell-Skript, um die Probleme beim Erstellen von LiveUSB unter Linux zu verringern
Ich habe versucht, die Sprecheridentifikation mithilfe der Sprechererkennungs-API von Azure Cognitive Services mit Python zu überprüfen. # 1
Ich habe versucht, die Sprecheridentifikation mithilfe der Sprechererkennungs-API von Azure Cognitive Services in Python zu überprüfen. # 2
Ich habe versucht, den Unterschied zwischen A + = B und A = A + B in Python herauszufinden
Ich habe versucht, den Inhalt jedes von Python pip gespeicherten Pakets in einer Zeile zusammenzufassen
[Python] Verwendung der for-Anweisung. Eine Methode zum Extrahieren durch Angabe eines Bereichs oder von Bedingungen.