Creazy!

WEBエンジニア・ヤガーのテック・ガジェットブログ

PHP 小技集

picplzから自分の全写真データを一括ダウンロードするPHPスクリプト

投稿日:


【2012/06/05:追記】
ブラウザだけで完結するバックアップツールを公開しました。こちらもご確認ください。
picplzの全投稿サマリーを統計してバックアップできる「thx!picplz」を作りました

picplz_yager
iPhoneでのカメラアプリとしてはすでに定番化しているinstagr.amがありますが、なにしろAndroid版がありませんし、PC版でも写真を見るだけしかできずユーザー毎の一覧ページもないほどの思い切りぶりです。で、Androidユーザ的にはpicplzを使っているのですが、instagr.amのようなトイカメラフィルターもありますしTwitter/Facebook/Tumblrなどへのマルチポストにも対応していて機能的には全く引けを取らないどころか凌駕していると感じています。
で、周りにはユーザーちょこちょこいるのに意外とpicplzに関するエントリー見かけないので、機能説明してベタ褒めする記事でも書こうとも思ったのですが、いきなり横道それまして・・・
オンラインサービスなので、基本画像データはクラウドにあるわけですが、印刷とかしたい場合はやっぱり手元にデータ欲しいわけです。で、ちょっと写真の印刷をしたくて(具体的にはTOLOTなんだけどこれはまた別の機会に…)picplzにUPしたデータ145枚を一括ダウンロードしてみることにしました。


最近のWEBサービス・APPは大体APIを公開しているのでいいね!
picplz API
特定ユーザの写真を取得するにはData APIの中の「user」Methodを使って、「include_pics=1」パラメータを付けて取るのがよさそうです。一応全件取得を目指すのでページネーションも気になりますが、Paginationを参考にしてください。
下記のようなPHPスクリプトを「export_picplz.php」とかで名前をつけて見ました。
「SAVE_DIR」に画像をダウンロードしたいディレクトリ、「USERNAME」に自分(というかダウンロードしたい対象)のアカウント名を書き換えてください。Macで実行していますが、SAVE_DIRをよしなに書けばWindowsでも動くんじゃないかと。

<?php
/**
* picplzから全写真をエクスポートする
*/
// 設定
define( 'SAVE_DIR',      '/Users/yager/Pictures/picplz/');
define( 'USERNAME',      'yager');
define( 'PIC_PAGE_SIZE', 100); // max 240?
define('API',
'http://api.picplz.com/api/v2/user.json'
.'?username='.USERNAME
.'&include_pics=1'
.'&pic_formats=1024r'
.'&pic_page_size='.PIC_PAGE_SIZE
);
$counter = 1;
function fetch_picplz( $last_pic_id=null ) {
global $counter;
$api_url = API;
if ( !empty($last_pic_id) ) {
$api_url .= '&last_pic_id='.$last_pic_id;
}
//------------------------------------------------------------
// json fetch
//------------------------------------------------------------
if ( !$json_file = file_get_contents($api_url) ) {
die('[ERROR] cant fetch json file.');
}
if ( !$json = json_decode($json_file,true) ) {
die('[ERROR] cant decode json file.');
}
if ( $json['result'] != 'ok' ) {
die('[ERROR] api format error.');
}
//------------------------------------------------------------
// json fetch
//------------------------------------------------------------
$user = $json['value']['users'][0];
foreach ( $user['pics'] as $i => $pic ) {
$img_url = $pic['pic_files']['1024r']['img_url'];
echo $counter++.'/'.$user['pic_count']."\n";
echo $pic['id'].' '.$img_url."\n";
$img = file_get_contents($img_url);
// save
$f = fopen(SAVE_DIR.$pic['id'].'.jpg', 'wb');
fwrite($f, $img);
fclose($f);
}
// pagenate
if ( $user['more_pics'] == true ) {
fetch_picplz( $user['last_pic_id'] );
}
}
// Start
fetch_picplz();

で、ターミナルとかで実行。

$ php export_picplz.php

picplz_download
とれたー!!
ちなみに、ローカルに保存するので一番大きいサイズをと思ったんですが、Image Format Syntaxをみると1024r(長辺1024px)が最高なんですね。まあ、instagr.amよりはましか。
あと、ページネーションで1回に取得する枚数を指定する「pic_page_size」のMAX値がよく分からん。ドキュメントに書いてないし、240回なんて情報もあったけど、300くらいは一度に取れました(このスクリプトではなんとなく100枚ずつにしてる)。
むー、スクリプトじゃあまり需要がないかな…WEBサービスにしろとか言われそうw
ともかく、欲しい人いたらどうぞ。

-PHP, 小技集

執筆者:

関連記事

表紙で探すプログラマーっぽい写真

ブログデザイン勉強会 第3回を経て、このブログを的確に表現できる写真選びを進めています。が、ハッキリ言っていままで撮りためているストックの中には無いんじゃないかと思っています。ボクがよくカメラを向ける …

有名ブログのアクセス解析と比較して、自分のブログの特性を知る

2008年の総括はすでにエントリーしたのですが、ユルカン PC Lifeで[N]ネタフルさんのアクセス解析情報(Google Analytics)が公開されていたので、自分のとこと比較してみようと思い …

ハイビジョン映像(AVCHD)を記録するとMTSファイルになって扱いにくいのでffmpegでmp4に変換

手持ちのビデオ撮影機材が予算の関係で中古で購入したミラーレス一眼(GF1、GF3、GX1、なぜか全てPanasonic LUMIX)なんですが、高画質で録画しようとするとAVCHDのMTSファイルにな …

第11回:引用(blockquote)を簡単にするブックマークレット

前に書いたリンクタグを生成するブックマークレットにも関連するんだけど、ブログを書く上で頻繁に行う引用の手順を簡単にしてくれるブックマークレットを作ってみようと思う。 通常は、引用するサイトの「URL」 …

[N]ネタフル x [S]シカマケ = ブログデザイン勉強会 第4回:最終回でラフ案発表

昨日の4/23(木)、ついに最終回を迎えた「[N]ネタフル x [S]シカマケ = ブログデザイン勉強会」に参加してきました。 ▼前回まではこちら、 ・[N]ネタフル x [S]シカマケ = ブログデ …

スポンサードリンク

スポンサードリンク