1. TOPTOP
  2. Webサービス
  3. Twitter

Twitter REST API 1.1でつぶやきに添付された複数画像を取得する方法。extended_entitiesの使い方について。

|

Twitter_logo_blue

TwitterAPIの仕様上、つぶやきに添付された画像は、複数取得することができます。

しかし、単数の画像は取得することができましたが、複数画像はどうやって取得すればいいのか分からず、かなり悩んでいました。

個人的な希望で、何としても複数画像を取得したいので、詳しい方にオフラインでアドバイスを頂きました。

単数画像を取得するコードと複数画像を取得するコード

とりあえず先に結論となるコードを示しておきましょう。

単数画像を取得するときのコード

<img src="<?php echo $tweet->entities->media[0]->media_url; ?>

複数画像を取得するときのコード

   <?php if (is_array($tweet->extended_entities->media)) { ?>
        <?php foreach($tweet->extended_entities->media as $key => $media) { ?>
            <?php if (isset($tweet->extended_entities->media[$key])) { ?>
            <img src="<?php echo $tweet->extended_entities->media[$key]->media_url; ?><?php echo ':thumb';?>"></br>
            <?php }  ?>
        <?php } ?>
   <?php } ?>

コードの比較

単数画像を取得するときと比べて、複数画像を取得するときは、ずいぶんと複雑になっていますね。比較のポイントは4つあります。

1.entitiesとextended_entities

オブジェクト形式で取り出した、$tweetの次の階層が両者で異なります。単数のときはentitiesで、複数のときは、extended_entitiesです。後者で”extended”という名前がついているのは、「拡張した」という意味なんでしょう。

2.配列の値変数とキー変数の設定

そもそも単数画像を取得するときは、配列の中身は1つしかありません。従ってキー値はおのずと[0]だけになります。

一方、複数の画像のときは、配列の中身は複数あります。値変数($media)をキー変数($key)に入れて、”media_url”を複数取り出せるようにする必要があります。そのため、繰り返し構文のforeach文でくくります。

3.isset関数による配列定義の検査

imgタグのsrc属性で、media_urlを出力する前に、if文の中で、isset関数で条件文を設定しています。

これは、”$tweet->extended_entities->media[$key]”が、配列であるかどうかをチェックするためのものです。

もし配列の中身がなかったときに、isset関数がなければ、エラー”Warning”が返されます。isset関数でチェックをかけておくと、配列の中身がなくても(null値)、falseが返されるだけになります。

4.is_array関数による配列の検査

さらにforeach文による繰り返しを実行する前に、”$tweet->extended_entities->media”の、”media”が配列であるかどうかをチェックします。is_array関数による配列の検査がないと、次のようなエラーが表示されます。

Warning: Invalid argument supplied for foreach() in..

複数画像の出力

ここまでの説明で複数画像を出力するとこんな感じになります。画像のサイズは”thumb(150m×150m)”にしています。

extended_entities

他に取り出せる画像のサイズは、”medium”,”small”,”large”があります。

〔参考サイト〕