[PYTHON] Versuchen Sie, die Spotify-API in Django zu aktivieren.

Einführung

Dieser Artikel stammt aus dem Django Adventskalender 2019. Die Zielgruppe ist für diejenigen, die neu in Django sind.

Der vorherige Artikel befasste sich mit dem 500-Fehler von @ yuu-eguci. https://qiita.com/yuu-eguci/items/a1e4b0a2f238d5ccc985

In diesem Artikel wird die Spotify-API auf Django ausgeführt.

Vorbereitungen

Ich muss ein Spotify-Benutzerkonto erstellen, aber der folgende Artikel nach Klassenmethode ist sehr hilfreich. https://dev.classmethod.jp/etc/about-using-of-spotify-api/

Wenn Sie den Beispielcode des Artikels ausführen möchten, laden Sie die Diagrammdaten im CSV-Format aus dem Folgenden herunter. https://spotifycharts.com/regional/jp/daily/latest

Serverseitige Implementierung

Es sind sehr schlechte Manieren, aber ich möchte, dass Sie den Vorgang einfach überprüfen, also habe ich alles in views.py zusammengefasst. Es tut mir leid, wenn Sie sich dadurch unwohl fühlen. .. ..


class SpotifySong:
    def __init__(self, song_name, uri):
        self.song_name = song_name
        self.uri = uri

def spotify(request) :
    #Spotify Client ID,Erzwingen Sie die Autorisierung mit Secret
    client_id = ''
    client_secret = ''
    client_credentials_manager = spotipy.oauth2.SpotifyClientCredentials(client_id, client_secret)
    #Erstellen Sie eine Spotify-Instanz
    spotify = spotipy.Spotify(client_credentials_manager=client_credentials_manager)

    #Lesen Sie die von Spotify heruntergeladene CSV-Datei
    songs = pd.read_csv(BASE_DIR + '/regional-jp-daily-latest.csv', index_col=0, header=1)

    #Holen Sie sich Song-Informationen von Spotify
    spotify_songs_list = []
    for url in songs['URL']:
        spotify_songs_list.extend(spotify.audio_features(url))

    #Songtitel anhängen
    response_list = []
    for i,spotify_song in enumerate(spotify_songs_list):
        response_list.append(SpotifySong(songs.iat[i,0],spotify_song['uri']))

    #Vorlage angeben
    template = loader.get_template('spotify/spotify_base.html')
    context = {
        'response_list': response_list,
    }
    return HttpResponse(template.render(context, request))

Die Antwort von spotify.audio_features finden Sie im Folgenden. Nicht nur die Spielzeit und die Tasten, sondern auch Indikatoren wie die Akustik des Songs und die Menge, die Sie tanzen können, werden zurückgegeben. Ich werde es in diesem Artikel weglassen, aber es scheint, dass ich einen Dienst leisten kann, um die Tendenz von Liedern zu lernen, die je nach Jahreszeit bevorzugt werden! https://developer.spotify.com/documentation/web-api/reference/tracks/get-audio-features/

Client-seitige Implementierung


{% if response_list %}
    <h1>tägliches Ranking</h1>
    <ul>
    {% for response in response_list %}
    <li><a href="https://embed.spotify.com/?uri={{ response.uri }}"> {{response.song_name}} </a></li>
    {% endfor %}
    </ul>
{% else %}
    <p>Musik von Spotify konnte nicht abgerufen werden.</p>
{% endif %}

Obwohl es sich um ein einfaches HTML handelt, können Sie ein tägliches Ranking wie das folgende erstellen. Es ist ein einfacher Bildschirm, auf den Sie klicken können, um zur Spotify-Song-Seite zu springen, aber ich denke, es wäre großartig für Anfänger, ihn zu erstellen.

スクリーンショット 2019-12-01 19.09.13.png

Was Sie wissen müssen, um den Beispielcode zu verstehen

Bei der Arbeit mit Vorlagen in Django sind einige Dinge zu beachten. Klicken Sie hier für das Handbuch. https://docs.djangoproject.com/en/2.2/ref/templates/language/#templates

  1. Wenn Sie die Größe der Sammlung erhalten möchten

Sie müssen es erhalten, indem Sie {{variable | length}} schreiben. Sie können die Variable .length nicht schreiben.

スクリーンショット 2019-12-01 19.18.01.png
  1. Wenn Sie den Index der Sammlung angeben und abrufen möchten

Sie können es nur erhalten, indem Sie die Indexnummer direkt angeben, z. B. {{Variable .0}}. Sie können keine {{Variable [[0]]}} schreiben.

スクリーンショット 2019-12-01 19.19.56.png

Aus den oben genannten Gründen definiert dieser Beispielcode eine eigene Klasse, um den Songtitel zu erhalten. Es ist möglich, den Rückgabewert von SpotifyAPI und das Ergebnis des CSV-Lesens zu übergeben, es ist jedoch schwierig, ihn mithilfe der Indexnummer abzurufen. Daher ist es schwierig, die Daten in einem Zustand zu verarbeiten, in dem die Objekte getrennt sind.

Bonus-Fehlerbehebung

Wenn Sie den folgenden Befehl eingeben, kann der Fehler "Port wird verwendet" auftreten.

python3 manage.py runserver

Django version 2.2.7, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Error: That port is already in use.

Der einfachste Weg, das oben genannte Problem zu lösen, besteht darin, den Prozess zu beenden, indem Sie die folgenden Schritte ausführen.

  1. Überprüfen Sie den Anschluss
lsof -i -P | grep 8000
Python    71504 user    4u  IPv4 0x2cdb3e922e88888      0t0  TCP localhost:8000 (LISTEN)
  1. Führen Sie den Befehl kill aus, indem Sie die PID angeben
kill -9 71504

Am Ende

Die Hürden für das endgültige Erscheinungsdatum von Django 3.0 wurden nicht überschritten, aber ich hoffe, es hilft jemandem. .. .. Der Django-Adventskalender von morgen lautet @ shimayu22. Vielen Dank!!

Recommended Posts

Versuchen Sie, die Spotify-API in Django zu aktivieren.
Versuchen Sie, die Kraken-API mit Python zu verwenden
Versuchen Sie es mit der BitFlyer Ligntning API in Python
Tipps zum Erreichen der ATND-API mit Python
Versuchen Sie, die DropBox Core-API mit Python zu verwenden
Versuchen Sie es mit der Twitter-API
Versuchen Sie es mit der Twitter-API
Versuchen Sie es mit der PeeringDB 2.0-API
Abrufen der arXiv-API in Python
Klicken Sie in Python auf die Sesami-API
Probieren Sie Ajax auf der Django-Seite aus
Wechseln Sie die in Django 1.9 angezeigte Sprache
Klicken Sie auf die Web-API in Python
Probieren Sie Cython in kürzester Zeit aus
GraphQL-API mit graphene_django in Django
Greifen Sie mit Python auf die Twitter-API zu
Holen Sie sich die Abfragezeichenfolge (Abfragezeichenfolge) mit Django
Spielen Sie, indem Sie die Riot Games-API in Python First Half drücken
Holen Sie sich die IP-Adresse des Kunden mit Django
Django ~ Lass es uns im Browser anzeigen ~
Versuchen Sie, das HL-Band der Reihe nach zu verwenden
Probieren Sie die Microsoft Cognitive Services Face-API aus
Tweet mit der Twitter-API in Python
Probieren Sie schnell die Microsoft Face API in Python aus
Erstellen Sie eine Anwendung mit der Spotify-API
Die Funktion _authenticate_with_backend wurde in django auth.autenticate nicht mehr unterstützt
Ich habe versucht, die Qiita-API von Anfang an zu aktivieren
Verwenden Sie Cloud Composer, um regelmäßig auf die Youtube-API zuzugreifen und eine Pipeline zum Speichern der Ergebnisse in Bigquery zu erstellen
Modell in Django
Geben Sie die Ansichts-URL in der Django-Vorlage an
Die Geschichte der Anzeige von Mediendateien in Django
So erstellen Sie eine Rest-API in Django
[Django] CSS im Projekt kann nicht gelesen werden
Versuchen Sie, die Monte-Carlo-Methode in Python zu implementieren
Klicken Sie in Python auf die Firebase Dynamic Links API
Versuchen Sie, direkt von Python 3 aus auf die YQL-API zuzugreifen
Form in Django
Versuchen Sie, die ChatWork-API und die Qiita-API in Python zu verwenden
Zweite Hälfte des ersten Tages des Python-Studiums Versuchen Sie, die Twitter-API mit Bottle zu erreichen
Lernnotizen für die Migrationsfunktion im Django-Framework (2)
Grundeinstellungen bei Verwendung der foursquare-API mit Python
[Django] Tabelle abschneiden (alle Tabellendaten löschen)
Setzen Sie DateField des Formulars in Django auf type = date
Versuchen Sie, das Bild in einen separaten Thread zu laden (OpenCV-Python).
Versuchen Sie, Tweets mithilfe der Twitter-API in großen Mengen zu löschen
Lernnotizen für die Migrationsfunktion im Django-Framework (1)
Versuchen Sie, die in Firefox gespeicherten Anmeldedaten zu entschlüsseln
Verwenden Sie die Such-API der National Parliament Library in Python
Spielen Sie Musik, indem Sie auf die inoffizielle API von Google Play Music klicken
Sprechen Sie über die Zeiterfassungs-API in der Programmiersprache
Ich habe versucht, die API mit dem Python-Client von echonest zu erreichen
Erstellen einer API, die mit BERT im Django REST-Framework negativ-positive Inferenzergebnisse zurückgibt
Versuchen Sie Debian + Python 3.4 + django1.7 ……
Modelländerungen in Django
Versuchen Sie gRPC in Python
Versuchen Sie es mit Django templates.html
C-API in Python 3
Probieren Sie 9 Slices in Python aus
Probieren Sie die C ++ - API von NNabla aus