SwarmでのチェックインをX/Twitterに投稿するWebアプリを作成した

X/Twitter APIの仕様が変更されてから、SwarmでチェックインしてもX/Twitterに連携されなくなりました。

本現象について、一向に修正される様子がないため、勉強がてら自分で連携アプリを作ることにしました。

全体像

以下を参考にさせていただきました。
zenn.dev
zenn.dev

仕様

  • チェックイン時にFoursquareからWebhookを受け取り、X/Twitterに投稿する。
  • コメントの有無に関わらず、投稿内容は以下とする。
    I'm at [場所名] in [住所]
    [共有URL]
  • X/Twitterに画像は投稿しない。(※そのうち対応するかも)
  • 共有ボタンを押さずにチェックインした場合、X/Twitterに投稿しない。
  • Webアプリは自宅のサーバに配置する。

実装

1. アクセストークンの取得とAPI操作

X/Twitter

連携したいX/Twitterアカウントで 開発者アカウント に登録し、開発者用のアクセストークンを取得します。
API操作には twitteroauth を利用します。

Foursquare

まず、Foursquare Developer Console に登録し、OAuth認証のための設定をします。
次に、ドキュメント を参考に、WebアプリからOAuth認証(認可)を開始し、アクセストークンを取得します。
API操作にはライブラリを利用しません。

2. 機密情報(アクセストークン等)の管理

以下を参考に、phpdotenv を利用するため、機密情報は .env ファイルに格納します。
qiita.com

3. Webhookの受け取り

Foursquare Developer Console 上で、Webhookの受け取り先(URL)を設定します。
Webhookの内容は ドキュメント を参考にします。

4. 投稿内容の作成

Webhookの内容だけではX/Twitterに投稿する内容が作成できないため、必要に応じてFoursquare APIを呼び出します。
今回必要な情報は、チェックインの詳細を取得するAPI で取得できるため、本APIを利用します。

なお、共有用URLですが、Swarmが正しく連携されていた頃までは https://www.swarmapp.com/c/*** と短い形式でしたが、
APIで取得できるのは https://www.swarmapp.com/[ユーザ名]/checkin/[チェックインID]?s=*** とかなり長い形式となっています。
旧形式のURLを取得できないか調べてみましたが、今のところ方法は無さそうでした。まぁ長くても実質問題はないのですが...

また、https://www.swarmapp.com/[ユーザ名]/checkin/[チェックインID] がチェックインのオリジナルのURLなので、
?s=*** の部分は無くても良いのでは?と思うかもしれませんが、これが無いと他のユーザが閲覧できないため注意してください。

成果物

GitHubに公開しています。ご参考まで。
github.com