入力となる JSON-LD に含まれる 電話番号 をもつ 連絡先型
に対して正規化を行います。
input.json
{
"@type": "連絡先型",
"電話番号": "03-5253-2111(内線31427)"
}
output.json
{
"@type": "連絡先型",
"電話番号": "(03)5253-2111",
"内線番号": "内線31427"
}
- ルート直下の
連絡先型
に限らず、JSON-LD に含まれるすべての連絡先型
に対して作用します 電話番号
プロパティの値が0-9 の数字及び + - ( ) ,
になるような文字種正規化を行い、値を更新します電話番号
プロパティの電話番号部分が後述のパターンに合致する場合には、番号がカッコ/ハイフンを用いてフォーマットされます電話番号
プロパティの電話番号部分の後にカッコつきの追加情報がある場合には内線番号
プロパティの付与を行います電話番号
プロパティの正規化ができなかった場合にはメタデータ
プロパティにメッセージが記述されます
output_with_error.json
{
"@context": "https://imi.go.jp/ns/core/context.jsonld",
"@type": "連絡先型",
"電話番号": "0312345678",
"メタデータ": {
"@type": "文書型",
"説明": "市外局番に続く番号は 2-9 で始まる番号でなければなりません"
}
}
以下のエラーが検出されます
- 電話番号でない場合
- 1 で始まる緊急用電話番号
- 00 で始まる中継用電話番号
- 2~9 で始まる市内通話用電話番号
- 市外局番に続く番号が 2~9 でない不正な電話番号
- 該当する市外局番が存在しない不正な電話番号
電話番号の区切り(ハイフンやカッコの挿入位置)については特に標準はありませんが、 総務省:電気通信番号指定状況 および ここからリンクされる PDF では国内で使用される各種の電話番号について以下のような区切りが提示されています。
携帯電話・PHS番号(070-CDE-FGHJK) 携帯電話・PHS番号(080-CDE-FGHJK) 携帯電話・PHS番号(090-CDE-FGHJK) M2M等専用番号(020-CDE-FGHJK) 発信者課金ポケベル電話番号(020-4DE-FGHJK) FMC用電話番号(0600-DEF-××××) IP電話の番号(050-CDEF-××××) 着信課金用電話番号(0120-DEF-×××) 着信課金用電話番号(0800-DEF-××××) 情報料代理徴収機能用電話番号(0990-DEF-×××) 統一番号(0570-DEF-×××)
本ライブラリはこれらに該当する電話番号についてはこの区切りに従って電話番号のフォーマットを行います。
また、固定電話番号については市外局番の桁数に応じて以下のいずれかの書式でフォーマットするものとします。
(0A)BCDE-FGHI
(0AB)CDE-FGHI
(0ABC)DE-FGHI
(0ABCD)E-FGHI
日本国内で使用される市外局番は
総務省:市外局番の一覧 で公表されており、
本ライブラリはこの市外局番データ(令和元年5月22日現在版) を加工して lib/areacode.json
として保持しています。
与えられた電話番号が固定電話番号相当であると判定された場合には
さらに市外局番データとの照合を行ってフォーマットまたはエラー検出(存在しない市外局番)を行います。
以下の手順でインストールします。
$ npm install IMI-Tool-Project/imi-enrichment-contact
通常はインストールすると imi-enrichment-contact
コマンドが使用できるようになります。
コマンドラインインターフェイスのファイルの実体は bin/cli.js
です。
$ npm install IMI-Tool-Project/imi-enrichment-contact
# ヘルプの表示
$ imi-enrichment-contact -h
# JSON ファイルの変換
$ imi-enrichment-contact input.json > output.json
# 標準入力からの変換
$ cat input.json | imi-enrichment-contact > output.json
# 文字列からの変換
$ imi-enrichment-contact -s 0398765432 > output.json
または npx
を使って以下のようにインストールせずに実行することも可能です。
$ npx IMI-Tool-Project/imi-enrichment-contact -s 0398765432
Web API を提供するサーバプログラムが同梱されています。
bin/server.js
がサーバの実体です。
以下のように bin/server.js
を実行することで起動できます。
$ npm install IMI-Tool-Project/imi-enrichment-contact
$ node node_modules/imi-enrichment-contact/bin/server.js
Usage: node server.js [port number]
$ node node_modules/imi-enrichment-contact/bin/server.js 8080
imi-enrichment-contact-server is running on port 8080
なお、実行時にはポート番号の指定が必要です。指定しなかった場合にはエラーが表示されて終了します。
サーバを停止するには Ctrl-C
を入力してください。
WebAPI は POST された JSON または テキストを入力として JSON を返します。
$ curl -X POST -H 'Content-Type: application/json' -d '{"@type":"連絡先型","電話番号":"0398765432(代表)"}' localhost:8080
{
"@type": "連絡先型",
"電話番号": "(03)9876-5432",
"内線番号": "代表"
}
$ curl -X POST -H 'Content-Type: text/plain' -d '0398765432(代表)' localhost:8080
{
"@context": "https://imi.go.jp/ns/core/context.jsonld",
"@type": "連絡先型",
"電話番号": "(03)9876-5432",
"内線番号": "代表"
}
- WebAPI の URL に GET メソッドでアクセスした場合には HTML ページが表示され、WebAPI の動作を確認することができます
- POST,GET 以外のメソッドでアクセスした場合には
405 Method Not Allowed
エラーが返されます Content-Type: application/json
ヘッダが設定されている場合は、POST Body を JSON として扱い、JSON に対しての変換結果を返しますContent-Type: application/json
ヘッダが設定されているが POST Body が JSON としてパースできない場合は400 Bad Request
エラーが返されますContent-Type: application/json
ヘッダが設定されていない場合は、POST Body を電話番号文字列として扱い、電話番号文字列を連絡先型に整形・正規化した結果を返します
モジュール imi-enrichment-contact
は以下のような API の関数を提供します。
module.exports = function(input) {..}
- 入力 (input) : 変換対象となる JSON または電話番号文字列
- 出力 : 変換結果の JSON-LD オブジェクト ※ 変換は同期で行うため Promise でないことに注意
const convert = require('imi-enrichment-contact');
console.log(convert("0398765432(代表)"));
以下の手順で環境を構築します。
$ git clone https://github.com/IMI-Tool-Project/imi-enrichment-contact.git
$ cd imi-enrichment-contact
$ npm install
以下の手順でテストを実行します
$ cd imi-enrichment-contact
$ npm test
以下の手順を実行するとブラウザで動作する JavaScript dist/imi-enrichment-contact.js
が生成されます。
$ cd imi-enrichment-contact
$ npm run browser
$ ls dist
imi-enrichment-contact.js
以下のように HTML で読み込むと、グローバルスコープに IMIEnrichmentContact
関数が登録されます。
<script src="imi-enrichment-contact.js"></script>
<script>
console.log(IMIEnrichmentContact("0398765432(代表)"));
</script>
この IMIEnrichmentContact
に String あるいは JSON を渡すことで、変換結果を取得できます。