2015年開始使用魅族手機,16G存儲,當時應該是很普遍的配置,以為平時不玩游戲也夠用。
2017年因為打王者太卡了,換了另外一台CPU和內存更高的魅族,64G存儲。后面用到2020年,華為被老M欺負(可能還是覺得打王者有點不順暢),轉支持華為。
手機廠商一般都為相冊提供了雲存儲功能,每次拍完照片都會自動上傳到雲存儲,非常方便,每隔幾個月清理一下手機空間即可,為此還連續幾年購買了雲空間容量年套餐。
然將近6年拍攝了近百G的照片和視頻(這6年也正是伴隨芊芊和芊弟弟,每個瞬間都有記錄),后面發現沒辦法下載下來了。
魅族雲存儲通過手機無法直接下載整個目錄(手機空間不夠),登錄WEB后台只能一張一張的選擇下載,就是個雞肋。
等了好幾年都不見優化這個功能,無奈只能寫個腳本自己搞定。
魅族是使用的阿里雲OSS(對象存儲),本身阿里雲提供了多種語言的SDK,調用對應接口即可,沒啥技術難度。
這里分享一個思路(小白略過,直接按下面步驟做即可):
-
先調用魅族的接口,拿到相冊和所有照片、視頻信息(主要是拿到下載地址);
-
然后根據Flyme雲服務的接口拿到請求阿里雲OSS接口所需的token和key信息,例如:https://mzstorage.meizu.com/file/get_sig接口,這里不作細述,感興趣的可以看腳本。
-
最后是直接調用阿里雲SDK下載照片和視頻。
本來想寫個通用程序,然后做個Docker鏡像,方便一些小白使用,但是這玩意價值不大(有人付費就有價值,哈哈),懶得折騰了,還是寫個教程吧(主要對象是小白)。
下面教程是基於我提供的腳本來編寫(腳本是github上找的,做了一些修改),理論上跟着步驟往下走是沒啥大問題,如有什么問題可以直接留言。
(一、環境准備)
首先下載腳本包到本地電腦任意目錄解壓,建議直接放到某盤根目錄。
github地址:https://github.com/SeanXiao1207/mzstorage
然后進入mzstorage-master解壓目錄,能看到如下文件列表
此時可以看到腳本是使用PHP寫的,so 我們要准備一個PHP環境。
這里推薦一個傻瓜式的PHP開發環境,直接下載安裝就有一整套PHP+MySQL+Nginx/Apache等環境的操作面板,非常方便。
下載地址:https://www.xp.cn/download.html
進入地址后直接選擇“立即下載”即可,然后解壓運行安裝程序完成安裝。
打開軟件,可以看到這里有很多操作選項,我們只需要用到MySQL(存儲相冊和照片、視頻信息),然后就是配置PHP運行環境(運行PHP腳本)。
啟動MySQL(1),然后選擇”數據庫“(2),選擇”修改root密碼“為123456。
需要執行SQL腳本,選擇數據庫工具”打開“(3),選擇”SQL-Front“,如果提示沒有安裝,只需要按照提示去”軟件管理“中選擇”安裝“即可。
然后再打開(3),選擇”SQL-Front“,打開后輸入root/123456登錄,然后在"SQL編輯器"中復制執行下面執行下面腳本。
CREATE DATABASE IF NOT EXISTS task; # 創建圖片記錄表
CREATE TABLE task.`dy_mz_album` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '記錄id', `album_id` int(10) unsigned DEFAULT '0' COMMENT '照片id', `dirId` int(10) unsigned DEFAULT '0' COMMENT '相冊id', `dirName` varchar(64) DEFAULT NULL COMMENT '相冊名稱', `fileName` varchar(255) DEFAULT NULL COMMENT '照片名稱', `groupDirId` varchar(64) DEFAULT NULL, `groupId` varchar(64) DEFAULT NULL, `height` int(10) unsigned DEFAULT '0' COMMENT '照片高度', `width` int(10) unsigned DEFAULT '0' COMMENT '照片寬度', `isVideo` tinyint(3) unsigned DEFAULT NULL COMMENT '是否視頻', `md5` varchar(64) DEFAULT NULL COMMENT '文件md5', `createTime` bigint(13) unsigned DEFAULT NULL COMMENT '創建時間', `modifyTime` bigint(13) unsigned DEFAULT NULL COMMENT '修改時間', `remainTrashTime` bigint(13) unsigned DEFAULT NULL, `shootTime` bigint(13) unsigned DEFAULT NULL, `size` bigint(20) DEFAULT NULL, `sqlNow` bigint(13) unsigned DEFAULT NULL COMMENT '最后查詢時間', `tags` varchar(255) DEFAULT NULL COMMENT '標簽', `thumb256` varchar(255) DEFAULT NULL COMMENT '縮略圖', `thumb1024` varchar(255) DEFAULT NULL COMMENT '縮略圖', `uid` varchar(10) DEFAULT NULL COMMENT 'uid', `userId` int(10) unsigned DEFAULT NULL, `url` varchar(255) DEFAULT NULL COMMENT '圖片路徑', `local` varchar(255) DEFAULT '' COMMENT '本地路徑(代表是否已下載)', `status` int(2) unsigned DEFAULT NULL COMMENT '狀態', `create_time` datetime DEFAULT NULL COMMENT '上傳時間', `update_time` datetime DEFAULT NULL COMMENT '采集時間', `is_delted` tinyint(1) unsigned DEFAULT '0' COMMENT '是否被刪除', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3500 DEFAULT CHARSET=utf8mb4; # 創建相冊表 CREATE TABLE task.`dy_mz_dir` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增id', `dir_id` int(10) unsigned DEFAULT '0' COMMENT '相冊id', `dirName` varchar(64) DEFAULT NULL COMMENT '相冊名稱', `fileNum` int(10) unsigned DEFAULT '0' COMMENT '相冊數量', `icon` varchar(255) DEFAULT '' COMMENT '縮略圖', `sqlNow` bigint(13) unsigned DEFAULT '0' COMMENT '最后一次查詢時間', `modifyTime` bigint(13) unsigned DEFAULT '0' COMMENT '最后修改時間', `createTime` bigint(13) unsigned DEFAULT '0' COMMENT '相冊創建時間', `userId` int(10) unsigned DEFAULT '0' COMMENT '用戶id', `totalSize` bigint(20) DEFAULT NULL COMMENT '相冊總大小', `status` tinyint(2) unsigned DEFAULT NULL COMMENT '相冊狀態', `create_time` datetime DEFAULT NULL COMMENT '上傳時間', `update_time` datetime DEFAULT NULL COMMENT '采集時間', `is_delted` tinyint(1) unsigned DEFAULT '0' COMMENT '是否被刪除', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8mb4 COMMENT='魅族相冊表';
如果不想用默認的密碼和端口,可以在解壓目錄config.php配置文件中修改,默認不要動這里。
然后就是配置PHP環境,PHP環境只需要配置一個環境變量即可。
打開命令提示符(cmd),執行下面命令就可以完成PHP環境變量設置,注意下面%path%;后面部分是PHP所在目錄,注意你的phpstudy是在C盤還是D盤,一般只需要修改盤符即可。
setxpath "%path%;C:\phpstudy_pro\Extensions\php\php7.3.4nts"
至此,配置工作已經完成了。
(二、執行腳本)
在cmd進入腳本所在目錄,執行拉取相冊命令,因為照片和視頻信息是需要通過相冊ID來獲取。
K:\Users\15814\Downloads\mzstorage-master>php dir.php [MSG] 用戶信息驗證失敗 [ERROR] TOKEN失效,請更新token!> 刷新flyme雲服務的相冊頁面,復制獲取token的js方法到Console窗口下獲取token,並更新到token文件中。 [INPUT] 請輸入新的Token:
如上,執行php dir.php后會提示需要更新token,登錄flyme雲相冊。
登錄flyme雲相冊:https://photos.flyme.cn/photo/index
然后在瀏覽器中按F12,選擇Console,執行下面腳本獲取token。
function getCookie(name){var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");if(arr=document.cookie.match(reg)){return unescape(arr[2])}else{return null}}getCookie("_utoken");
直接將這一串紅色字符串粘到上面提示輸入新token的命令行中,會看到相冊列表出來了。
K:\Users\15814\Downloads\mzstorage-master>php dir.php [NOTICE]Token 已更新。 -------------------id 相冊名稱------------------- 圖片收藏 2張
-------------------請輸入: 'php album.php 277' 進行采集相冊更新成功!
然后根據相冊ID拉取每個相冊的照片和視頻信息,拉取相冊列表:php album.php
K:\Users\15814\Downloads\mzstorage-master>php album.php 請選擇相冊: -------------------id相冊名稱------------------- 277 圖片收藏 -------------------請輸入: 'php album.php 277' 進行采集
拉取對應相冊:php album.php 277
K:\Users\15814\Downloads\mzstorage-master>php album.php 277相冊拉取:2/2 張更新完成!
最后就是下載照片和視頻:php down.php
K:\Users\15814\Downloads\mzstorage-master>php down.php 更新OSS簽名!當前目錄中, 文件K:\Users\15814\Downloads\mzstorage-master\down\圖片收藏\4d852e2268ac5bfb2bed974ee645c7a6.jpg存在1 [SUCCESS] '05/41/84/65/054184657650dea606b6ddfea2ca98ae.jpg'當前目錄中,文件K:\Users\15814\Downloads\mzstorage-master\down\圖片收藏\6d653be354c137f9ed14917001b110e9.jpg存在1 [SUCCESS] '1c/10/57/56/1c105756c68afd67abbee6ba00d9bc66.jpg'所有照片已下載完畢!
(三、問題)
-
如果重復執行出現OSS.php signUrl的問題,需要清空.alioss_sigin文件內容,然后再次執行命令;
-
如果出現大量關閉流的問題,可以中斷執行,然后再次重復執行即可(這里一般是下載的時候token過期了,導致下載不到文件);
-
這里有幾個超時場景需要注意一下,方便處理問題:
-
阿里雲存儲token超時(默認有1小時),將導致上面第2個問題;
-
數據庫超時,這里主要是MySQL端會超時關閉鏈接,這里要么改成短鏈接(每次建立連接)、要么修改my.ini配置interactive_timeout和wait_timeout都設置足夠大;
-
-
下載完后注意核對文件數,如果不一致可能是上面問題2導致的,只需要把數據重置一下即可,數據庫執行下面腳本。
update task.`dy_mz_album`setlocal = ''
- end -