本篇文章更新時間:2021/06/21
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣 或 新台幣 贊助支持。
Flickr 近期的操作都讓人擔心他的雲端相簿服務岌岌可危,也一直都沒好好改版,強化操作體驗。
乾脆趁這次有空來處理備份!
這功能在帳號後台 頁面下方可以請求,點下申請按鈕後,一天內會處理好發信給你。到後台就可以看到上面的下載連結。
不過,抓下來後才是整理地獄的開始!
他給檔案的方式就是全部扁平化不分目錄的所有照片一起給,隨後附上的是一堆 JSON 檔案,其中 photo-*.json
這類型檔案記錄每一個對應照片的 Meta 中繼資料,包含照片 EXIF 資訊和 Flickr 上的標籤、分類資訊。
要想快速整理的話勢必要寫程式來處理了!
我的作法比較客製化,下方整理了一份大眾化版本的程式。
首先,將下方程式儲存為 flickr.php
', '|', ' ');
return str_replace($except, '_', $name);
}
function mkdir_p($dirName, $rights = 0777) {
$dirs = explode('/', $dirName);
$dir = '';
foreach ($dirs as $part) {
$dir .= filename_safe($part) . '/';
if (!is_dir($dir) && strlen($dir) > 0) {
mkdir($dir, $rights);
}
}
}
$count_single_album_files = 0;
foreach (glob('Flickr/photo_*.json') as $json) {
$data = json_decode(file_get_contents($json), true);
$media_file_path = "";
$media_file_count = 0;
$media_place_folder = "";
$json_filename = basename($json);
foreach (glob('Flickr/*' . $data['id'] . '*.{jpg,mp4,png,avi,gif,mov}', GLOB_BRACE) as $media) {
$media_file_path = $media;
$media_file_count += 1;
}
if ($media_file_count >= 2) {
//重複 ID ,先暫停,觀察看看
print_r("Oops!" . PHP_EOL);
print_r($data);
exit;
}
$media_filename = basename($media_file_path);
// 不屬於任何相簿的話,使用拍照年作為相簿
if (empty($data['albums']) && $data['date_taken'] != "") {
$date_time = date_parse_from_format('Y-m-d H:i:s', $data['date_taken']);
$year = $date_time['year'];
if ($date_time['error_count'] == 0 && $year != "") {
$media_place_folder = 'Flickr/' . $year;
if (!is_dir($media_place_folder)) {
mkdir_p($media_place_folder);
}
rename('Flickr/' . $media_filename, $media_place_folder . '/' . $media_filename);
rename('Flickr/' . $json_filename, $media_place_folder . '/' . $json_filename);
$count_single_album_files += 1;
print_r($data['id'] . " -> 完成!( " . $count_single_album_files . " )" . PHP_EOL);
}
} else {
//有相簿的話,抓最長名稱也應該算是最有意義的相簿名稱吧(!?)
$album_name = ""; //找最長的相簿名稱
foreach ($data['albums'] as $key => $album) {
if (mb_strlen($album['title']) > mb_strlen($album_name)) {
$album_name = $album['title'];
}
}
$media_place_folder = 'Flickr/' . filename_safe($album_name);
if (!is_dir($media_place_folder)) {
mkdir_p($media_place_folder);
}
rename('Flickr/' . $media_filename, $media_place_folder . '/' . $media_filename);
rename('Flickr/' . $json_filename, $media_place_folder . '/' . $json_filename);
$count_single_album_files += 1;
print_r($data['id'] . " -> 完成!( " . $count_single_album_files . " )" . PHP_EOL);
}
}
再來把 Flickr 上抓來的打包 zip 檔案都解壓縮到 Flickr
資料夾中。
此時 flickr.php
程式檔案與 Flickr
目錄同一層,如下所示。
flickr.php
Flickr/
確保作業系統環境可以執行 PHP 指令,輸入 php -f flickr.php
開始做整理,檔案越多執行越久,需要耐心等待~ 跑完就「應該」完成啦!
等到了 XDD
哈哈 原本還真的想偷懶不發的XDD
我是很小心眼的人,我已經排程你沒發的話會通知你喔。
Alex Lion 還好我發了! 一段被 Alex 激勵的故事 哈
根據劉若英所言,我等你,半年為期…
有跟到學習有推,謝謝大大無私分享~
"跑完就「應該」完成啦!" 耐人尋味,等實作看會怎麼樣。
試試看~
請問是在甚麼環境下執行: php -f flickr.php
可以在瀏覽器執行 php -f flickr.php 嗎?
Hi!如果你的環境是在伺服器下的話才可以改由瀏覽器存取指令的作法。 不過不建議這樣操作,會有執行上 timeout 與環境相關的問題。
畢竟把 PHP 的程式當一個後端運作的應用程式和網站程式,還是有些使用上的不同。
感謝您的迅速回覆及指導!
超級感謝的。
不然我真的不知道怎麼面對要去重新設目錄以及把一萬九千多個檔案完整歸類…..