「globalsafe - 外務省 海外安全情報オープンデータサーチ」(コロナで検索リンク)
GETパラメーターで、スペース区切りでAND検索するキーワードでフィルタリングできるJSON-API
https://app.sabae.cc/api/globalsafe.json?key=コロナ&limit=10
ライセンスは CC BY 外務省 海外安全情報オープンデータ, @taisukef
気軽にご活用ください!
「海外安全情報オープンデータ」は、VLEDのオープンデータ表彰2019でjig.jp賞として、勝手ながら選出させていただいた。
日本政府、自治体、各民間企業によるオープンデータ化がますます進みますように!
XMLをJSON化する xml2json が、どうもサーバーでうまくいかなかったので、xmldomのDOMParserを使って、簡易コンバーターを実装。
function makeJSON(xml) { let obj = {} if (xml.nodeType == 1) { // element if (xml.attributes.length > 0) { for (var j = 0; j < xml.attributes.length; j++) { const attribute = xml.attributes.item(j) obj[attribute.nodeName] = attribute.nodeValue } } } else if (xml.nodeType == 3) { // text obj = xml.nodeValue } if (xml.hasChildNodes()) { if (xml.childNodes.length == 1 && xml.childNodes.item(0).nodeName == "#text") { return xml.childNodes.item(0).data } for (let i = 0; i < xml.childNodes.length; i++) { const item = xml.childNodes.item(i) const nodeName = item.nodeName if (nodeName == undefined) { } else if (typeof(obj[nodeName]) == "undefined") { if (!(nodeName == "#text" && item.data == '\n')) { obj[nodeName] = makeJSON(item) } } else { if (typeof(obj[nodeName].push) == "undefined") { var old = obj[nodeName] obj[nodeName] = [] obj[nodeName].push(old) } obj[nodeName].push(makeJSON(item)) } } } return obj } const DOMParser = require('xmldom').DOMParser const toJSONfromXMLString = function(s) { const parser = new DOMParser() const xml = parser.parseFromString(s) return makeJSON(xml) }
attributeも中のタグも一緒くたに扱う変換となっています。必要に応じてカスタマイズするなど、どうぞご活用ください。
links
- 外務省 海外安全情報オープンデータ
- 台湾エリア別マスク残数表示アプリ、JSON-API化して低負荷高速化