[PYTHON] Essayez d'accéder à l'API Spotify dans Django.

introduction

Cet article est tiré du calendrier de l'avent Django 2019. Le public cible est pour ceux qui sont nouveaux sur Django.

L'article précédent portait sur l'erreur 500 de @ yuu-eguci. https://qiita.com/yuu-eguci/items/a1e4b0a2f238d5ccc985

Cet article traite de l'exécution de l'API de Spotify sur Django.

Préparation préalable

J'ai besoin de créer un compte utilisateur Spotify, mais l'article suivant par méthode de classe est très utile. https://dev.classmethod.jp/etc/about-using-of-spotify-api/

Si vous souhaitez exécuter l'exemple de code de l'article, téléchargez les données du graphique au format CSV à partir de ce qui suit. https://spotifycharts.com/regional/jp/daily/latest

Implémentation côté serveur

Ce sont de très mauvaises manières, mais je veux que vous vérifiiez l'opération facilement, j'ai donc tout résumé dans views.py. Je suis désolé si cela vous met mal à l'aise. .. ..


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

def spotify(request) :
    #ID client Spotify,Appliquer l'autorisation à l'aide de Secret
    client_id = ''
    client_secret = ''
    client_credentials_manager = spotipy.oauth2.SpotifyClientCredentials(client_id, client_secret)
    #Créer une instance Spotify
    spotify = spotipy.Spotify(client_credentials_manager=client_credentials_manager)

    #Lisez le fichier CSV téléchargé depuis Spotify
    songs = pd.read_csv(BASE_DIR + '/regional-jp-daily-latest.csv', index_col=0, header=1)

    #Obtenir des informations sur les chansons de Spotify
    spotify_songs_list = []
    for url in songs['URL']:
        spotify_songs_list.extend(spotify.audio_features(url))

    #Joindre les titres des chansons
    response_list = []
    for i,spotify_song in enumerate(spotify_songs_list):
        response_list.append(SpotifySong(songs.iat[i,0],spotify_song['uri']))

    #Spécifiez le modèle
    template = loader.get_template('spotify/spotify_base.html')
    context = {
        'response_list': response_list,
    }
    return HttpResponse(template.render(context, request))

Veuillez vous référer à ce qui suit pour la réponse renvoyée par spotify.audio_features. Non seulement le temps de jeu et les touches, mais également des indicateurs tels que l'acoustique de la chanson et combien vous pouvez danser sont renvoyés. Je vais l'omettre dans cet article, mais il semble que je puisse faire un service pour apprendre la tendance des chansons qui sont préférées selon la saison! https://developer.spotify.com/documentation/web-api/reference/tracks/get-audio-features/

Implémentation côté client


{% if response_list %}
    <h1>classement quotidien</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>Échec de l'obtention de la chanson sur Spotify.</p>
{% endif %}

Bien qu'il s'agisse d'un simple HTML, vous pouvez faire un classement quotidien comme suit. C'est un écran simple sur lequel vous pouvez cliquer pour accéder à la page de la chanson Spotify, mais je pense que ce serait génial pour les débutants de le faire.

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

Ce que vous devez savoir pour comprendre l'exemple de code

Il y a quelques points à garder à l'esprit lorsque vous travaillez avec des modèles dans Django. Cliquez ici pour le manuel. https://docs.djangoproject.com/en/2.2/ref/templates/language/#templates

  1. Lorsque vous souhaitez obtenir la taille de la collection

Vous devez l'obtenir en écrivant {{variable | length}}. Vous ne pouvez pas écrire la variable .length.

スクリーンショット 2019-12-01 19.18.01.png
  1. Lorsque vous souhaitez spécifier l'index de la collection et l'obtenir

Vous ne pouvez l'obtenir qu'en spécifiant directement le numéro d'index, tel que {{variable .0}}. Vous ne pouvez pas écrire {{variable [[0]]}}.

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

Pour les raisons ci-dessus, cet exemple de code définit sa propre classe pour obtenir le titre de la chanson. Il est possible de transmettre la valeur de retour de SpotifyAPI et le résultat de la lecture CSV, mais il est difficile de l'obtenir en utilisant le numéro d'index, il est donc difficile de gérer les données dans un état où les objets sont séparés.

Dépannage des bonus

Si vous tapez la commande suivante, l'erreur Port est utilisé peut se produire.

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.

Le moyen le plus simple de résoudre ce qui précède est de tuer le processus en suivant les étapes ci-dessous.

  1. Vérifiez le port
lsof -i -P | grep 8000
Python    71504 user    4u  IPv4 0x2cdb3e922e88888      0t0  TCP localhost:8000 (LISTEN)
  1. Exécutez la commande kill en spécifiant le PID
kill -9 71504

À la fin

Les obstacles pour la date de sortie finale de Django 3.0 n'ont pas été dépassés, mais j'espère que cela aidera quelqu'un. .. .. Le calendrier de l'avent Django de demain est @ shimayu22. Je vous remercie!!

Recommended Posts

Essayez d'accéder à l'API Spotify dans Django.
Essayez d'utiliser l'API Kraken avec Python
Essayez d'utiliser l'API BitFlyer Ligntning en Python
Conseils pour accéder à l'API ATND avec Python
Essayez d'utiliser l'API DropBox Core avec Python
Essayez d'utiliser l'API Twitter
Essayez d'utiliser l'API Twitter
Essayez d'utiliser l'API PeeringDB 2.0
Obtenir l'API arXiv en Python
Frappez l'API Sesami en Python
Essayez Ajax sur la page Django
Changer la langue affichée dans Django 1.9
Accédez à l'API Web en Python
Essayez Cython dans les plus brefs délais
API GraphQL utilisant graphene_django dans Django
Accéder à l'API Twitter avec Python
Récupérer la chaîne de requête (chaîne de requête) avec Django
Jouez en accédant à l'API Riot Games en Python Première moitié
Obtenez l'adresse IP du client avec Django
Django ~ Affichons-le sur le navigateur ~
Essayez d'utiliser la bande HL dans l'ordre
Essayez l'API de visage de Microsoft Cognitive Services
Tweet à l'aide de l'API Twitter en Python
Essayez rapidement l'API Face de Microsoft en Python
Créer une application à l'aide de l'API Spotify
La fonction _authenticate_with_backend était obsolète dans django auth.autenticate
J'ai essayé d'accéder à l'API Qiita depuis le début
Utilisez Cloud Composer pour accéder régulièrement à l'API Youtube afin de créer un pipeline afin de stocker les résultats dans Bigquery
Modèle dans Django
Spécifiez l'URL de la vue dans le modèle Django
L'histoire de l'affichage des fichiers multimédias dans Django
Comment créer une API Rest dans Django
[Django] css dans le projet ne peut pas être lu
Essayez d'implémenter la méthode Monte Carlo en Python
Accédez à l'API Firebase Dynamic Links en Python
Essayez d'accéder à l'API YQL directement depuis Python 3
Formulaire à Django
Essayez d'utiliser l'API ChatWork et l'API Qiita en Python
Deuxième moitié de la première journée d'étude de Python Essayez d'utiliser l'API Twitter avec Bottle
Notes d'apprentissage pour la fonction migrations dans le framework Django (2)
Paramètres initiaux lors de l'utilisation de l'API foursquare avec python
[Django] Perform Truncate Table (supprimer toutes les données de la table)
Définissez DateField du formulaire sur type = date dans Django
Essayez de charger l'image dans un thread séparé (OpenCV-Python)
Essayez de supprimer des tweets en masse à l'aide de l'API de Twitter
Notes d'apprentissage pour la fonction migrations dans le framework Django (1)
Essayez de déchiffrer les données de connexion stockées dans Firefox
Utiliser l'API de recherche de la Bibliothèque du Parlement national en Python
Écoutez de la musique en accédant à l'API non officielle de Google Play Music
Parlez de l'API d'acquisition du temps dans le langage de programmation
J'ai essayé de frapper l'API avec le client python d'echonest
Création d'une API qui renvoie des résultats d'inférence négatifs-positifs à l'aide de BERT dans le framework Django REST
Essayez Debian + Python 3.4 + django1.7 ……
Modifications du modèle dans Django
Essayez gRPC en Python
Essayez d'utiliser Django templates.html
API C en Python 3
Essayez 9 tranches en Python
Essayez l'API C ++ de NNabla