Google Apps ScriptでYahooキーフレーズ抽出APIを使う【GAS】
Yahoo Developerは、まだREST APIと呼ばれる前の時代から、マッシュアップという言葉とともに色々なWebAPIを提供してきました。その中で「キーフレーズ抽出API」というものがあるのですが、日本語形態素解析APIのように、1文の中で特徴的な単語を取り出してくれる非常に便利なAPIです。
既にV1が2022年1月末日に廃止されているため、現在はV2のみ利用可能なので、このAPIをGoogle Apps Scriptから叩いてみようと思います。
リンク
今回使用するスプレッドシート
- YahooキーフレーズAPIを使う - Googleスプレッドシート
- APIドキュメント
- Webサービス by Yahoo! JAPAN
事前準備
アプリケーションIDを取得する
アプリケーションID(一般には、Client IDのこと)を取得する必要があります。以下の手順で取得しましょう。もちろん、事前にYahoo IDを取得してログインしておく必要があります。
- こちらのサイトにアクセスする
- 登録は適当でOK。ID連携の利用は利用する、属性取得APIは利用しない、アプリの種類はサーバーサイド利用、あとは個人で住所やアプリ名、ウェブサイトのURLを入れる
- 最後に一番下の更新ボタンを押せば、Client IDおよびSecretが取得出来ます(但し、Secretは使用しません)
- このClient IDがアプリケーションIDに該当します。
図:アプリのIDが必要になります
リクエスト制限
YahooのAPIはリクエスト上限がかなり緩めです。基本的には「1アプリIDごとに1日50000リクエストまで」。また、非商用利用に限られるということになっています。
この2つの制限を守って利用することになります。
コードとレスポンス
ソースコード
Pythonのサンプルコードだけが掲示されているという、非常に不親切なAPIであり、尚且、User-Agentをヘッダに含めるというオカシナ形態をしているのですが、実はパラメーター方式でAPPIDを渡しても使えるので、Google Apps Scriptでも叩けます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
var clientid = "ここにクライアントIDを入れる"; var endpoint = "https://jlp.yahooapis.jp/KeyphraseService/V2/extract?appid=" + clientid; function yahoo_phrases() { //リクエストヘッダ let headers = { "Content-Type": "application/json" } //リクエストボディ let payload = { "id": "1234-1", "jsonrpc" : "2.0", "method" : "jlp.keyphraseservice.extract", "params" : { "q" : "東京ミッドタウンから国立新美術館まで歩いて5分で着きます。" } } let options = { "headers": headers, "method" : "POST", "payload": JSON.stringify(payload), } //urlfetchでリクエスト var response = UrlFetchApp.fetch(endpoint,options); console.log(response.getContentText()); } |
- endpointのURLにパラメータ方式でappid=取得したClient IDをもってURLとして構築すれば叩く事が可能です
- リクエストボディで可変の部分は、paramsのqの部分のみ。ここに、キーフレーズを抽出する文章を入れます。
- payloadはJSON.stringifyで括ってから渡します。
- 後は、いつもどおりUrlfetchAppでリクエストを投げるだけ。POSTで送信します。
レスポンスデータ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
{ "id": "1234-1", "jsonrpc": "2.0", "result": { "phrases": [ { "score": 100, "text": "東京ミッドタウン" }, { "score": 73, "text": "国立新美術館" }, { "score": 37, "text": "5分" } ] } } |
- idは自分でリクエスト時にセットしたものがそのまま返ってきます。
- 元文章から重要度をscoreで分類し、取り出したフレーズがtextとして複数に分割されて返ってきます。
- 日本語の文章からこれらフレーズを取り出せる事によって、それを元に検索して返すといった事が可能になるため、AlexaやGoogleアシスタントと組み合わせると面白いかもしれません。
図:無事に取得する事ができました。