見出し画像

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箇所だけ、異なるキーの指定を追加しているので、補足しておきます。

vinyl_2_community_formatsの取得

①を取得するために、次の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は。これらの情報を一から入力するのはとても手間です。こういった機能ができるのもインターネット、そして、情報を整備するプラットフォームがあればこそです。本当に便利。

スクリーンショット 2021-12-19 20.54.44

そして個人的に好きなのは、Webのように余計な広告が表示されないこと。本当に広告だらけでどこが本文か読めないのは、人が読むことを全く無視しているので、広告自体を排除したほうが目にもコンテンツとしても良いのでは?、といつも思っています。

ちょっと横道に逸れてきたのですが、次回は取得したデータを元に、収録曲の取得について説明したいと思います。

よろしければサポートをお願いします。頂いたサポートはAPIの周り調査や実験に使わせて頂きます。スピーカーの作成や、ホロスコープの依頼もあれば、メッセージをください。