音楽アーティストのSpotify IDを取得します.プログラム的に!


私の長年の学生と私は最近コードのレンズを通して音楽の世界を調査していました.彼女は学期の間にあります、そして、私自身のように、ものを造るかゆみは現在存在します.前の学期では、彼女は特定のspotifyデータセットから離れているtkinterのグラフを生成するために、matplotlibインターフェースの大部分を書きました.それは実際には、彼女は貿易(完全に別の業界での作品)によって開発されていないと考え、実際に印象的だった、彼女自身のこのようなことを行ったことがない、と完全に彼女自身の知識とスタックのエントリの完全なオフに構築.私は彼女の二度目に彼女を指導してきた、コンピュータサイエンスで、彼女を成長させる見てきた、私は彼女が長い道のりを来ていると言うことができると誰もがコードを書くことができる、伝統的にも“非コンピュータ”の人々!ディー
それで、そのプロジェクトのためのクラスは終わりました、しかし、我々は多くの楽しみを彼女のコードをきれいにして、まわりに動いて、より高い品質の状態にそれを得ました.「適切な」変数の命名、tkinterのレイアウトについてのいくつかの知識など、彼女自身のコードライティングで実施するのに時間がかかっていなかった経験と知識と適切な教育を伴う小さなものがたくさんあります.私自身の幼年期レベルのプログラミング活動の多くは、攻撃性と熱情を持って来ました.単純な変数命名選択の長期の影響を考慮することなく、単に「してください」.ありがたいことに、彼女のプロジェクトはそれほど大きくはなく、「物事をきれいにする」というステップを踏む問題ではなかった.彼女は、この変数が何をするのかについて考える必要がなく、別の観点から自分のコードを理解することができました.物事は“適切に”に近い名前と呼ばれている.
それで、「楽しみ」の精神で、そして、彼女の次の学期の準備において、我々はそれで何ができるかについて見るためにSpotifyのAPIを調査し始めました.我々は興味深い機能に遭遇しました、get_recommendations、我々が見つけることができて、戻りトラックは彼女が働いていた元のデータセットに存在することを勧めます.これは非常にクールな発見だった!私は一般的にSpotifyのUIを憎むが、私はプログラミングが大好き、私は基本的な、粗野なテキストのクリスを作るのが大好きなので、これは私たちはまだ十分に考えていないプロジェクトにパズル作品のために素晴らしい作品が、物事が構築されている方法を知って、好奇心の私自身の感覚は、我々は何が何であるかを確認するために掘っている.
途中で、我々はSpotifyは、データベース内の資産をタグ付けする奇妙な内部IDシステムを使用して発見されている:アーティスト、プレイリスト、およびトラック、少なくとも、おそらく他のものも.
しかし、SpotifyのUIはクリックしてアーティストIDを取得する手段を提供するので、知っておくのは便利です.たぶんSpotifyは、アーティストIDを与えられた機能を提供するサイト上のいくつかのツールがあります.
しかし、私はそれが欲しくなかった.私はspotifyのUIを使用する必要はありません.まったく!そこで、APIはプログラムのアーティストIDを取得する方法を持っているはずです.
理想的には、私はアーティストの名前を入力することができますし、自分のIDを取得し、それは私が今までやったことです.
しかし、Spotifyから取得する前に、APIのエンドポイントで認証する必要があります.
そのためには、あなた自身のclient_idおよびclient_secretを取得する必要があります.
まず、ここに移動し、独自のclient_id:client_secretclient_idを得るために新しいspotifyアプリケーションを作成します.spotifyいくつかのきちんとしたグラフを使用してユーザーの要求を追跡、それはクールな種類です.
https://developer.spotify.com/dashboard/applications
次に、client_secretおよびclient_idを自分のテキストファイルに保存する.
次のコードスニペットは、Spotifyからのアクセストークンを取得する方法を示します.client_secretから要求するために、このトークンが必要です.
import requests as r
from sys import argv, exit
from base64 import b64encode
import json

def get_auth_key():
    headers = {}
    client_id = ""
    client_secret = ""
    with open("client_id.txt", "r") as infile:
        client_id = infile.read()
        client_id = client_id[ 0 : len(client_id) - 1]
    with open("client_secret.txt", "r") as infile:
        client_secret = infile.read()
        client_secret = client_secret[ 0 : len(client_secret) - 1]
    client_str = f"{client_id}:{client_secret}"
    client_str_bytes = client_str.encode('ascii')
    client_str = b64encode( client_str_bytes ) 
    client_str = client_str.decode('ascii')
    auth_header = f"Basic {client_str}"
    headers['Authorization'] = auth_header
    data = {
        "grant_type" : "client_credentials"
    }
    url = "https://accounts.spotify.com/api/token"
    myreq = r.post(url, headers=headers, data=data)
    status_code = myreq.status_code 
    content = myreq.content.decode('ascii')
    json_data = json.loads(content)
    access_token = json_data['access_token']
    return access_token
一度アクセストークンを持っている場合は、client_id.txtクエストに渡すことができます.以下は、解析可能なレスポンスを得るために必要なものを行う関数です.
def do_request():
    artist_name = argv[1]
    url = f"https://api.spotify.com/v1/search?type=artist&q={artist_name}"
    headers = {
        "Accept"        : "application/json",
        "Content-Type"  : "application/json",
    }
    auth_key = get_auth_key()
    headers['Authorization'] = f"Bearer {auth_key}"
    myreq = r.get(url, headers=headers)
    content = myreq.content
    status_code = myreq.status_code 
    if status_code != 200:
        print("Error: status code:", status_code)
        exit(-1)
    json_data = json.loads(content)
    #json_str = json.dumps(json_data, indent=2)
    #print(json_str)
    return json_data
JSONレスポンスがあれば、それをあなたが望むようにフォーマットできます.ここでは、自分の行のすべてのアーティスト名、spotify id、ジャンルリストをすべてのリストの検索結果に応答をフォーマットする方法の例です.
def format_json_data(json_data):
    artists = json_data['artists']
    items = artists['items']
    for item in items:
        name = item['name']
        artist_id = item['id']
        genres = ",".join( item['genres'] )
        if genres=="":
            continue
        print(name, artist_id, genres)
このスクリプトの最後の部分は、ユーザーがコマンドラインでアーティスト名を渡すことを確認するだけです.
def check_params():
    if len(argv)!=2:
        print("Usage: python3 search.py <artist>")
        exit(-1)

def main():
    check_params()
    json_data = do_request()
    format_json_data( json_data ) 

if __name__ == "__main__":
    main()
このスクリプトはhttps://github.com/mikedesu/spotify_test/blob/master/search.pyにあり、音楽を含んでいるクールなものを構築するために使用されるかもしれないか、または使用されないかもしれない他のものの間で、プログラム上のspotify操作の成長しているセットの一部であるでしょう.
非常にすぐに、このスクリプトは、アーティスト名を与えられた推薦を引くために、同じレポでclient_secret.txtと結合されます.Spotifyは実際にこのような要求で5つのシードアーティストを処理することができますし、その例を簡単に拡張することができます.
会議前にコーヒーが必要だ.次回まで簡単に!
Pythonまたはいくつかの他のプログラミング言語のヘルプが必要ですか?Hit me up on Wyzant