Vinyl Collections (レコード情報管理アプリを作る 2.4/5)
今回は取得したJSONから必要なデータを取得し、アプリ内のデータと保存するようにします。
処理の流れ:
0. 検索結果表示用テーブルのデータを削除する。
1. FileMakerからキーワードを送信 (APIを叩く)し、JSONを取得。
2.1 取得したJSONの件数を確認する。
2.2 取得したJSONの最初のデータから1件づつ順番に処理する
2.3. 取得したJSONを検索結果の表示用データ(24項目)として保存。
3. 表示用データからレコードの情報を保存
2.1〜2.3のところが繰り返しの処理となります。今回は「高気圧ガール」のため、1ページで、2ページはなしの48件のデータのみとなります。
1. FileMakerからキーワードを送信 (APIを叩く)し、JSONを取得
検索キーの入力と、検索の実行はこのボタンになります。
APIから取得したデータを$$JSONに保存していますので、レコードの情報が記載されているresultsの要素のみを取得します。ここ注意が必要で、results要素は、48件のデータが繰り返されていることです。
JSONGetElement ( $$JSON;"results")
↓
[
{
"barcode" : [ "JASRAC", "¥700" ],
"catno" : "MOON-706",
"community" :
{
"have" : 129,
"want" : 113
},
"country" : "Japan",
"cover_image" : "https://img.discogs.com/q_G8bLNhjlJgh2UaMkEG-y2FGsQ=/fit-in/600x592/filters:strip_icc():format(jpeg):mode_rgb():quality(90)/discogs-images/R-7402097-1615634633-2287.jpeg.jpg",
"format" : [ "Vinyl", "7\"", "45 RPM" ],
"format_quantity" : 1,
"formats" :
[
{
"descriptions" : [ "7\"", "45 RPM" ],
"name" : "Vinyl",
"qty" : "1"
}
],
"genre" : [ "Rock", "Funk / Soul", "Pop" ],
"id" : 7402097,
"label" : [ "Moon Records", "Alfa Moon, Inc.", "Warner Music Japan Inc." ],
"master_id" : 1455182,
"master_url" : "https://api.discogs.com/masters/1455182",
"resource_url" : "https://api.discogs.com/releases/7402097",
"style" : [ "Soul", "Pop Rock" ],
"thumb" : "https://img.discogs.com/b9Ym8MLbryomxLU_0lb-UWYRHhc=/fit-in/150x150/filters:strip_icc():format(jpeg):mode_rgb():quality(40)/discogs-images/R-7402097-1615634633-2287.jpeg.jpg",
"title" : "山下達郎* - 高気圧ガール",
"type" : "release",
"uri" : "/%E5%B1%B1%E4%B8%8B%E9%81%94%E9%83%8E-%E9%AB%98%E6%B0%97%E5%9C%A7%E3%82%AC%E3%83%BC%E3%83%AB/release/7402097",
"year" : "1983"
},
2.1 取得したJSONの件数を確認する。
2.2 取得したJSONの最初のデータから1件づつ順番に処理する
57行目で、result要素で繰り返されるデータの件数を取得します。このJSONだと$ListKeysは48件、65行目で1件づつをLoopさせながら処理していきます。
2.3. 取得したJSONを検索結果の表示用データ(24項目)として保存。
Loopしながら、表示用の新規レコードを作成し、resultsの中から必要なキー毎にフィールドへデータをセットしていきます。下記で2箇所だけ、異なるキーの指定を追加しているので、補足しておきます。
①を取得するために、次の2つを指定しています。これはcommunityの下位に属する要素の指定が必要となります。
JSONGetElement($Json_data;"comunity.have")
JSONGetElement($Json_data;"comunity.want")
{
"barcode" : [ "JASRAC", "¥700" ],
"catno" : "MOON-706",
"community" :
{
"have" : 129,
"want" : 113
},
・
・
・
・
②の取得には、formatsのあとに "[(角括弧)" と "]" があるので、"["を含めて指定が必要となります。
JSONGetElement($Json_data;"formats[]descriptions")
JSONGetElement($Json_data;"formats[]name")
JSONGetElement($Json_data;"formats[]qty")
"formats" :
[
{
"descriptions" : [ "7\"", "45 RPM" ],
"name" : "Vinyl",
"qty" : "1"
}
],
あとはresultsの直下なので、そのままの指定となります。
JSONGetElement($Json_data;"barcode")
JSONGetElement($Json_data;"catno")
・
・
・
JSONGetElement($Json_data;"country")
JSONGetElement($Json_data;"cover_image")
JSONGetElement($Json_data;"format_quantity")
{
"barcode" : [ "JASRAC", "¥700" ],
"catno" : "MOON-706",
"community" :
・
・
・
"country" : "Japan",
"cover_image" : "https://img.discogs.com/q_G8bLNhjlJgh2UaMkEG-y2FGsQ=/fit-in/600x592/filters:strip_icc():format(jpeg):mode_rgb():quality(90)/discogs-images/R-7402097-1615634633-2287.jpeg.jpg",
"format" : [ "Vinyl", "7\"", "45 RPM" ],
"format_quantity" : 1,
3. 表示用データからレコードの情報を保存
検索結果のページから転記するデータの「情報の転記」ボタンでデータをレコードに対して追加します。
7行目から17行目で、転記するための情報を変数にしていきます。
登録済の可否を判断していますが、新規の場合は、下記の50行目以降が処理内容になります。51行目と52行目は、アーティスト名とタイトル名が "-(ハイフン)"で繋がっているので、50行目でsubtitute関数で改行区切りにして処理をしています。
取得後の画面はこうなります。便利ですねAPIは。これらの情報を一から入力するのはとても手間です。こういった機能ができるのもインターネット、そして、情報を整備するプラットフォームがあればこそです。本当に便利。
そして個人的に好きなのは、Webのように余計な広告が表示されないこと。本当に広告だらけでどこが本文か読めないのは、人が読むことを全く無視しているので、広告自体を排除したほうが目にもコンテンツとしても良いのでは?、といつも思っています。
ちょっと横道に逸れてきたのですが、次回は取得したデータを元に、収録曲の取得について説明したいと思います。
よろしければサポートをお願いします。頂いたサポートはAPIの周り調査や実験に使わせて頂きます。スピーカーの作成や、ホロスコープの依頼もあれば、メッセージをください。