Twitterに投稿される画像の直リンク取得方法

Twitterに投稿される画像だけ集めたギャラリーサイトなど面白いのではないかと思い、ツイートに含まれる画像のURLを取得する方法について調べてみました。

テストがてら簡単につくったものですが、たとえば「須磨」という単語が含まれた写真付きのツイートを検索した結果はこのようになります
(´-`).。oO(夏休みですね。。。。。。)

AD

Twitter検索基本形

TwitterAPIが1.1になってからしばらくになりますが、単なる検索結果を得るためだけでも認証が必要となりました。

ツイート内に含まれる画像の直リンクを取得する

上記検索を実行の際、include_entitiesというパラメータをtrueに設定することによりツイート内に含まれるURLについての情報を追加で取得することができます。

詳しくはTweet Entitiesという公式ドキュメントを見てみてください。

画像でないURLについての情報も取得出来ますが、今回は画像に絞って見てみます。
タイムラインを見ていて画像投稿によく使われている(っぽく見える)、

・Twitter標準の画像投稿機能
・Twitpic
・ついっぷる
・フォト蔵
・Instagram

について画像URLの取得方法を調べてみました。

Twitter標準の画像アップロードの場合

外部サービスを経由せずに画像を投稿した場合、画像そのもののURLが「media_url」というキーで取得できます。
上記の検索基本形のように$obj->statusesをforeachでループした場合、以下のように取得できます。

ただ、外部の画像投稿サービスを利用した場合はmedia_urlでは取得することができません。
代表的jな画像投稿サービス別に、取得方法を調べてみました。

TwitpicのURLから画像URLを取得する

TwitPicの場合、URLの一部を置換することで画像そのもののURLが取得できます。
Twitter標準ではない画像投稿を使った場合、expanded_urlというキーにリンク先URLが入ります。ただこれは画像のURLではなく詳細ページ(という言い方でいいのでしょうか・・・)のURLですので、そのURLより画像URLを取得する必要があります。

ついっぷるのURLから画像URLを取得する

ついっぷるの場合もTwitpicと同様に、URLの一部を置換することで画像URLが取得できます。

フォト蔵のURLから画像URLを取得する

フォト蔵もほぼ同様ですが、フォト蔵の場合は写真掲載URLにはユーザーIDが含まれますが画像URLにはユーザーIDが含まれません。そのユーザーIDの部分を除く必要があります。

InstagramのURLから画像URLを取得する

InstagramはURLを単純な置換で取得することが出きず、必要ない場合でもJSONが返却されます。
そこでそのJSONをfile_get_contents→json_decodeという手順が必要です(URL取得だけならjson_decodeではなくpreg_matchなどのほうがいいような気もするが)。

AD

Share

Commentsコメント

メールアドレスは公開されません。コメントは必ずご入力ください。

HTMLタグは使用できません。ソースコードを書き込みたい場合はCodetterGistCodePenなどのご利用が便利です。

幸太郎 さんより
大変参考になりました。
ありがとうございました!
れい さんより
とても参考になりました!
ありがとうございます!

すいません、1つお伺いしてもよろしいですか?
この方法で、「Twitter標準の画像アップロードの場合」のときは、画像URL以外も拾ってしまいます。
例えばただのリンクの場合も拾ってしまいますが、
「画像」という判定はできるのでしょうか。

よろしくお願いします。
管理人 さんより
れい 様
コメントありがとうございます。

mediaというキーが入るのはTwitter標準の画像アップロードだけのはずなのですが、おかしいですね。。。

Twitter標準の画像アップロードのときは

$statuses->entities->media[0]->media_url;

で、それ以外は

$statuses->entities->urls[0]->expanded_url;

となりますが間違いはないでしょうか?