今回は本文に添付されている、画像の保存と縮小作業について。Twitter APIの画像は、http://pbs.twimg….jpgというURLで、PHPの練習としてよく使われている、画像掲示板のjpgとは違うところがあります。
両者の相違点
実務としては、よくある画像掲示板のつくり方は、ドットインストールのレッスンが参考になります。しかし両者には大きな違いがあり、レッスンの通りにはできません。
Twitter APIの画像を追加する場合
- 元画像の位置 → Twitterのサーバ上にある
- 画像の保存 → 専用URLを文字列としてデータベース上に格納する
- 画像縮小のタイミング → PHPから当該データを取り出したて表示されたとき
よくある画像掲示板画像をUPする場合
- 元画像の位置 → クライアントPCにある
- 画像の保存 → jpg形式のファイルを自分のサーバーの画像専用フォルダにいれる
- 画像縮小のタイミング → PHPで画像が格納されているカラムがfetchされたとき
画像の保存
Twitter APIの画像は、0~4枚の画像を取得することができます。
ステータスID、スクリーンネーム、ツイート本文、ツイート日時などはツイート1つに対して、取得するデータが一つしかなく、データベースのカラムを簡単に割り当てることができます。
ステータスID、スクリーンネーム、ツイート本文、ツイート日時
イメージ的にはこんな感じでしょう。指定された変数に、パラメーターをバインドしたときの様子です
[php]
$stmt->bindParam(":tw_id", $tw_id);
$stmt->bindParam(":tw_screen", $tw_screen);
$stmt->bindParam(":tw_date", $tw_date);
$stmt->bindParam(":tw_txt", $tw_txt);
$tw_id = $tweet->id;
$tw_screen = $tweet->user->screen_name;
$tw_date = date(‘Y-m-d H:i:s’, strtotime($tweet->created_at));
$tw_txt = $tweet->text;
[/php]
画像URL
一方、ツイートに添付されている画像をバインドするときの様子です。
[php]
$stmt->bindParam(":tw_img0", $tw_img[0]);
$stmt->bindParam(":tw_img1", $tw_img[1]);
$stmt->bindParam(":tw_img2", $tw_img[2]);
$stmt->bindParam(":tw_img3", $tw_img[3]);
if (is_array($tweet->extended_entities->media)) {
foreach($tweet->extended_entities->media as $key => $media) {
if (isset($tweet->extended_entities->media[$key])) {
$tw_img[key] = $tweet->extended_entities->media[$key]->media_url;
}
// カラムの列番号が固定的な割に、表示される画像と対応させる方法がわからない
}
}
[/php]
11行目のコメントアウトにもありますが、カラムの列番号が固定で決められている割には、foreachで取り出される、専用URLは繰り返し表示させる必要があります。
bindParamもforeachの中で使うのかなぁ?
画像縮小のタイミング
これもTwittert APIと、よくある画像掲示板では、縮小のタイミングが異なります。後者では、画像を専用フォルダにアップロードをするときに縮小をかけます。
一方、後者ではデータベースからURLの文字列を呼び出すだけなので、ファイルを加工するというタイミングが分かりません。
これも、詳しい方に聞いてみることにしましょう。
〔参考サイト〕
- PHPで作る「画像掲示板」 (全18回) – プログラミングならドットインストール
- PHP: PDOStatement::bindParam – Manual
- Entities in Objects | Twitter Developers
、