ingen084's blog

前のブログが何故か落ちちゃったので。

チャットツールに貼ったときだけ画像になるURL

  • ingen084
  • 2018/12/14 22:15
  • コメントなし

5年ぐらい前から自宅鯖でGyazoを運営しています。


こんな感じ。

画像が埋め込みで表示されるのは助かりますが、いちいちタイトルなどが表示されるのはとてもうざい状態でした。

ここで本家Gyazoの画像データを直接参照した際の動きを見てみましょう。

チャットツールなどで貼り付けると画像として処理されますが、ブラウザからアクセスするとHTMLが帰ってきます。

これを同じような形で、チャットツールにURLを貼り付けると画像がレスポンスとして返されるようにしてみたいと思います。
UserAgentにbotが含まれていたら画像データを返すようにします。
それだけです。嘘です。

この対策を行ったところ、Slackなどでは正常に引用することができるようになりました。
ですが、Discordでは正常に引用することができません。(💩マークが出てくる…)
開発者ツールで確認したところ、415エラーが発生していました。(Unsupported Media Type)
もしやと思いURLを確認したところ、Discordでの引用画像はDiscordのURLを通してDiscord側が毎回リクエストを投げてくるようです。(Slackなどでは一度画像がキャッシュされたらそれを使い回す)
そして一番の問題はその取得してくる際のUserAgentが

Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:38.0) Gecko/20100101 Firefox/38.0

なことです。(どうしてこうなった…)

こんな綺麗なUAもかなり少ないので、このUAと完全一致する場合も画像を返すようにすると正しく動作するようになりました。
めでたしめでたし。

この記事に対するコメント

コメントを残す