メディア芸術データベースのAPIを使用してJSONデータを取得したものの、Node.jsでネストありのJSONデータを扱う方法に少し手間取ったため備忘録。
Node.jsでAPIデータ取得→ネストありのJSONデータの扱いについての記事がなかったため残します。
メディア芸術データベース
文化庁がマンガやアニメ、ゲームといったメディア作品の情報を保存し、ベータ版としてデータベースを公開している。
- 検索サイト
https://mediaarts-db.bunka.go.jp/
- データベースについて
https://mediaarts-db.bunka.go.jp/about#anc02
APIで取得したJSONの形式
saenai-heroine-no-sodatekata.json
{"hitnum":1,
"record":[{"fieldId":"animation",
"categoryId":"an-col",
"subcategoryId":"an207",
"aipId":"C15461",
"metadata":{"rdf:type":["Collection"],
"schema:additionalType":["an"],
"schema:genre":["テレビレギュラーアニメシリーズ"],
"schema:name":["冴えない彼女*の 育てかた[ヒロイン]"],
"schema:name xml:lang=\"ja-Hrkt\"":["サエナイヒロインノソダテカタ","サエナイカノジョノソダテカタ"],
"schema:creator":["[監督]亀井幹太"],
"schema:contributor":["[シリーズ構成]丸戸史明 / [監督]亀井幹太 / [キャラクターテザイン] / [キャラクターテザイン、総作画監督]高瀬智章 / [美術監督]日下部夏月 / [美術設定]綱頭瑛子 / [音響監督]藤田亜紀子 / [音楽]百石元(F.M.F) / [アニメーション制作]A-1 Pictures / [制作]冴えない製作委員会 / [制作]アニプレックス / [制作]フジテレビジョン / [制作]KADOKAWA富士見書房BC / [制作]京楽産業ホールディングス / [制作]関西テレビ放送 / [制作]電通 / [制作]グッドスマイルカンパニー / [制作]コスパ"],
"schema:actor":["【安芸倫也】松岡禎丞 / 【澤村・スペンサー・英梨々】大西沙織 / 【霞ヶ丘詩羽】茅野愛衣 / 【加藤恵】安野希世乃 / 【氷堂美智留】矢作紗友里 / 【波島伊織】柿原徹也 / 【波島出海】赤崎*千夏 / 【石巻基予】大地葉 / 【里見梓】奥野香耶 / 【上郷喜彦】内田雄馬 / 【町田苑子】桑島法子 / 【加藤圭一】斉藤壮馬 / 【澤村小百合】中原麻衣 / 【水原叡智佳】田辺留依 / 【姫川時乃】鈴木絵理 / 【森丘藍子】大地葉"],
"schema:publisher":["CX"],
"schema:datePublished":["2015-01-09"],
"schema:startDate":["2015-01-09"],
"schema:endDate":["2015-03-27"],
"ma:type":["レギュラー"],
"schema:isPartOf":["C5951"],
"ma:media":["TVレギュラー"],
"ma:Effect":["アニメ"],
"ma:periodDisplayed":["00時50分 / フジテレビで放映 / 30分枠"],
"ma:runtime":["30分"],
"ma:volumeNumber":["13"],
"ma:originalCreator":["[原作]丸戸史明"],
"ma:contributor":["[アニメーション制作]A-1 Pictures / [制作]冴えない製作委員会 / [制作]アニプレックス / [制作]フジテレビジョン / [制作]KADOKAWA富士見書房BC / [制作]京楽産業ホールディングス / [制作]関西テレビ放送 / [制作]電通 / [制作]グッドスマイルカンパニー / [制作]コスパ"],
"ma:source":["CRNT2015(カレント2015新規登録)"],
"madbdata:oldDateModified":["2016-04-01T11:44:40"]}
}
]
}
メディア芸術データベースで1件だけヒットさせた結果が上記の通りである。
「"record"」キー配下に検索でヒットした結果のレコードが配列的に格納される。
この記事では、「"record"」キー配下の「"metadata"」の中の「"schema:name"」のValueを扱いたい!みたいな時のやり方の備忘録である。
Node.js(express)のコード(APIで取得→配列に格納→コンソール出力)
index.js
const express = require('express');
const bodyParser = require('body-parser');
const https = require('https');
// define the Express app
const app = express();
//メディア芸術データベースAPIのURL
const mediaartsdbAPI = 'https://mediaarts-db.bunka.go.jp/api/search?aipId=C15461';
// use bodyParser to parse application/json content-type
app.use(bodyParser.json());
// アプリケーションの「http://localhost:4000/」にアクセスすると、メディア芸術データベースへHTTPでGETしにいく。
app.get('/', (req, res) => {
//GETしたJSON(バイナリ)をテキスト化&JSONパースし格納するための変数。
let mediaartsdbRec1 = '';
//「"record"」配下の要素を格納するための配列。
let mediaartsdbRec2 = [];
const mediaartsdbGet = https.request(mediaartsdbAPI, (res) => {
let buf = [];
res.on('data', (chunk) => {
buf.push(chunk);
//bufにはバイナリの配列の形でJSONが格納される。
});
res.on('end', () => {
//バイナリをテキスト化し、それをJSONパースする。
mediaartsdbRec1 = JSON.parse(buf.toString());
//「"record"」の要素を配列に格納していく。
for (j in mediaartsdbRec1['record']){
mediaartsdbRec2.push(mediaartsdbRec1['record'][j]);
}
console.log(mediaartsdbRec2[0]['metadata']['schema:name']);
console.log('JSONデータは以上です。');
});
})
mediaartsdbGet.on('error', (e) => {
console.error(`エラーが出ました: ${e.message}`);
});
mediaartsdbGet.end();
res.send(mediaartsdbRec2);
});
// start the server
app.listen(4000, () => {
console.log('listening on port 4000');
});
/App/backend # node src
listening on port 4000
[ '冴えない彼女*の 育てかた[ヒロイン]' ]
JSONデータは以上です。
「"record"」キー配下の「"metadata"」の中の「"schema:name"」のValueをconsole.logで表示できました。
あとは同じようにして変数に入れるなりすれば活用できるかと。