ジービズインフォ（旧法人インフォ）API

## ジービズインフォとは
経済産業省が出した法人番号や法人名から企業等の活動情報の検索エンジンです。政府保有の法人情報を法人番号に紐づけてデータ整理を行い、２次利用可能なオープンデータとして情報提供するサイトです。

## 具体的にどんな情報が取得できるの？
**法人基本情報**の他に**法人活動情報**が取得できます。
法人活動情報の中には以下のような情報も取得できます。
- 財務情報
- 特許情報
- 届出・認定情報
- 補助金交付情報
- 調達情報などなど

## APIの種類
現在提供されてるAPIは２種類あります：SPARQL API版とREST API版。旧法人インフォでは最初にできたAPIはSPARQL APIで、その後継いだのはREST APIでした。そのためか、APIのレスポンス速度が違います。
今回はRESTAPI中心に書くと思います。

## そもそもSPARQLとは
Wikipedia より：
_SPARQLはRDF問合せ言語の１つである。RDF問合せ言語は、Resource Description Framework (RDF) で記述されたXMLやTurtleなどのRDFデータのリソースを取り扱うためのコンピュータ言語である。_
_SPARQL は、クエリの基本的なパターンである論理積や論理和をはじめ、文字列操作やフィルターなどのその他のパターンを指定可能であり[2]、PythonやRubyなどのプログラミング言語でSPARQLを利用できるライブラリが存在する_
[DBpedia](http://ja.dbpedia.org/)（Wikipedia抽出するツール）もSPARQLを使用されてます。

SPARQLでのクエリの例：

```sql
/* 「東京都」と含まれてる情報のWikiを検索する */
SELECT DISTINCT *
WHERE {
  <http://ja.dbpedia.org/resource/東京都> ?p ?o .
}
```

### ジービズインフォのSPARQL API版
ジービズインフォのSPARQL API版の仕様はこの[リンク](https://info.gbiz.go.jp/api/document/API.pdf)で確認することができます。
例：法人番号を基づい法人基本情報を取得する際のクエリ

```sql
/* 法人基本情報 */
PREFIX  hj: <http://hojin-info.go.jp/ns/domain/biz/1#>
PREFIX  ic: <http://imi.go.jp/ns/core/rdf#>
SELECT DISTINCT ?corporateID ?corporateName ?corporateKana ?location ?moddate ?systemName ?classSInfo 
 FROM <http://hojin-info.go.jp/graph/hojin> { 
     ?s hj:法人基本情報 ?key. 
     ?key ic:ID/ic:識別値 '4010401098455'. 
     OPTIONAL{?key ic:ID/ic:識別値 ?corporateID .} 
     OPTIONAL{?key ic:名称 _:keyCorporateName . 
     _:keyCorporateName ic:種別 '商号又は名称'. 
     _:keyCorporateName ic:表記 ?corporateName .} 
     OPTIONAL{?key ic:名称 _:keyCorporateNameKana . 
     _:keyCorporateNameKana ic:種別 '商号又は名称'. 
     _:keyCorporateNameKana ic:カナ表記 ?corporateKana .} 
     OPTIONAL{?key ic:住所 _:keyAddress . 
     _:keyAddress ic:種別 '住所' . 
     _:keyAddress ic:表記 ?location .} 
     OPTIONAL{?key hj:更新日時/ic:標準型日時 ?moddate .} 
     OPTIONAL{?key hj:システム名/ic:表記 ?systemName .} 
     OPTIONAL{?key hj:区分 _:keyStatus. 
              _:keyStatus ic:種別 '処理区分'. 
              _:keyStatus ic:表記 ?classSInfo .} 
 } GROUP BY ?corporateID ?corporateName ?corporateKana ?location ?moddate ?systemName ?classSInfo 
```

### SPARQL版を試してみて感じたこと
法人番号で情報検索のクエリは秒単位でレスポンスが返されましたが、法人名での検索が凄く時間かかりました。**秒単位**では済ませない、場合によって**分単位**ぐらいかかった時もありました。

## REST API版
ジービズインフォのREST APIを利用するには[Web API利用申請](https://info.gbiz.go.jp/hojin/api_registration/form)を申請しないといけません。この申請ではAPIトークンを発行します。このAPIトークンは後々REST APIを利用する際にはこのAPIトークンをヘッダーに含めてリクエストを投げます。

### REST APIの仕様
嬉しいことにSwaggerが既に用意されてます。
https://info.gbiz.go.jp/hojin/swagger-ui.html
全てのリクエストは【GET】で行いますので、凄くシンプルなAPIです。

### レスポンスのステータスコード
`200`は通常のスタータスコードです。
Swaggerには、`401`が認証エラーと書いてありますが、実際に投げてみると`500`が認証エラーになったます。
![Screen Shot 2020-12-07 at 2.29.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2262/fe51c360-963a-4d8e-3714-ae1f8c79e78a.png)
その他にデータが見つからない場合`404`が返されました。
![Screen Shot 2020-12-07 at 2.32.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2262/432abf43-6055-b118-f7a0-125210c4fa1b.png)


### 法人情報を検索する
以下のフォーマットでリクエストを投げます。

```
GET
https://info.gbiz.go.jp/hojin/v1/hojin?name=<法人名>
Header: 
X-hojinInfo-api-token: <API申請の時に発行されたトークン>
```
例：`Increments`を含める法人名で法人情報を検索する場合
![Screen Shot 2020-12-07 at 2.34.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2262/07e13325-b9cd-e6fa-463c-f75a7c1bd0e4.png)

#### レスポンス

レスポンスはJSON形式で、`message`のキーにはステータスコードが含まれています。`hojin-infos`のキーは様々な法人情報が含まれてます。

```
{
    "id": null,
    "errors": null,
    "message": "200 - OK.",
    "hojin-infos": [
      {
            "corporate_number": "1000020298506",
            "postal_code": "6340078",
            "location": "奈良県橿原市八木町１丁目７－３６",
            "name": "奈良県住宅新築資金等貸付金回収管理組合",
            "name_en": "Narakenjuutakushinchikushikintoukashitsukekinkaishuukanrikumiai",
            "status": "-",
            "number_of_activity": "0",
            "update_date": "2020-08-26T00:00:00+09:00"![Screen Shot 2020-12-07 at 2.59.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2262/12cd1002-01ef-bef9-ecad-23b6f335c4a5.png)

     },
    ...
  ]
}
```

#### ページネーション
結果が複数返される場合、`page`と`limit`のパラメーターでページネーションを使うことができます。

```
https://info.gbiz.go.jp/hojin/v1/hojin?name=＜法人名＞&page=＜ページ数＞&limit=＜一つのリクエストで返される法人情報＞
```

例：`Increments`を含める法人名で法人情報を検索して、一つのリクエストで3つを返され、最初のページを取得する場合
![Screen Shot 2020-12-07 at 1.09.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2262/02d26058-919b-17f2-fc6a-5e752e1bc34b.png)

#### その他のパラメーター
その他にもいくつか面白いパラーメーターが存在してます。

- corporate_type	
法人種別：以下のコードを設定。 101 国の機関 201 地方公共団体 301 株式会社 302 有限会社 303 合名会社 304 合資会社 305 合同会社 399 その他の設立登記法人 401 外国会社等 499 その他 複数の場合はカンマ区切りでコードを設定。

- city	
所在地(市区町村)：総務省地方公共団体コードの市区町村コードを設定。(prefecture設定必須)

- average_age	
従業員の平均年齢：以下のコードを設定。 A：～30歳 B：31歳～45歳 C：46歳～60歳 D：61歳～

などなど、詳しくは[Swagger](https://info.gbiz.go.jp/hojin/swagger-ui.html)に参考してください。

### 法人番号での検索

法人番号がわかれば、基本情報の他に色々な情報を取得することできます。
例えば、財務情報を取得したい場合、以下のエンドポイントのフォーマットで取得できます。

```
GET
https://info.gbiz.go.jp/hojin/v1/hojin/＜法人番号＞/finance
```
レスポンス：
![Screen Shot 2020-12-07 at 2.59.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2262/dd44ac12-89d0-a405-542f-d5480b4cb15a.png)

なんと、法人番号で企業の特許情報も取得できます。

```
GET
https://info.gbiz.go.jp/hojin/v1/hojin/＜法人番号＞/patent
```
レスポンス：
![Screen Shot 2020-12-07 at 3.02.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2262/a81b50e9-8c3d-e64b-a6ec-904ce7be7c56.png)

などなど、詳しくは[Swagger](https://info.gbiz.go.jp/hojin/swagger-ui.html)に参考してください。

## 最後に
ジービズインフォAPIでは色々な使えそうな情報や面白い情報も提供されてますので、ぜひ試してみてください！