かえるるる(@kaeru_nantoka)です。
本エントリでは、Django プロジェクト内にて Pythonで iTunes API を叩き楽曲情報のJSONデータをhtml上に表示します。
この時検索条件を指定するのですが、この時に渡すデータをDjango model から持ってくることとします。
尚、今回は↓ の方のエントリを参考にさせて頂きました。
iTunes APIの分かりやすい使い方解説 – ハックマン.com
jsのajaxを使用してわかりやすく説明してくださっています。ありがとうございました。
目次:
1- 主なプロジェクト構成
2- 今回触るファイル
3- ソースコード
4- まとめ
実践 :
1- プロジェクト構成
myProject/myApp --- 曲情報を格納しているアプリ
myProject/myAPI --- APIを叩いてhtmlレンダリングするアプリ
2- 今回触るファイル
myApp/model.py
myAPI/views.py, myAPI/urls.py
3- ソースコード
i.
#myApp/model.py from django.db import models class Singer(models.Model): singer_name = models.CharField(max_length=50) def __str__(self): return self.singer_name
Singerクラスというものを定めています。
localhost/adminの管理画面か、shellスクリプトで歌手名を登録しておきましょう。
今回は、「米津玄師」「Perfume」を登録しておきました。
__str__() という関数はありますね。これは、歌手名を String データに変換して返す関数です。
Djangoモデルでは「クエリ」という形式でデータを格納しています。
それを扱いやすくするために、Stringという形式に変換するのがこの関数の役目です。
ii.
#myAPI/views.py import json from django.http import HttpResponse import requests from myApps.models import Singer def render_json_response(request, data, status=None): #response を JSON で返却 json_str = json.dumps(data, ensure_ascii=False, indent=2) callback = request.GET.get('callback') if not callback: callback = request.POST.get('callback') # POSTでJSONPの場合 if callback: json_str = "%s(%s)" % (callback, json_str) response = HttpResponse(json_str, content_type='application/javascript; charset=UTF-8', status=status) else: response = HttpResponse(json_str, content_type='application/json; charset=UTF-8', status=status) return response def iTunes_search(request): item_data = Singer.objects.all() lz = [] data_list = [] sss = 0 maxNum = "5" for x in item_data: z = x.__str__() lz.append(z) keyWord = lz[sss] print(lz[sss]) url = 'https://itunes.apple.com/search?lang=ja&entry=music&media=music&country=JP&limit='+ maxNum +'&term=' + keyWord headers = {"content-type": "application/json"} r = requests.get(url, headers=headers) data = r.json() data_list.append(data) print(data_list) sss += 1 return render_json_response(request, data_list) #JSON
・本エントリの本命の、iTunes_search()関数です。
・item_data = Singer.objects.all() はSingerという名前でDBに格納されているもの全てをクエリという形式で取得します。今回は、「米津玄師」「Perfume」という値がやってきます。
・lz と data_list という配列を用意します。クエリできた値を__str__()で文字列に変換し、配列 lz にしまいます。
・lz にしまったそれぞれの値を KeyWord として urlに渡し、そのurl でAPIを叩きその返り値のJSONデータを data_list[]に格納。
・歌手の人数分これを繰り返し、最後にまとめてJSONオブジェクトとしてHTMLに投げるといった具合です。
iii.
#myAPI/urls.py from django.urls import path from api import views app_name = 'api' urlpatterns = [ path('iTunes_search/', views.iTunes_search, name='iTunes_search'), ]
ここでは、myAPI/views.py で投げられたJSONオブジェクトを表示するためのurl を作っています。
localhost/myAPI/iTunes_seach/ で検索したら先ほど投げたJSONデータが表示されます。
私の場合はこのようになりました。
下にスクロールしていったらPerfumeの曲も5曲出ています。
4- まとめ
このように簡単に iTunes APIを叩いて楽曲情報を取得することができました。
youTube APIと異なり認証キーを必要としないのは魅力的ですね。
以上、ありがとうございました。