2023-08-03

東京都八王子市役所とのシビックテックイベントで知った日本遺産。


「日本遺産「桑都物語」|八王子市公式ホームページ」

八王子の高尾山は東京都で唯一の日本遺産。


「日本遺産ポータルサイト|文化庁が認定する日本の文化・伝統」

日本遺産、現在は104のストーリーとして登録されています。利用規約を読むと、文部科学省ウェブサイト利用規約に準拠で、クリエイティブ・コモンズ・ライセンスの表示4.0国際と互換性があるオープンデータと判明。すばらしい!


「日本遺産オープンデータ」
src and data on GitHub
日本遺産104のCSVデータを地図と表で表示するデモアプリです。全データに緯度経度があるわけではないのでご注意ください。

HTMLParserでHTMLからのデータ化、スクレイピングするDeno/JavaScriptのコードです。HTMLがclassできれいに構造化されていると楽ですが、本当は3つ星以上のオープンデータ公開してほしい。 import { HTMLParser } from "https://js.sabae.cc/HTMLParser.js"; import { writeData } from "https://js.sabae.cc/writeData.js"; import { fetchOrLoad } from "https://js.sabae.cc/fetchOrLoad.js"; const url = "https://japan-heritage.bunka.go.jp/ja/stories/"; const html = await fetchOrLoad(url); const dom = HTMLParser.parse(html); const stories = dom.querySelectorAll(".con_story .wrp_sto > li"); const list = []; for (const st of stories) { const url = st.querySelector("a").getAttribute("href"); const num = st.querySelector(".num").text; const image = "https://japan-heritage.bunka.go.jp" + st.querySelector(".wrp_img > img").getAttribute("src"); const areasli = st.querySelectorAll(".area li"); const areas = areasli.map(a => a.text).join(","); const name = st.querySelector(".st").text; const subname = st.querySelector(".txt").text; const jhno = parseInt(num.substring(num.indexOf("#") + 1)); list.push({ jhno, url, name, subname, image, areas }); } await writeData("japan-heritage", list); この調子で、各ストーリーには構成文化財が複数関連付けられているのでそちらを取得。全部で4539ありました。マップに表示するために緯度経度が欲しいですね。

詳細ページの地図リンクは緯度経度が入っているGoogleマップが大半でしたが、中にはbingマップも(難波宮跡|日本遺産ポータルサイト、Google mapで見るとリンクに書いてあるのでバグと思われます)。また、cid、ftidで指定されているものは緯度経度を取得するため、GooglePlaceAPIの呼び出しライブラリを作って対応しました(同じキーの呼び出しをキャッシュするCacheライブラリも合わせて作成)。

残念ながら、GoogleマイマップのID、midが指定されているもの、地図リンクがそもそもないものは現在空欄としています。結果として、日本遺産39/42/46/47/52/75番は緯度経度が取得できた構成文化財がないためマップに表示できていません。

import { CSV } from "https://js.sabae.cc/CSV.js"; const props = await CSV.fetchJSON("./japan-heritage_props_detail.csv"); const sum = props.length; const err = props.filter(p => !p.lat).length; console.log(err, sum, (err / sum * 100).toFixed(1)); 4539件中、緯度経度データが取得できていないデータが1229件(27.1%)とそこそこ多くてもったいない。検証用に「構成文化財 緯度経度エラー一覧」としてまとめました。データの追記をお願いしてみます。


「日本遺産オープンデータ 構成文化財一覧」
src and data on GitHub
緯度経度が取得できた3310件をマッピング!leafletでは重いので別の地図エンジンへの切り替えが必要そうです。(→ すぐになんと2アプリ登場!

CSV/JSON/CBORでGitHub Pagesで公開しているのでどなたでも自由に活用可能です!


北陸情報通信局の菱田局長とJAIST、北陸先端科学技術大学院大学の寺野学長、丹副学長と面談。北陸、サイバーバレーからスタートアップ起業増を目指します。


京都駅で発見、Internet3

日本の宝、どんどん磨いていきましょう!

Tweet
クリエイティブ・コモンズ・ライセンス
本ブログの記事や写真は「Creative Commons — CC BY 4.0」の下に提供します。記事内で紹介するプログラムや作品は、それぞれに記載されたライセンスを参照ください。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / 「一日一創」画像 / RSS