「すきなばしょ」でtwitter上に表記されている画像を各サービスから取得するためにURLについて調べていた。
多くのサービスが、URLを簡単に作って画像のパスをひろえるようなので、メモ。
※引用元があるのだけど、危険サイトに指定されていたため、リンクの貼るのをやめました。

* Twitpic (ドキュメント)

o ページ: http://twitpic.com/<image-id>
o サムネイル画像: http://twitpic.com/show/<size>/<image-id>
+ <size>: “mini” or “thumb”
* 携帯百景
o ページ: http://movapic.com/<image-id>
o サムネイル画像: http://image.movapic.com/pic/<size>_<image-id>.jpeg
+ <size>: “s” or “t”
* はてなフォトライフ
o ページ: http://f.hatena.ne.jp/<user-id>/YYYYMMDD<image-id>
o サムネイル画像:http://img.f.hatena.ne.jp/images/fotolife/<user-idの1文字目>/<user-id>/YYYYMMDD/YYYYMMDD<image-id>_<size>.jpg
+ <size>: “120″ or “m”
* Mobypicture (API ドキュメント)
o ページ: http://moby.to/<image-id>
o サムネイル画像: http://mobypicture.com/?<image-id>:<size>
+ <size>: “thumbnail”, “small”, “square” or “medium”
* yFrog (ドキュメント)
o ページ: http://yfrog.com/<image-id>
o サムネイル画像: http://yfrog.com/<image-id>.th.jpg
* PhotoShare
o 短縮URL: http://bctiny.com/p<image-noのbase36>
o ページ: http://www.bcphotoshare.com/photos/<user-id?>/<image-no>
o サムネイル画像: http://images.bcphotoshare.com/storages/<image-no>/<size>.jpg
+ <size>: “thumbnail”, “large”, “thumb68″ or “thumb180″
* img.ly (ドキュメント)
o ページ: http://img.ly/<image-id>
o サムネイル画像: http://img.ly/show/<size>/<image-id>
+ <size>: “thumb” or “mini”
* Twitgoo (ドキュメント)
o ページ: http://twitgoo.com/<image-id>
o サムネイル画像: http://twitgoo.com/show/<size>/<image-id>
o サムネイル画像: http://twitgoo.com/<image-id>/<size>
+ <size>: “thumb”, “mini” or “img”
* pic.im (ドキュメント)
o ページ: http://pic.im/<image-id>
o サムネイル画像: http://pic.im/website/thumbnail/<image-id>
* YouTube (ドキュメント)
o 短縮URL: http://youtu.be/<video-id>
o ページ: http://www.youtube.com/watch?v=<video-id>
o ページ: http://www.youtube.com/watch#!v=<video-id>
o サムネイル画像: http://i.ytimg.com/vi/<video-id>/<size>.jpg
+ <size>: “default”, or “hqdefault”
* imgur
o ページ: http://imgur.com/<image-id>.jpg
o サムネイル画像: http://i.imgur.com/<image-id><size>.jpg
+ <size>: “s” or “l”
* TweetPhoto (ドキュメント)
o ページ: http://tweetphoto.com/<photo-no>
o サムネイル画像:  http://TweetPhotoAPI.com/api/TPAPI.svc/imagefromurl?size=<size>&url=<ページURL>
+ <size>: “thumbnail”, “medium” or “big”
* Ow.ly
o ページ: http://ow.ly/i/<image-id>
o サムネイル画像:  http://static.ow.ly/photos/thumb/<image-id>.jpg

短縮 URL の展開や API の利用が必要なもの

* flickr (ドキュメント)
o 短縮URL: http://flic.kr/p/<base58-photo-id>
* brightkite (ドキュメント)
o 短縮URL:  http://bkite.com/XXXX
o ページ: http://brightkite.com/objects/<image-id>
o サムネイル画像: http://cdn.brightkite.com/<image-idの先頭2文字>/<image-idの3-4文字目>/<image-id>-<size>.jpg
+ <size>: “feed” or “big”

PHPソースコード例
(flickr, brightkite の短縮 URL には未対応)


function getThumbnailHtml($status_text) {
 $html = '';
 $patterns = array(
 // twitpic
 array('/http:\/\/twitpic[.]com\/(\w+)/', '<img src="http://twitpic.com/show/thumb/$1" width="150" height="150" />'),

 // Mobypicture
 array('/http:\/\/moby[.]to\/(\w+)/', '<img src="http://mobypicture.com/?$1:small" />'),

 // yFrog
 array('/http:\/\/yfrog[.]com\/(\w+)/', '<img src="http://yfrog.com/$1.th.jpg" />'),

 // 携帯百景
 array('/http:\/\/movapic[.]com\/pic\/(\w+)/', '<img src="http://image.movapic.com/pic/s_$1.jpeg" />'),

 // はてなフォトライフ
 array('/http:\/\/f[.]hatena[.]ne[.]jp\/(([\w\-])[\w\-]+)\/((\d{8})\d+)/', '<img src="http://img.f.hatena.ne.jp/images/fotolife/$2/$1/$4/$3_120.jpg" />'),

 // PhotoShare
 array('/http:\/\/(?:www[.])?bcphotoshare[.]com\/photos\/\d+\/(\d+)/', '<img src="http://images.bcphotoshare.com/storages/$1/thumb180.jpg" width="180" height="180" />'),

 // PhotoShare の短縮 URL
 array('/http:\/\/bctiny[.]com\/p(\w+)/e', '\'<img src="http://images.bcphotoshare.com/storages/\' . base_convert("$1", 36, 10) . \'/thumb180.jpg" width="180" height="180" />\''),

 // img.ly
 array('/http:\/\/img[.]ly\/(\w+)/', '<img src="http://img.ly/show/thumb/$1" width="150" height="150" />'),

 // brightkite
 array('/http:\/\/brightkite[.]com\/objects\/((\w{2})(\w{2})\w+)/', '<img src="http://cdn.brightkite.com/$2/$3/$1-feed.jpg" />'),

 // Twitgoo
 array('/http:\/\/twitgoo[.]com\/(\w+)/', '<img src="http://twitgoo.com/$1/mini" />'),

 // pic.im
 array('/http:\/\/pic[.]im\/(\w+)/', '<img src="http://pic.im/website/thumbnail/$1" />'),

 // youtube
 array('/http:\/\/(?:www[.]youtube[.]com\/watch(?:\?|#!)v=|youtu[.]be\/)([\w\-]+)(?:[-_.!~*\'()a-zA-Z0-9;\/?:@&=+$,%#]*)/', '<img src="http://i.ytimg.com/vi/$1/hqdefault.jpg" width="240" height="180" />'),

 // imgur
 array('/http:\/\/imgur[.]com\/(\w+)[.]jpg/', '<img src="http://i.imgur.com/$1l.jpg" />'),

 // TweetPhoto
 array('/http:\/\/tweetphoto[.]com\/\d+/', '<img src="http://TweetPhotoAPI.com/api/TPAPI.svc/imagefromurl?size=medium&url=$0" />'),

 // Ow.ly
 array('/http:\/\/ow[.]ly\/i\/(\w+)/', '<img src="http://static.ow.ly/photos/thumb/$1.jpg" width="100" height="100" />'),
 );

 foreach ($patterns as $pattern) {
 if (preg_match($pattern[0], $status_text, $matches)) {
 $url = $matches[0];
 $html = preg_replace($pattern[0], $pattern[1], $url);
 $html = '<a href="' . $url . '" target="_blank">' . $html . '</a>';
 break;
 }
 }

 return $html;
}

関連記事