外務省の海外安全情報をAPIで取る
外務省の海外安全情報は、渡航先の危険レベル(レベル1〜4)や感染症危険情報、現地大使館からの領事メールを公開しており、オープンデータとしてXMLで配信されています。登録もAPIキーも不要で、政府標準利用規約に準拠して商用利用も可能という、扱いやすい部類のAPIです。ただし、コードを1桁間違えるだけで「エラーではなく200 OK」が返ってくるという、静かで危険な仕様があります。このガイドでは、取れるデータと実際に叩いて確認した罠を整理します。
地域別と国別、2種類のファイル
ベースURLは `https://www.ezairyu.mofa.go.jp/opendata` です。クエリパラメータは無く、静的なXMLファイルを直接取りに行く形式です。認証は不要。
**地域別**は `GET /area/{2桁の地域コード}.xml`。実際に確認できたコードは、`10`=アジア、`20`=大洋州、`30`=北米、`33`=中南米、`42`=ヨーロッパ、`50`=中東、`60`=アフリカ です。`00` は全地域になります。中身は、その地域に関する領事メールの一覧です。
**国別**は `GET /country/{4桁ゼロ埋めの国コード}.xml`。実測例では `0086`=中国、`0227`=ニジェール、`0421`=スロバキア、`1000`=米国本土です(`1002`=グアム、`1808`=ハワイのように、地域によって別コードが振られています)。国別ファイルには危険情報の要約が入るので、「この国は今どのレベルか」を知りたいならこちらです。
危険レベルは「数字」ではなく「フラグ」で返る
ここが解釈の要点です。「レベル4」という値がそのまま入っているフィールドは**ありません**。代わりに `riskLevel1` 〜 `riskLevel4` という4つのフィールドがあり、**該当する件数のフラグ**として表現されます。
実測例を挙げると、ニジェール(`0227`)では `riskLevel4` が 1、他のレベルは 0 でした。つまり「レベル4に該当する情報が1件ある」という意味です。「レベル4の国だ」と読むには、この4フィールドを見て判断する必要があります。テキストとしての「レベル4」という表現は、`riskTitle` や `lead`、`mainText` といった本文側にしか出てきません(実測の `riskTitle` は「ニジェールの危険情報【一部地域の危険レベル引上げ】」でした)。
**感染症危険情報も同じスキーマの中**に `infectionLevel1` 〜 `infectionLevel4` として入っています。渡航危険情報と感染症危険情報は別制度ですが、同じファイルの中に並んでいるので、混同しないよう注意してください。
このほか、現在有効な危険情報の要約として `riskLeaveDate` / `riskTitle` / `riskLead` / `riskUrl`、広域の注意喚起として `wideareaSpot`、そして領事メールの一覧が入ります。メールの種別は `infoType` で区別され、実測値は `R10`=領事メール(一般)、`T40`=危険情報、`R20`=緊急一斉配信系(台風警報等)、`C50`=広域情報でした。
最大の罠:コードを間違えると200 OKでHTMLが返る
このAPIで最も危険なのがこれです。存在しないコードを指定しても、**404にはなりません**。実測で `9999`(存在しない国コード)や `421`(4桁ゼロ埋めしていない3桁)を渡したところ、**HTTP 200 OK** とともに `Content-Type: text/html` で「指定されたページが見つかりません」という外務省の汎用エラーページが返ってきました。配信基盤(Akamai)のフォールバックです。
何が起きるかというと、XMLを期待しているコードがHTMLを受け取ります。`response.ok` をチェックしていても通過します。運が悪いとパースエラーにもならず、「データが空だった」として静かに処理が進みます。**「危険情報が0件だから安全」と誤読する**——安全情報を扱うAPIとしては、これは笑えない事故です。
対策は明快です。**国コードは必ず4桁ゼロ埋め、地域コードは2桁**という桁数を厳守すること。そして `Content-Type` を検証し、`application/xml` でなければエラーとして扱うことです。ステータスコードだけを信じてはいけません。
参考までに、同じ政府系でもe-Govのパブリックコメントは、存在しないコードに対して301→404という**検知できる**エラーを返します。同じ「政府のオープンデータ」でも壊れ方が非対称なので、APIごとに確かめる必要があります。
利用条件(商用可・出典必須)
利用規約が明確なのはこのAPIの美点です。**政府標準利用規約(第2.0版)に準拠**しており、CC BY 4.0 と互換です。複製・公衆送信・翻案が自由にでき、**商用利用も可能**です。
条件は出典の記載です。「出典:外務省 海外安全情報オープンデータ(当該ページのURL)」のように明記します。加工した場合は加工した旨も書く必要があり、国が作成したかのように見せる態様での公表は禁止されています。
免責条項として「国は利用者の一切の行為について責任を負わない」「コンテンツは予告なく変更・移転・削除されることがある」と明記されています。前述のソフト404は、まさにこの「予告なく削除される」が起きたときにも同じ形で現れます。エラー処理を省略しないでください。
更新頻度は、実測時に取得時刻の約15分前を `lastModified` が指していました。領事メールの配信のたびに更新されているようですが、1回の観測なので推測です。
出典
元システムエンジニア。Web系アプリ開発6年+ソリューション9年、IT実務およそ15年。個人開発者として、政府オープンデータや各府省のAPIを実際に叩いて検証し、「何が取れるか」「実装時にどこで詰まるか」「どう活用するか」を一次検証にもとづいて記録しています。
運営者・検証方針について →