台湾特許庁の API を使ってみる(台湾域内編)

2024/08/16 にAPI関連のURLが変更になりました。
(2024/9/29編集)

各国・地域の特許庁が運営する API を紹介するシリーズです。
台湾特許庁は域内のデータを持つ twpat とグローバルデータを扱う GPSS という web サービスを行っていますが、API サーバーもこの2つに分かれています。
そこで今回はtwpat の API サービスを紹介し、次回は GPSS の API サービスを紹介します。

台湾域内のデータ を扱う API のページはこちらです。台湾では特許と実用新案を合わせて専利と呼んでいます。ページ名は、専利、商標のオープンデータをダウンロードする web サイト(意訳)です。

專利商標開放資料下載網站-首頁 (tipo.gov.tw)


API キーの取得方法

上記 專利商標開放資料下載 のページの右下の方に API 驗證碼申請書 という文字があります。その右の DOCX ボタンを押しましょう。すると Microsoft Word 形式の申請書ファイルをダウンロードできます。

API 申請書へのリンク

申請書ファイルを開いたら、用戶(自然人/公司/機構)名稱全名:のところに、任意のアカウント名を付けます。所属が個人なら 自然人に丸を付けます。会社なら 公司 に丸を付け、部門に 知識產權部門 などと所属を書きます。
軟體產品用途、時程及效益簡述(必填) とは、ソフトウエアの用途、スケジュール、効果ということです。必須項目です。簡単に書きましょう。
申請書ができたら、ipoid@tipo.gov.tw 宛に、API驗證碼申請というタイトルで申請書を添付したメールを送信します。
智慧局資訊室より返信のメールが届きましたら、その中に 檢附驗證碼如下:に続いてAPIキーが記載されています。

API の説明書(繁体字中国語)はこちらのリンクにあります。
それでは公開公報の検索をしてみましょう。

公開公報検索:發明公開案(API PatentPub)

台湾域内のデータを扱う API サービスでは、キーワード検索ができるのは発明の名称(中・英)だけですが、キーワードを除くと番号系はもちろん、公報発行期間を区切ったり、IPCをクラス単位、サブクラス単位で指定したりと細かく指定できます。
レスポンスには詳細な書誌事項と、公開公報や明細書の画像(または XML)へのリンクが含まれます。リンク先の取得については後述します。

API PatentPub のURLは次の行に示す形式です。
https://cloud.tipo.gov.tw/S220/opdataapi/api/PatentPub?&tk={}&format={}&noticebdate={}&noticeedate={}&applnamec={}&orderby={}&top={}&skip={}

tk は APIキーです。
format は count(件数をテキスト形式で取得)、json(結果を json 形式で取得)、xml(結果を XML 形式で取得)の3種類です。
top は取得する件数、skip は除外する件数です。1001番目から100件取得する場合は、top=100&skip=1000 と指定します。
まず、2017年(民国106年)12月の公開公報を先頭から100件 XML 形式で取得する方法です。

import requests

tk = '****************'
path = 'https://cloud.tipo.gov.tw/S220/opdataapi/api/PatentPub'
format_='XML'
noticebdate = '20171201'
noticeedate = '20171231'
orderby = 'notice-no'
top = '100'
skip = '0'

url = '{}?&tk={}&format={}&noticebdate={}&noticeedate={}&applnamec={}&orderby={}&top={}&skip={}'.format(path, tk, format_, noticebdate, noticeedate, orderby, top, skip)
response = requests.get(url)

XMLを解析して、出願番号、公開番号、公開日、IPC、発明の名称(中文)、出願人(中文)を取り出します。

from bs4 import BeautifulSoup

soup = BeautifulSoup(response.text, 'html.parser')

[[item.find('appl-no').text, item.find('notice-no').text, item.find('notice-date').text,  
  [ipc.text for ipc in item.find_all('ipc-full')], 
  item.find('patent-name-chinese').text, 
  [applicant.text for applicant in item.find('applicants').find_all('chinese-name')]
  ]
 for item in soup.find_all('patentcontent')]
[['106116713', '201740814', '2017/12/01', ['A23F3/36', 'A23F5/20'], '吸附咖啡因之材料、吸附咖啡因之系統、去咖啡因之系統及自溶液中去除咖啡因之相關方法', ['美商迪卡提諾股份有限公司']],
 ['105115636', '201740815', '2017/12/01', ['A23J3/14'], '大米蛋白製備方法', ['倪秉豪']],
 ['106111987', '201740816', '2017/12/01', ['A23K20/105', 'A23K20/158', 'A23K20/168'], '動物飼料添加劑及其使用方法', ['南韓商基敏股份有限公司', '尹寬植']],
 ・・・
]

IPC や 出願人は複数記録されていますが、item.find() では筆頭のみの取得になります。全部取得するときには find_all() を用います。詳細は BeautifulSoup find_all() で検索ください。

json 形式では階層を正しく記述する必要がありますが、次のようにして取り出すことができます(IPC と出願人をすべて取り出すパターン)。

import json

d = json.loads(response.text)

[[item['application-reference']['appl-no'], 
  item['publication-reference']['notice-no'], 
  item['publication-reference']['notice-date'], 
  [ipc['ipc-full'] for ipc in item['classification-ipc']], 
  item['patent-title']['patent-name-chinese'], 
  [parties['chinese-name'] for parties in item['parties']['applicants']]
 ]
 for item in d['tw-patent-pub']['patentcontent']]
[['106116713', 201740814, '2017/12/01', ['A23F3/36', 'A23F5/20'], '吸附咖啡因之材料、吸附咖啡因之系統、去咖啡因之系統及自溶液中去除咖啡因之相關方法', ['美商迪卡提諾股份有限公司']],
 ['105115636', 201740815, '2017/12/01', ['A23J3/14'], '大米蛋白製備方法', ['倪秉豪']],
 ['106111987', 201740816, '2017/12/01', ['A23K20/105', 'A23K20/158', 'A23K20/168'], '動物飼料添加劑及其使用方法', ['南韓商基敏股份有限公司', '尹寬植']],
 ・・・
]

リンク先の取得(FTP)

公報の画像や XML のリンクの一例を示します。

"link": {
          "patentpubregxmla-url": "ftps://ftp.tipo.gov.tw/ftp/PatentPubRegXMLA_015023/106105951.xml",
          "inventionpubmtiff-url": "ftps://ftp.tipo.gov.tw/ftp/InventionPubMTIFF_015023/201740796.tif",
          "inventionpubxml-url": "ftps://ftp.tipo.gov.tw/ftp/InventionPubXML_015023/1523201740796/106105951-A0304.xml",
          "patentpubregmtiff-url": "ftps://ftp.tipo.gov.tw/ftp/PatentPubRegMTIFF_015023/106105951.tif"
        }

リンク先のサーバーは SSL/TLS で暗号化した FTP が使われています。リンク先ファイルの取得方法として、台湾特許庁では FileZilla の例が紹介されています。
上記の例で 106105951.xml を取得してみます。
FileZilla を起動したら ホスト(H): に ftp.tipo.gov.tw/ と入力して クイック接続 ボタンを押します。

ftp サーバーへの接続

次に リモートサイト: の欄に /ftp/PatentPubRegXMLA_015023 を入力します。すると自動でフォルダを検索します。

フォルダの検索

次にフォルダのリストから目的のファイルを探します(Ctrl+F で検索可)。
右ボタンクリックして、ダウンロード を選択するとファイルがダウンロードされます。ダウンロード先は ローカルサイト: で指定しておきます。

ファイルのダウンロード

2018年(民国107年)1月からは、公報明細書の XML が収録されています。公報番号が分かれば、ftp を使うことで効率よくデータを取り出すことができます。

簡単に情報を得ることもできます

台湾特許庁が提供するAPIは webAPI なので、
先ほどのURL
https://cloud.tipo.gov.tw/S220/opdataapi/api/PatentPub?&tk={}&format={}&noticebdate={}&noticeedate={}&applnamec={}&orderby={}&top={}&skip={}
をブラウザのURL入力に貼り付けると結果が返ってきます。

PatentPub に tk, format (json), 出願番号を与えたときの結果

これを見ながらデータの取り出し方を検討することが可能です。

API 15種の紹介

專利申請案IPC/LOC及第1申請人國籍資訊 出願時の特許・意匠分類と筆頭出願の国籍を返却する
發明公開案 特許公開情報を返却する
專利權狀態異動資料(發明/新型/設計) 特許ステータス情報を返却する
專利優先權案 優先権情報を返却する
專利分割案 特許分割情報を返却する
專利改請案 出願番号の新旧対照を返却する
專利一案兩請關聯案件 特実出願対照を返却する
專利案件讓與紀錄 特許の譲渡記録を返却する
專利案件年費繳納紀錄 特許年金納付記録を返却する
商標申請案圖庫資料 商標出願の画像を返却する
商標註冊申請案 商標出願情報(画像のリンクを含む)を返却する
商標權狀態異動資料 商標ステータス情報を返却する
商標註冊案移轉紀錄 商標の譲渡記録を返却する
商標註冊案分割紀錄 商標登録の分割記録を返却する
商標案優先權資料 商標出願の優先権記録を返却する

ステータスデータは 專利權狀態異動資料 PatentRights というAPIで提供されています。次回の年金納付期限や権利消滅理由(5桁の数字ですが)などが含まれます。
年金納付記録は 專利案件年費繳納紀錄 PatentAnnuity で提供されています。
分割出願は 專利分割案 PatentDivide で提供されています。

次回は台湾特許庁が提供する GPSS (Global Patent Search System) データベースに基づく API サービスを紹介します。

アジア特許情報研究会 西尾 潤