Rise Logo
top image
プログラミング
ITサービス
データ処理
2023/02/28

試行提供されている特許庁APIとは② ~pythonでの利用方法、APIの詳細~

APIの利用方法


前回では特許庁APIの概要について紹介しました。今回は具体的にpythonでの利用方法を紹介します。
また利用方法を説明しながらAPIの詳細についても紹介します。

利用方法については説明の便宜のため、エラーやイレギュラーケース、汎用性は考えていません。
第三者にサービスとして提供する場合は考慮する必要はありますが、今回の趣旨とはことなるので割愛します。

まずは利用申請

以下のページに記載の方法で申し込みます。ワードファイルでの利用申込書を作成し、
メールにて送って1週間程度で利用登録の通知が来ました。
https://www.jpo.go.jp/system/laws/sesaku/data/api-provision.html

  • 登録通知ではアクセスするURLとユーザ名、パスワードを知らせてもらえます。
  • 実際のアクセス方法、API仕様については以下を参照して実装することになります。


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

まずはアクセス用トークンを取得

  • HTTPのPOSTメソッドによりアクセス
  • 以下のパラメータにより指定のトークン取得用URLにアクセス。※印の情報は前述の登録申し込み完了時に通知されます。
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で取得できる情報

先ほどは特許経過情報について取得している例を挙げましたが、特許庁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日で取れる計算になります。

各APIの利用制限数

現状の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

pythonモジュール今後の課題

以上で一通りの流れを説明しました。実際に使えるものにするためには以下の実装が必要かと思います。今後の課題ですね。

  • 各処理をまとめてクラスにしてイニシャライズ時にusername, passwordを入力できるようにする
  • 接続の管理 最初のアクセスから時間が経過しても途切れないようにする → 接続時間の管理、リフレッシュトークンの利用、再ログイン
  • 上記のクラスに出願番号とAPIの種類を選択させる汎用メソッドの実装
  • 外部から利用できるライブラリ化
  • キャッシュの利用 1度アクセスした情報はキャッシュにより再アクセスしない(API利用では必須と指定されています)


特許庁APIの効果的な利用方法

利用方法について


  • リアルタイムの審査状況ウォッチングについては使える可能性あり

○ 商用データベースよりも情報は早いのでは無いかと思うーリアルタイム性
× アクセス件数が1日300件の制限あり

  • 審査経過情報のダウンロードツール

○ 商用データベースでは取得できない情報をダウンロードできる
× 取得情報がzip で、解凍後のテキストファイルがxmlなので取得後加工プログラム必要

今後の課題

特許庁APIについては試行段階であることから、まだ十分に活用できるほどの機能が揃っておらず、制限も多いと思います。
特許庁情報室にこうした課題と要望を伝えて改善を図ってもらえるよう働きかけていきたいです。
具体的には私としては以下が課題と感じました。

  • 分析に使いづらい

アクセス件数が300件程度のため、分析をするほどのデータが取れない(時間がかかりすぎ
る)。jplatpatや商用データベースと取得できる情報が同じ部分が多いのでそちらを使って
ダウンロードして処理したほうが効率的

  • ブラウザ(javascript)からのアクセスができない

インターフェースとしてブラウザを用いて気軽に使いたいところだが、アクセス制限のため不可

  • 問い合わせが出願番号1件であり、レスポンスも対応した情報のみで利用用途が制限される
    • 検索クエリを投げられるようにしてほしい
    • 複数の出願番号一括問い合わせ
    • 上記の問い合わせに回答を集計した情報でもらいたい
  • 特許検索には全く使えない
    • 上記と重複するが検索クエリを投げられるようにしてほしい
  • 利用できる公報情報に制限あり
    • 2003年7月以後の出願分のみ


参考URL

特許庁APIの利用方法については公式ページと合わせて以下を参考にさせていただきました。
非常に参考になります。情報共有いただきありがとうございます。

python

easy_patensとしてpythonライブラリを公開されています。これを使えば自分で実装する必要はなくなります。
https://qiita.com/easypatents39/items/d069d003b52e8c87873f
https://qiita.com/easypatents39/items/b8ecae21e8b20152b1f5

youtube上で紹介されています。こちらも参考にさせていただきました。



Excel VBA

エクセルマクロでの利用方法を解説されています
https://micasatocasa.org/jpo-api-2
https://micasatocasa.org/jpo-api-1

JpoApiClass:特許情報取得API用VBAクラス としてエクセルで利用可能なモジュールを提供しています。
これだとインターフェースもあるのでプログラムすることなく利用できます。
https://qiita.com/kenichiro_ayaki/items/12e6ef9ab1db0e513588


@2023 Rise Inc.
privacy policy