先日、2024年のノーベル平和賞が、日本被団協に授与されましたので、早速アプリ「Nobel Prize Laureates 1」で「平和賞」、「2024」で検索してみると、(アプリの対象年度に2024を追加)
上記の通り団体の名前が表示されない。
一方、1974年の平和賞を検索すると、佐藤栄作氏とショーン・マクブライド氏の情報が表示された。
データベースより取得したJSONデータを見てみると、対象が団体と個人の場合でキーの名前が異なっていることが判明。
平和賞は、団体に対しても授与されるが、団体が受賞した場合は、fullNameの代わりにorgNameがキーとなっていることがわかった。
また、受賞年度によっては、同じ分野の受賞対象が個人と団体双方が含まれていることもある。
アプリ実行のビデオ:
スクリーンデザイン:
以下の通り、前回と変更点なし。
ブロック・コード:
変更、追加部分のみ。
1. 変数laureateTypeを新規に設定。受賞の対象が団体(organization)か個人(person)を識別する。
2. 取得したJSONデータより、laureateID, fullName(団体の場合は、orgName), birthDate(団体の場合は、設立年のデータを持っている founded), category(受賞分野), awardYear(受賞年), motivation(功績), websummaryURL(受賞者/団体に関するデータをもつウエッブサイトのURL)を取り出す。
上記データは、laureate(受賞個人又は団体)ごとにJSONデータより一つのかたまりとして取り出すが、この際、fullName, birthDateについては、このかたまりの項目のキーに「orgName」が含まれているかどうかをチェックして、含まれている場合は、fullNameではなくorgNameのデータを、birthDateではなくfoundedのデータを、fullNameListとbirthDateListに追加していくこととした。(下図の赤黄点線部分)
拡大すると以下の通り。
他の項目については、対象が個人、団体に関係なくキーの名前が同じなのでチェックの必要はなし。
************* 以下続くが、省略。***************
3. 各項目のデータのlistから、若干体裁を整えてListViewに表示するデータを作成することとなるが、個人が生まれた年月日には「Born on」を、団体の設立年には「Founded on」をそれぞれのデータの前に表示するようにした。
この際、変数laureateTyepを利用し、対象が団体(organization)か個人(person)、どちらなのかをチェックし、「Born on」「Founded on」のいずれを表示すべきかを決めるようにした。
上記赤黄点線内を拡大表示すると以下の通り。
4. なお、個人と団体が同じ分野で受賞した時の例として、以下のURLをクリックすれば2022年の平和賞のJSONデータで確認することができる。(参考まで)
https://api.nobelprize.org/2.1/laureates?nobelPrizeYear=2022&nobelPrizeCategory=pea
言うまでもないことだが、raw dataとして取得することとなり、このままでは見にくかもしれないので、JSON Formatter & Validator などの変換サイトにcopy & pasteをするか、Chromeのextension "JSON Formatter" などを利用すると見やすくなる。
***********************************************************
今回判明した今後の課題:
前回は、「birthPlace」(生誕地)のデータも表示したが、今回は省いた。団体の場合は、個人の「birthPlace」(生誕地)に対応するのが「所在地」となる。この団体の所在地については、複数のキーが存在しており、受賞団体によって、使用されるキーが異なるようで、この対応について次回以降検討予定。対処方法が見つかればアプリに反映し、生誕地又は所在地を追加したい。
***********************************************************
前回までのブログ:
MIT App Inventor 2で遊ぶ (Nobel Prize Laureates 1)
※コメント投稿者のブログIDはブログ作成者のみに通知されます