特許情報取得APIのトークン取得

#1 特許情報取得APIとは
　特許情報取得APIとは、日本国特許庁が提供するサービスであり、特許情報を取得するためのRest-APIです。今月（２０２２年１月）になってからサービスを開始したので、未だ情報の蓄積がなされておりません。よって、ここでは特許情報取得APIについて簡単に説明すると共に、トークンの取得方法について説明します。

https://www.jpo.go.jp/system/laws/sesaku/data/api-provision.html

<a href="https://www.jpo.go.jp/system/laws/sesaku/data/document/api-provision/api-provision-kiyaku.pdf">特許情報取得API 利用規約</a> はこちらです。

<a href="https://www.jpo.go.jp/system/laws/sesaku/data/document/api-provision/api-provision-tebiki.pdf">特許情報取得API 利用の手引き</a> はこちらです。

<a href="https://ip-data.jpo.go.jp/pages/top.html">API情報提供サイト</a> はこちらです。

https://ip-data.jpo.go.jp/pages/top.html

#2 概略利用方法

##2.1 手続き
　特許情報取得APIは、令和４年１月現在にて無料で提供されているものですが、利用規約に同意した上で、特許庁に利用者登録をしなければ使用できません。利用登録方法についても、<a href="https://www.jpo.go.jp/system/laws/sesaku/data/api-provision.html">APIを利用した特許情報の試行提供を開始します</a>のページに記載されていますので、それに従って特許庁に申し込んでください。
　特許庁から存在確認の電話が来て暫くすると、IDとパスワードとトークン取得パスが通知されます。
　なお、トークン取得パスは一般には非公開とのことですので、以下にてトークン取得パスは伏せさせていただきます。

##2.2 認証と情報取得
（１）先ず、IDとパスワードをヘッダに設定して、トークン取得パスに対してPOSTを実行すると access_token と refresh_token が取得できます。
　access_token は、１時間に亘って有効です。
　refresh_token は、access_token　を更新するためのトークンであり、８時間に亘って有効です。

（２） refresh_token の有効期間内に refresh_token をヘッダに設定して、トークン取得パスに対してPOSTを実行すると access_token と refresh_token を更新できます。

（３）取得した access_token をヘッダに設定して、各情報取得パスに対してGETを実行すると特許情報が取得できます。

#3 トークン取得について
##3.1 curl.exe による方法
 この方法は、弁理士の椿豊先生にご教示いただいたものです。
Windows10のコマンドプロンプトを開いて、以下のコマンドを実行してください。トークンが取得できます。

```bat:Windows10のコマンドプロンプト
curl -X POST -H "Content-Type: application/x-www-form-urlencoded" --data-urlencode "grant_type=password" --data-urlencode "username=ユーザ名" --data-urlencode "password=パスワード（未エンコード）" https://ip-data.jpo.go.jp/(トークン取得パス)
```

JSON形式のトークンが取得できます。標準出力なのでリダイレクト可能です。

![コマンドプロンプト.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/4fab9fa7-46cf-505c-6895-d189d6d2aa4b.png)


##3.2 VBAによる方法
　Excelのワークシートを開いて、マクロボタンをクリックしたのち、「作成」ボタンをクリックして Visual Basic for Application エディタを開くと、下記コードをコピペしてください
　そして、トークン取得パスとユーザ名とパスワードを設定して test_auth_token() を実行すると、メッセージボックスに、Httpレスポンスが表示され、その後に取得したトークンが表示されます。

```vb:get_token
Option Explicit

'----------------------------------------------------------------------
' 機能：特許情報取得API? 認証手続
'----------------------------------------------------------------------
Sub test_auth_token()
     Dim objweb As Object
     Set objweb = CreateObject("MSXML2.ServerXMLHTTP")

     Call objweb.Open("POST", "https://ip-data.jpo.go.jp/(トークン取得パス)", False)
     Call objweb.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
     Dim szBody As String
     szBody = "grant_type=password"
     szBody = szBody & "&username=" & encodeUrlUtf8("ユーザ名（未エンコード）")
     szBody = szBody & "&password=" & encodeUrlUtf8("パスワード（未エンコード）")
     objweb.Send (szBody)
     MsgBox (objweb.Status)
     MsgBox (objweb.responseText)
End Sub
'----------------------------------------------------------------------
' 文字列をURLエンコード
'----------------------------------------------------------------------
Public Function encodeUrlUtf8(ByRef strSource As String) As String
     Dim objSC As Object

     Set objSC = CreateObject("ScriptControl")
     objSC.Language = "Jscript"
     encodeUrlUtf8 = objSC.CodeObject.encodeURIComponent(strSource)
     Set objSC = Nothing
End Function
```

正常に設定できたならば、先ずhttpステータス200が表示されます。
![httpステータス.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/f0ee39ac-e976-7576-1b12-2fb28399be8c.png)

次にアクセストークンを含んだJSONが表示されます。但し文字列が長いので途中までです。
![トークンメッセージボックス.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/6c1a5c97-cb1f-c8e2-0aa9-eb7dca258f8a.png)



##3.3 Talend API による方法
 Talend APIとは、Rest-API をテストするためのクローム拡張です。もちろん無料です。

https://chrome.google.com/webstore/detail/talend-api-tester-free-ed/aejoelaoggembcahagimdiliamlcdmfm?hl=ja

 Talend APIを使って access_token を取得可能です。

![talented_api01.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/b3b69c41-0582-b8e7-df5b-34f91fd40461.png)

（１）METHOD として POST を選択します。
（２）HOST に https://ip-data.jpo.go.jp/(トークン取得パス) を設定します。
（３）Headers に Content-Type: application/x-www-form-urlencoded を設定します。
（４）Body に grant_type=password&username=ユーザ名（エンコード済)&password=パスワード（エンコード済）　を設定します。
（５）Send ボタンをクリックして、Response 200 が返されればOKです。以下がレスポンスペインです。

![talented_api02.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/c260b10a-3708-4f89-4a14-f9bf0b4ccbf0.png)

なお、URLエンコードされたユーザ名とパスワードを得るには、例えば<a href="https://tech-unlimited.com/urlencode.html">URLエンコード・デコード</a>のページを使ってください。
　手作業で半角文字列をURLエンコードする場合には、例えば「a～z」「A～Z」「0～9」「'」「.」「-」「*」「)」「(」「_」はそのまま変更せず、それ以外の文字を %に続き、文字コードを１６進数２桁で記載してください。

#4 Talend APIによる特許情報取得
　なお、取得した access_token を使って Talend API により 特許情報を取得する方法を以下に示します。

![talented_api11_app_progress.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/dba88cca-e0be-ee27-bb87-34f1857a91eb.png)

（１）METHOD として GET を選択します。
（２）HOST に 特許情報取得APIを設定します。
　　　ここでは経過情報取得API：https://ip-data.jpo.go.jp/api/patent/v1/app_progress/（出願番号）
　　　を設定しています。
（３）Headers に Authorization: Bearer （アクセストークン） を設定します。
（４）Send ボタンをクリックして、Response 200 が返されればOKです。以下がレスポンスペインです。

![talented_api12_app_progress.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266273/1da775e4-1366-63a1-e0db-daeeb65a2d26.png)

Response のBody に特許経過情報が取得されています。