前回では特許庁APIの概要について紹介しました。今回は具体的にpythonでの利用方法を紹介します。
また利用方法を説明しながらAPIの詳細についても紹介します。
利用方法については説明の便宜のため、エラーやイレギュラーケース、汎用性は考えていません。
第三者にサービスとして提供する場合は考慮する必要はありますが、今回の趣旨とはことなるので割愛します。
以下のページに記載の方法で申し込みます。ワードファイルでの利用申込書を作成し、
メールにて送って1週間程度で利用登録の通知が来ました。
https://www.jpo.go.jp/system/laws/sesaku/data/api-provision.html
https://ip-data.jpo.go.jp/pages/top.html
Host:指定されたURL ※
Content-Type:application/x-www-form-urlencoded
grant_type:password (注:passwordという文字列です)
username: 特許庁から発行を受けた ID ※
password:特許庁から発行を受けたパスワード
pythonの場合はrequestで取得できます。ライブラリがpython内にない場合はpipにてインストールしましょう。
>pip install requests
requestsについての説明は以下の公式サイトがわかりやすいと思います
https://requests-docs-ja.readthedocs.io/en/latest/
トークン取得部分(python)
import requests
import json
url = "https://ip-data.jpo.go.jp/(取得パス)" #特許庁より通知あり
HOST = "ip-data.jpo.go.jp"
headers = {"Content-Type": "application/x-www-form-urlencoded", "Host": HOST}
payload = {'grant_type': 'password', 'username': '(ユーザー名)', 'password': '(パスワード)'}
r = requests.post(url, headers=headers, data=payload)
tokens = {"access_token": "", "refresh_token": ""}
if (r.status_code == 200):
tokens["access_token"] = r.json()['access_token']
tokens["refresh_token"] = r.json()['refresh_token']
else
sys.exit()
end
この処理後は1時間以内であればアクセストークンを使ってAPIからデータを取得可能となります。
また、それ以後8時間まではリフレッシュトークンを使えばユーザ認証なしで新たにトークン取得可能となります。
これについては「特許情報取得APIの利用の手引きv1.2.pdf」を参照すると良いでしょう。
https://ip-data.jpo.go.jp/pages/top.html
実際にアクセストークンを使ってデータ取得をやってみましょう。
ここでは特許経過情報についてアクセスします。先ほどのコードの続きで実行してください。
この結果変数rに経過情報のjsonが返されます。
# 特許経過情報取得
app_num = "2020008423". # 出願番号
url_app_progress = "https://ip-data.jpo.go.jp/api/patent/v1/app_progress/2020008423"
headers = {"Authorization": "Bearer " + tokens["access_token"], "Host": "ip-data.jpo.go.jp"}
r = requests.get(url_app_progress, headers=headers)
先ほどは特許経過情報について取得している例を挙げましたが、特許庁APIでは以下の情報を取得することができます。
このうちほとんどはjplatpatや他の商用データベースでも知ることができる情報です。
APIの1回のアクセスで知ることができるのは1回の問合せで1つの出願番号についての以下のいずれかの情報です。
jplatpatで検索するよりAPI経由で便利な情報としては以下があります
ではこのうち拒絶理由通知書ダウンロードAPIを使ってみましょう
先ほどのトークン取得した後の処理です
# 拒絶理由ダウンロード
app_num = "2007035937"
url = "https://ip-data.jpo.go.jp/api/patent/v1/app_doc_cont_refusal_reason/" + app_num
headers = {"Authorization": "Bearer " + tokens["access_token"], "Host": "ip-data.jpo.go.jp"}
r = requests.get(url, headers=headers)
レスポンスで処理が正しく行ったときはzipファイルが返されるので保存する処理が必要となります。
filename = "refusal_reason_" + app_num + ".zip"
save_file_path = os.path.join("./", filename)
with open(save_file_path, 'wb') as f:
f.write(r.content)
上記では保存ディレクトリを現在(pythonを実行しているディレクトリ)にしていますが、環境に合わせて変えてください。
これでzipファイルが作成され、その中に拒絶理由通知書のxmlが含まれています。xmlの一部(ファイルの途中)を以下に示します。
<jp:article-group>
<jp:article>第29条柱書</jp:article>
<jp:article>第29条第2項</jp:article>
</jp:article-group>
</jp:bibliog-in-ntc-pat-exam>
<jp:reconsideration-before-appeal jp:true-or-false="false"/>
<jp:conclusion-part-article>
<p num=""> この出願は、次の理由によって拒絶をすべきものです。これについて意見が<br/>
ありましたら、この通知書の発送の日から60日以内に意見書を提出してくだ<br/>
さい。<br/>
<br/>
理 由<br/>
</p>
</jp:conclusion-part-article>
<jp:drafting-body>
<p num="">
1.この出願の下記の請求項に記載されたものは、下記の点で特許法第29条第1項柱書に規定する要件を満たしていないから、特許を受けることができない。<br/>
<br/>
記<br/>
<br/>
ダウンロード自体は便利ですが、xmlでの形式なのでその後の表示や処理のためのプログラムは別途必要になります。
利用の手引きによるとアクセス制限は100なので自動で繰り返し処理すれば、100文献分の拒絶理由通知書が1日で取れる計算になります。
現状の1日のアクセス数は以下となっています。
表1 API の種類と日次の上限アクセス回数(回/日)
1 特許経過情報 400
2 シンプル版特許経過情報 400
3 特許分割出願情報 30
4 特許優先基礎出願情報 30
5 特許申請人氏名・名称 200
6 特許申請人コード 200
7 特許番号参照 50
8 特許申請書類 100
9 特許発送書類 100
10 特許拒絶理由通知書 100
11 特許引用文献情報 50
12 特許登録情報 200
以上で一通りの流れを説明しました。実際に使えるものにするためには以下の実装が必要かと思います。今後の課題ですね。
○ 商用データベースよりも情報は早いのでは無いかと思うーリアルタイム性
× アクセス件数が1日300件の制限あり
○ 商用データベースでは取得できない情報をダウンロードできる
× 取得情報がzip で、解凍後のテキストファイルがxmlなので取得後加工プログラム必要
特許庁APIについては試行段階であることから、まだ十分に活用できるほどの機能が揃っておらず、制限も多いと思います。
特許庁情報室にこうした課題と要望を伝えて改善を図ってもらえるよう働きかけていきたいです。
具体的には私としては以下が課題と感じました。
アクセス件数が300件程度のため、分析をするほどのデータが取れない(時間がかかりすぎ
る)。jplatpatや商用データベースと取得できる情報が同じ部分が多いのでそちらを使って
ダウンロードして処理したほうが効率的
インターフェースとしてブラウザを用いて気軽に使いたいところだが、アクセス制限のため不可
特許庁APIの利用方法については公式ページと合わせて以下を参考にさせていただきました。
非常に参考になります。情報共有いただきありがとうございます。
easy_patensとしてpythonライブラリを公開されています。これを使えば自分で実装する必要はなくなります。
https://qiita.com/easypatents39/items/d069d003b52e8c87873f
https://qiita.com/easypatents39/items/b8ecae21e8b20152b1f5
youtube上で紹介されています。こちらも参考にさせていただきました。
エクセルマクロでの利用方法を解説されています
https://micasatocasa.org/jpo-api-2
https://micasatocasa.org/jpo-api-1
JpoApiClass:特許情報取得API用VBAクラス としてエクセルで利用可能なモジュールを提供しています。
これだとインターフェースもあるのでプログラムすることなく利用できます。
https://qiita.com/kenichiro_ayaki/items/12e6ef9ab1db0e513588