魅族雲相冊批量下載方案


 

 

 

2015年開始使用魅族手機,16G存儲,當時應該是很普遍的配置,以為平時不玩游戲也夠用。

2017年因為打王者太卡了,換了另外一台CPU和內存更高的魅族,64G存儲。后面用到2020年,華為被老M欺負(可能還是覺得打王者有點不順暢),轉支持華為。

手機廠商一般都為相冊提供了雲存儲功能,每次拍完照片都會自動上傳到雲存儲,非常方便,每隔幾個月清理一下手機空間即可,為此還連續幾年購買了雲空間容量年套餐。

然將近6年拍攝了近百G的照片和視頻(這6年也正是伴隨芊芊和芊弟弟,每個瞬間都有記錄),后面發現沒辦法下載下來了。

魅族雲存儲通過手機無法直接下載整個目錄(手機空間不夠),登錄WEB后台只能一張一張的選擇下載,就是個雞肋。

等了好幾年都不見優化這個功能,無奈只能寫個腳本自己搞定。

魅族是使用的阿里雲OSS(對象存儲),本身阿里雲提供了多種語言的SDK,調用對應接口即可,沒啥技術難度。

這里分享一個思路(小白略過,直接按下面步驟做即可):

  • 先調用魅族的接口,拿到相冊和所有照片、視頻信息(主要是拿到下載地址);

  • 然后根據Flyme雲服務的接口拿到請求阿里雲OSS接口所需的tokenkey信息,例如: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腳本)。

啟動MySQL1),然后選擇”數據庫“(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'所有照片已下載完畢!


(三、問題)


  1. 如果重復執行出現OSS.php signUrl的問題,需要清空.alioss_sigin文件內容,然后再次執行命令;

  2. 如果出現大量關閉流的問題,可以中斷執行,然后再次重復執行即可(這里一般是下載的時候token過期了,導致下載不到文件);

  3. 這里有幾個超時場景需要注意一下,方便處理問題:

    1. 阿里雲存儲token超時(默認有1小時),將導致上面第2個問題;

    2. 數據庫超時,這里主要是MySQL端會超時關閉鏈接,這里要么改成短鏈接(每次建立連接)、要么修改my.ini配置interactive_timeoutwait_timeout都設置足夠大;

  4. 下載完后注意核對文件數,如果不一致可能是上面問題2導致的,只需要把數據重置一下即可,數據庫執行下面腳本。

    update task.`dy_mz_album`setlocal = ''


- end -

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM