- blogs:
- cles::blog

画像への直リンを Twitter Cards に対応させる


サイトはしばらく前に Twitter Cards に対応させたので、エントリへのリンク ( https://blog.cles.jp/item/7854 ) をツイートに貼ると概要が TL に表示される状態になっていましたが、最近ちょっと気になっていたのは画像へのリンクです。
画像のリンクはそれ自体が HTML ではないため Twitter Cards に対応させることができませんが、今回はそれをちょっとした工夫で乗り切ってみたのでメモ。ちなみに Cards については3月に見直しがあり、Photo, Gallery, Product 形式については Deprecated になりました*1。
そんなわけで今回は Photo を使わずに、マイグレーション先である Summary Card with Large Image*2を使います。
まず、実装における前提ですが Twitter は TL に流れる Cards の内容をクロールするために Twitterbot という User Agent でサイトにアクセスしてくるという性質があります。これに mod_rewrite を組み合わせて、Twitterbot が画像にアクセスしてきたときだけ Twitter Cards を含んだ HTML のクッションページを返すようにしてやるという単純なものです。
以下、実装についてのメモ。
† 実装
HTML のクッションページはお手軽ということで、PHP で生成します。
今回は以下のような感じのスクリプトを用意しました。
cards_for_img.php
これを httpd.conf や .htaccess などを使って以下のようにリダイレクトしてやります。
User Agent Switcher など UA を自分で変えられる方法がある人は自分の UA を Twitterbot/1.0 などに偽装してやると画像を表示しようとするとクッションページが帰ってくるのが分かると思います。
ここで問題になるのは Twitterbot はこのままだと、画像ファイルにアクセスできないということですが、これについては Twitterbot が画像の本体を取得するときは URL の末尾に ?orig をつけることで回避します。このためのルールは RewriteCond の2行目と PHP の 24 行目の合わせ技で作り込んであります。
実際に http://blog.cles.jp/media/1/20130825-D600_018057.JPG を Card Validator で見るとこんな感じで表示することができるようになりました。
(僕はサイトの CMS と連携して、画像の description も表示するようにさらに改造したものを使っています。)
- *1: Deprecating the Photo, Gallery and Product Cards - Announcements - Twitter Developers
- *2: Summary Card with Large Image | Twitter Developers
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/7854
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(111298)
3 . 年次の人間ドックへ(110828)
4 . 2023 年分の確定申告完了!(1つめ)(110397)
5 . 三菱鉛筆がラミーを買収(110295)