kintoneGeeks blog

kintoneに関連する情報を発信しています

X APIに課金しただけなのに

はじめに

みなさん、X APIの有料化の影響はどれくらい受けましたでしょうか?

筆者は以前動かしてたシステムを、X APIの有料化の影響で止める必要がありました・・・

この記事では、X APIの有料化の影響で止めたシステムを、X に課金することでシステムを再稼働したけれど、元の状態に戻すのに思っていたよりもめっちゃ大変で奮闘したことについて案内しています。

そもそも何を作ったのか

その昔、Xがまだ『Twitter』と呼ばれていたころ、ハッシュタグキャンペーンの投稿情報を定期的に取得してkintoneアプリに登録するシステムをPower Automateで作りました。

Power Automate でツイートをkintoneに自動登録する流れ

詳しくは下記の記事から読めます。

kintone-geeks.hatenablog.com

止まってたシステムの再稼働

Power Automate のフローではXのSearchコネクタを使っていました。X APIが有料化したら稼働しなくなることは当然予想出来たので、有料化前にフローの運用を止めました。

1年後、再稼働させたい理由が出きたので、『X APIに課金をすれば、このPower Automateのフローはスムーズに再稼働出来るんじゃないかな?』という淡い期待を持ちながら、Xに課金してシステムの再起動に挑戦することにしました。

1番安いBasicプラン($100/月)*1に課金すれば、Xのポスト情報を取得出来るようになり、システムの再稼働出来る・・・!

・・・っと思っていたのはつかの間で、課金後にすぐに問題が次々と出てきました

問題①:Power Automate の XコネクタがX API v1を使用していた

X API のFree、BasicとProのプラン*2ではAPI v2のエンドポイントしか使えなく、API v1のエンドポイントへのアクセスは提供されていません。実際にこれらのプランでPower Automate上のTwitterのアクションを動かそうとすると、エラーが返されます。

Power Automate がX のアクションを実行しようとすると返されるエラー

API v1のエンドポイントを使用する権限が無いため、Power AutomateからXへのAPIリクエストが失敗します*3

問題②:Power Automate 上でAPI v2のエンドポイントを叩く手段がお勧め出来ない方法だった

それでもどうしてもPower Automate上からXのAPIを叩きたいんだ!という人には、HTTPコネクタを使う方法があります。使うためにはXの認証情報が必要になるので、XのDeveloper Portalにログインし、Appを作成してBearer Tokenを取得します。

XのDeveloper PortalでAppを作成してBearer Tokenを取得します

Bearer TokenはPower AutomateのHTTPコネクタのHeaderに付与することで、X API v2用の認証情報として使えます。

X API v2 を使うためにBearer TokenをHTTPコネクタのヘッダーに追加します

X API v2 用のURIとメソッドも設定すれば、X API v2をPower Automateで使用することが出来ます。ただし、本来はBearer Tokenをこのような生の状態で使用するべきではないです。APIを少し試してみたい時など、限定されたシチュエーションで使い、使い終わったらXのAppのBearer Tokenを削除して新しいのを生成することをお勧めします。

問題③:X API v2のSearch APIで使用されるクエリが API v1と違っていた

HTTPのコネクタで X API v2 を使用する場合、API v1 と v2 で仕様が違うことを考慮しないといけません。

API有料化以前はPower Automateのコネクタが使えて、かつそのコネクタはAPI v1を使用していたので、Search用のクエリパラメータをわりと楽に設定することが出来ました。

X APIの有料化前はSearch APIのパラメータが設定しやすかった

HTTPのコネクタを使用する場合はこのようなX専用のインターフェースが無いので、v2 の Search API のURIを設定し、クエリ用のパラメータ一つ一つ調べて値を設定する必要があります。

API v2 に設定する検索クエリ、取得件数と検索範囲の設定

上記のリクエストの場合、下記のようなレスポンスが返ってきます。

{
  "data": [
    {
      "edit_history_tweet_ids": [
        "1731313269917552789"
      ],
      "id": "1731313269917552789",
      "text": "🎁ギョウザドン3Dモデルをプレゼント🎁\n📝アンケートに回答するとダウンロードリンクが手に入ります!\n#METAFES #kintone\nhttps://t.co/YYxmSUJgne https://t.co/7UZ5OeP1RB"
    }
  ],
  "meta": {
    "newest_id": "1731313269917552789",
    "oldest_id": "1731313269917552789",
    "result_count": 1
  }
}

そしてここでまた別の問題が発覚します。

以前のコネクタ(X API v1)では、Search APIのレスポンスにツイートのテキスト内容以外にも、ツイートのIDツイートの作成日時投稿者のID投稿者のプロフィール画像URL等の情報も返ってきていました。ですが、今回(X API v2)のレスポンスでは実質使える情報がツイートのテキスト内容とツイートIDくらいしかありません。X API v1 のSearch APIではデフォルトで多くの情報が返されましたが、v2 では返して欲しいデータをクエリで指定する必要があります。クエリを1つ1つ調べる必要があって、わりと大変です。

レスポンスに必要な情報を返してもらうためのクエリの追加

上記のパラメータ情報を入れてAPIを叩くと、ツイートに関する情報が複数含まれたポストの内容がレスポンスされます。

{
  "data": [
    {
      "created_at": "2023-12-03T14:03:44.000Z",
      "text": "🎁ギョウザドン3Dモデルをプレゼント🎁\n📝アンケートに回答するとダウンロードリンクが手に入ります!\n#METAFES #kintone\nhttps://t.co/YYxmSUJgne https://t.co/7UZ5OeP1RB",
      "id": "1731313269917552789",
      "edit_history_tweet_ids": [
        "1731313269917552789"
      ],
      "author_id": "994502160938233857"
    }
  ],
  "includes": {
    "users": [
      {
        "name": "出雲 沙斗美【いずも さとみ】",
        "id": "994502160938233857",
        "profile_image_url": "https://pbs.twimg.com/profile_images/1732719009886593024/hVO8iwI8_normal.jpg",
        "username": "satomi_izumo"
      }
    ]
  },
  "meta": {
    "newest_id": "1731313269917552789",
    "oldest_id": "1731313269917552789",
    "result_count": 1
  }
}

これでようやくPower Automateのフロー内で扱える情報が取得出来ました。

問題④:Power Automate用の式を入力してHTTPコネクタから情報を抜き出す必要があった

Power Automateで以前使ってたフローではXのコネクタを使用していたため、そのコネクタで取得した情報をGUI上で選択して次のコネクタで使用することが出来ました。

フロー上で『ツイートテキスト』や『ユーザ名』などが選択出来た

HTTPコネクタを使用している場合、同じようにGUI上で選ぶことが出来ません。ですがその代わりに、コネクタの関数フィールドに式を入力すれば、HTTPコネクタで取得した情報を使用することが出来ます。必要な式もまた、調べて設定する必要があり、大変です。

HTTPコネクタから情報を扱う場合は式を入力する必要がある

数々の困難を乗り越えて

当初、Xに課金さえすればスムーズに再稼働すると思ってたシステムですが、使用出来るAPIのエンドポイントが違っていたり、Search APIの仕様が変わっていたりで、結果的に手を入れないといけない箇所が多く出てきました。

Power Automateのフローを8割ほど作り替えたところで、やっとの思いでXで取得した情報がkintoneアプリに追加することが出来ました。

Power Automate経由でXの情報がkintoneに登録された様子

去年のシステムと同じ動きをするために、Power Automateのフローの中身を色々と変えてしまいました。これは・・・これは果たして同じシステムと呼べるのでしょうか・・・🤔

ja.wikipedia.org

まとめ

  • X APIのBasic/Pro プラン
    • API v2のエンドポイントしか使用不可
    • Power Automate上でXのコネクタは使用不可
  • Power Automate のHTTPコネクタでXのAPIを使う場合
    • Bearer Tokenの情報を生の状態で使用すれば可能
      (※あまりお勧め出来ません)
    • 取得した値を取り出すには、Power Automate独自の式を入力して情報を抜き出す必要がある
  • 以前Xのコネクタを使ってたフロー
    • ほぼ作り替えが必要になる可能性が高い

*1:2023年12月時点の情報

*2:2023年12月時点の課金プランの情報

*3:ちなみにX API のEnterpriseプランに加入している場合は、Power Automateのコネクタが使用出来る(つまりAPI v1が使える)ようです。