Google Apps ScriptでYahooキーフレーズ抽出APIを使う【GAS】

Yahoo Developerは、まだREST APIと呼ばれる前の時代から、マッシュアップという言葉とともに色々なWebAPIを提供してきました。その中で「キーフレーズ抽出API」というものがあるのですが、日本語形態素解析APIのように、1文の中で特徴的な単語を取り出してくれる非常に便利なAPIです。

既にV1が2022年1月末日に廃止されているため、現在はV2のみ利用可能なので、このAPIをGoogle Apps Scriptから叩いてみようと思います。

今回使用するスプレッドシート

事前準備

アプリケーションIDを取得する

アプリケーションID(一般には、Client IDのこと)を取得する必要があります。以下の手順で取得しましょう。もちろん、事前にYahoo IDを取得してログインしておく必要があります。

  1. こちらのサイトにアクセスする
  2. 登録は適当でOK。ID連携の利用は利用する、属性取得APIは利用しない、アプリの種類はサーバーサイド利用、あとは個人で住所やアプリ名、ウェブサイトのURLを入れる
  3. 最後に一番下の更新ボタンを押せば、Client IDおよびSecretが取得出来ます(但し、Secretは使用しません)
  4. このClient IDがアプリケーションIDに該当します。

図:アプリのIDが必要になります

リクエスト制限

YahooのAPIはリクエスト上限がかなり緩めです。基本的には「1アプリIDごとに1日50000リクエストまで」。また、非商用利用に限られるということになっています。

この2つの制限を守って利用することになります。

コードとレスポンス

ソースコード

Pythonのサンプルコードだけが掲示されているという、非常に不親切なAPIであり、尚且、User-Agentをヘッダに含めるというオカシナ形態をしているのですが、実はパラメーター方式でAPPIDを渡しても使えるので、Google Apps Scriptでも叩けます。

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で送信します。

レスポンスデータ

{
  "id": "1234-1",
  "jsonrpc": "2.0",
  "result": {
    "phrases": [
      {
        "score": 100,
        "text": "東京ミッドタウン"
      },
      {
        "score": 73,
        "text": "国立新美術館"
      },
      {
        "score": 37,
        "text": "5分"
      }
    ]
  }
}
  • idは自分でリクエスト時にセットしたものがそのまま返ってきます。
  • 元文章から重要度をscoreで分類し、取り出したフレーズがtextとして複数に分割されて返ってきます。
  • 日本語の文章からこれらフレーズを取り出せる事によって、それを元に検索して返すといった事が可能になるため、AlexaやGoogleアシスタントと組み合わせると面白いかもしれません。

図:無事に取得する事ができました。

関連リンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)