FuelPHPのcurlライブラリ経由でNatural Language APIにリクエストを投げてみた

この記事は  GMOアドマーケティングAdvent Calendar 2020  20日目の記事です。

こんにちは、GMOアドマーケティングのあおんたです。

自社メディアめるもでは、記事のキーワードに応じて、自動でタグ付けを行っています。
しかし正規表現による部分一致でタグづけを行っているため、精度がいまいち・・・。
形態素解析を導入したいのですが、ライブラリ導入して、設定してテストして、、の時間がない。

そこで、さくっとGoogle Natural LanguageAPIを利用して、記事中のキーワード抽出を行い、精度を向上させます。
FuelPHPを利用して、最新のGoogle Natural Languageにつないでみます。

Google Natural Language とは

Google Natural Languageとは、

  1. 特定の文章のキーワードを抽出する
  2. その文章がどんなカテゴリに当たるか解析をする
  3. その文章のポジティブ度、ネガティブ度といった感情分析

ができるツールです。

今回は1.のキーワード抽出を利用します。

工夫したところ

Google謹製のAPIクライアントライブラリは利用せず、さくっとcurlで叩いて結果を取得しましょう。
しかし、素phpのcurlライブラリは、エラーハンドリングのために何行もコードを書かなければいけません。
ここはFuelPHPのライブラリを利用して、めんどくさいエラーハンドリングはフレームワークに任せましょう。

正しい怠惰は正義です(今考えた)。

準備

GCPのサービスアカウントに対してNatural Language APIの有効化

公式ドキュメントを参考にして、利用したいプロジェクトのサービスアカウント に対して、Natural Language APIを有効にします。

gcloudコマンドも必要になるので、導入していない場合は導入してください。

curlでつながるか検証する

開発が進んでから泣きを見る前に、curlコマンドを叩いて、ネットワーク的につながるか、レスポンスはどれくらいで返ってくるか、確認しましょう。

あ、料金の見積もりも忘れずに。 😉

公式ドキュメントの「コマンドライン」というタブにサンプルコードが載っています。

よくあるミス

こんなエラーが出た場合、

下記を実行したターミナルとは別ウィンドウで実行していませんか?

別シェルとなるので、都度exportして環境変数を設定してください。cronで実行する時も別シェルとなるので、cron中などで設定してくださいね。

下記のようなリクエストが返ってくれば成功です。

 

FuelPHPで実装

curlコマンドを利用してリクエストできることが確認できたので、いよいよFuelPHP経由でリクエストを投げる実装をしていきます。

こちらは記事取り込みバッチの中で実装しています。

ネットワーク起因など何かしらの理由で接続に失敗しても、記事の取り込み自体は継続したいので、例外が発生してもスローせずログだけ出力します。
(スローするとバッチの実行そのものが終了してしまうため)

素phpのcurlライブラリだと、httpステータスコードをみたり、エラーかどうかのフラグを見たりしないといけないのでかなり楽になりました。
(その場合の実装方法はこちらのページが参考になります)

まとめ

今回はFuelPHPのcurlライブラリ経由で、Natural Language APIにリクエストを投げる方法を紹介しました。いかがだったでしょうか。

明日は、ytpcasさんによる「UiPathでSalesforceの特定の項目を更新する。」です。

引き続き、GMOアドマーケティングAdvent Calendar 2020をお楽しみください!

■エンジニア採用ページ ~福利厚生や各種制度のご案内はこちら~
https://www.gmo-ap.jp/engineer/

■noteページ ~ブログや採用、イベント情報を公開中!~
https://note.gmo-ap.jp/