SlackのURL展開をgoでやってみた。
- SlackのAppを作成
- Socket-modeを有効にする(まだWebhookは作ってないので)
- Event Subscriptionsで「App unfurl domains」を選んでよしなにドメインを追加
- Twitter videoを展開する場合は、
twitter.com
/x.com
だけでなくvideo.twimg.com
も追加する。 - その上で、環境変数
UNFURL_TWITTER_VIDEO
に何かしらの値を設定。
- Twitter videoを展開する場合は、
- OAuth & PermissionsでBot Tokenに
links:write
を追加links:read
は「App unfurl domains」した際に追加されるっぽい。- Twitter Videoを展開する場合は
links.embed:write
も必要。忘れると展開時にcannot_parse_attachment
と出る。
- 環境変数
SLACK_BOT_TOKEN
とSLACK_APP_TOKEN
によしなにトークンを設定する。 - Twitter APIで展開する場合は以下の設定を追加
- ブラウザでログインした際にCookieへセットされた
auth_token
をいくつか取得してTWITTER_AUTH_TOKENS_FROM_BROWSER
にカンマ区切りで設定する。- この値は1年間有効の模様。
- 念のために日頃使ってるアカウントの値は使わないほうがいいでしょう。
TWITTER_GUEST_API_ID
とTWITTER_LOGIN_API_ID
を設定- 非ログイン状態でTweetを表示する際
TweetResultByRestId
を呼び出すURIのうちID部分をTWITTER_GUEST_API_ID
に設定https://twitter.com/i/api/graphql/0hWvDhmW8YQ-S_ib3azIrw/TweetResultByRestId?variables(以下略)
のとき0hWvDhmW8YQ-S_ib3azIrw
の部分
- ログイン状態でユーザプロファイルを表示する際に
UserByScreenName
を呼び出すURIのうちID部分をTWITTER_LOGIN_API_ID
に設定https://twitter.com/i/api/graphql/G3KGOASz96M-Qu0nwmGXNg/UserByScreenName(以下略)
のとき、G3KGOASz96M-Qu0nwmGXNg
の部分
- どうやら時々変わる様子。
- 非ログイン状態でTweetを表示する際
- API呼び出しでの展開に失敗する場合 or 設定がない場合は埋め込みTweet展開を試します。このときNSFW Tweetは展開できません。
- ブラウザでログインした際にCookieへセットされた
- 起動
参照元の負荷を下げるため、LRUで128件キャッシュします。
Twitterの展開は、埋め込みTweetを取得する方法とAPI経由する方法の2つを使っています。それぞれpros/consがあるので、お好みに応じて設定してください。
- pros
- token不要
- 複数の動画が添付されたTweetに対応
- cons
- NSFW Tweet非対応
- 全く存在しないものとする扱いをする
- NSFW TweetをQTしたTweetを展開する場合も、QTしたNSFW Tweetが全く存在しないとみなすので存在すらわからない。
- NSFW Tweet非対応
- pros
- NSFW Tweet対応
- RT数も取れる
- 現状は展開していません
- cons
auth_token
が必要- rate limitがある
go 1.20
- webhook
MIT
walkure at 3pf.jp