Twitterのプロフィール画像のImage URLのドメインが「a0.twimg.com」から「pbs.twimg.com」に変更

1.31
2014

twitter1_140131

Twitterのプロフィール画像のImage URLのサブドメインが変更されました。
されました、というか、結構前から変わっています。

旧URL: http://a0.twimg.com/profile_images/*****/*****.JPG (a0の部分は、a2だったり複数あります。)
  ↓
新URL: http://pbs.twimg.com/profile_images/*****/*****.JPG (サブドメがpbsに固定になりました)

例えばAPIを経由してTwitterユーザーのプロフィールデータを取得しているサービスやアプリケーションは、一度ユーザーのプロフィールイメージを取得したら、そのままDBに入れてしまうことが多いと思います。
その場合、前述のとおりURLが変わったことで画像が表示されなくなっている恐れがあります。

この現象ですが、実はAPIで取得されるImage URLのドメインが変わったのは、結構前のようです。
個人的に確認したところ、2013年10月24日付近を境に、それまではa0.twimg.comだったImage URLがpbs.twimg.comに変わっていました。

何故現在まで問題にならなかったのかというと、10/24以降も古いURLへのアクセスが可能だったためです。
そして、どうやら最近になってこの古いURLが使えなくなりました。

調べてみたところ、Twitterのdeveloper掲示板で以下のようなやり取りが。

twitter2_140131

ユーザー「おいTwitter、プロフィール画像のImage URLのドメイン変えただろ!」
Twitter「うん、変えたよ!documentも更新したからよろしく!」
ユーザー「お、おう。ありがとう・・・。」

更新したというdocsを見てみますと。

User Profile Images and Banners | Twitter Developers

確かに、Example URLが変わっています。
掲示板の書き込み日時やdocsの更新日時を見る限り、どうやら古いURLが完全に死んだのは2014年1月27日のようです?

ここで1つ注意したいのは、docsの以下の記載です。

Default profile images
Some users may not have uploaded a profile image yet. ~省略~
The profile_image_url and profile_image_url_https URLs provided for users in this case will indicate which “egg” the user has been assigned, such as http://a0.twimg.com/sticky/default_profile_images/default_profile_6_normal.png.

プロフィール画像を設定していないユーザーの「egg(たまご)アイコン」は、ドメインがa0.twimg.comのままなのです。
データを一括で変換するような際には、ご注意ください。
ドメイン以下のディレクトリ名等が通常のプロフアイコンとは規則が異なるので、変換の際にやりようはあるはず。

そんなわけで一括変換を試みたい方、毎度お馴染み「Stackoverflow」に以下の投稿がありましたので、ご参考まで。

Ruby regex to change old -> new Twitter image urls – Stack Overflow

質問者「TwitterのImageURLを新しいものに書き換える正規表現を教えろください!」
回答者「ほらよ。 

<img src="<%= userlist.image_url.sub('://a0','://pbs').sub('normal', 'bigger') %>">