PyDrive備份教學
最近買了台Raspberry Pi,因為讀寫都是在SD卡上面,所以很怕哪天SD卡突然掛了,裡面的資料就都沒了,上網找了這個方法,但用的人似乎很少 ,就來寫我人生中的第一篇電腦教學文!!
此方法是使用Google釋出的API 所以要先去 APIs console 建立專案
如果是第一次使用 會先跳出使用介紹 這個別理他 ((好啦 大家都知道
先點選右上角的 "選取專案" -> "建立專案"
建立後 應該會直接跳轉到資料庫的畫面
此時透過搜尋列搜尋 "Drive API" 接著啟用它
點選 左側 "憑證" 後 選取"OAuth同意畫面"
只需在 " 向使用者顯示的產品名稱 " 輸入即可儲存
接著建立憑證 選取 "OAuth 用戶端ID"
類型務必選擇 "其他" 這樣可以用的範圍比較廣
接著右邊有個下載符號 下載完放到要執行的資料夾內
並重新命名為 client_secrets.json
安裝pyDrive 可以透過指令
會安裝到最新版本 但是遇到大檔上傳時會有內存溢出問題
因此建議可以安裝舊版
裝完後 沒問題就可以開始寫程式了
先建立一個"quickstart.py" 的檔案 (檔名可以隨便取)
並貼上下面指令: (詳細請參考: http://pythonhosted.org/PyDrive/quickstart.html)
使用
透過瀏覽器查看這個網址 這時可以用任何google帳號登入 之後可看到請求權限驗證畫面
點選後會有授權碼 把它複製到 terminal 裡面即可完成上傳("若當初是選擇網路應用程式 會看不到授權碼")
若要是自動驗證
需在資料夾內建立一個
並貼上下面指令: (詳細請參考 http://pythonhosted.org/PyDrive/oauth.html )
其中 將 client_id 與 client_secret 改成自己的 可以從下載的.json檔中看到
保存後 再次執行 quickstart.py檔
這次手動輸入授權碼後,往後就都不用再輸入了
若是想要上傳檔案 可以這樣寫
在建立檔案時 id 的地方就是雲端硬碟裡面的資料夾id 可以在點進該資料夾時 查看網址
https://drive.google.com/drive/u/0/folders/1B4GktyQzQmZDRYTHYDUpW
大概就是這樣看
還有 在 SetContentFile 時 可以使用相對位置去抓檔
之後 使用crontab 就可以設定排程自動備份了
不懂的話可以自行去看鳥哥 就不再這邊說明了
補充:
讀者或許會發現PyDrive document 裡面是用 gauth.LocalWebserverAuth()
而不是 gauth.CommandLineAuth()
這樣的話 就不用輸入授權碼了 但是只限定從 local 主機上使用
因為文件上提到
預設就是 localhost 的 8080 8090 port
應該可以透過更改host_name去達到這功能
但是我沒有成功= =ˋ 不論是透過ip或是domain name
所以這對於遠端操作者可能會比較不便
若是選擇 "網路應用程式" 的讀者 可能也會遇到授權的問題
因為官方文件寫說 JavaScript 來源 跟 重新導向 URL都寫 http://loaclhost:8080/
但是我並不能成功
我是使用 JavaScript 來源 http://localhost:8080
重新導向 URI http://localhost:8090/ 才成功的 我也不知道為甚麼 功力太弱QQ
開始
此方法是使用Google釋出的API 所以要先去 APIs console 建立專案
如果是第一次使用 會先跳出使用介紹 這個別理他 ((好啦 大家都知道
先點選右上角的 "選取專案" -> "建立專案"
建立後 應該會直接跳轉到資料庫的畫面
此時透過搜尋列搜尋 "Drive API" 接著啟用它
點選 左側 "憑證" 後 選取"OAuth同意畫面"
只需在 " 向使用者顯示的產品名稱 " 輸入即可儲存
接著建立憑證 選取 "OAuth 用戶端ID"
類型務必選擇 "其他" 這樣可以用的範圍比較廣
接著右邊有個下載符號 下載完放到要執行的資料夾內
並重新命名為 client_secrets.json
安裝pyDrive 可以透過指令
$ pip install pydrive
會安裝到最新版本 但是遇到大檔上傳時會有內存溢出問題
因此建議可以安裝舊版
$ pip install -e git+https://github.com/googledrive/PyDrive.git#egg=PyDrive
裝完後 沒問題就可以開始寫程式了
先建立一個"quickstart.py" 的檔案 (檔名可以隨便取)
並貼上下面指令: (詳細請參考: http://pythonhosted.org/PyDrive/quickstart.html)
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
gauth = GoogleAuth()
gauth.CommandLineAuth() #透過授權碼認證
drive = GoogleDrive(gauth)
file1 = drive.CreateFile({'title': 'Hello.txt'}) # 建立檔案
file1.SetContentString('Hello World!') # 編輯檔案內容
file1.Upload() #檔案上傳
使用
$ python quickstart.py
執行該檔案後,會有連結跑出來透過瀏覽器查看這個網址 這時可以用任何google帳號登入 之後可看到請求權限驗證畫面
點選後會有授權碼 把它複製到 terminal 裡面即可完成上傳("若當初是選擇網路應用程式 會看不到授權碼")
若要是自動驗證
需在資料夾內建立一個
settings.yaml
文件 (請記得settings有s 害我多花了30分鐘找問題@@)並貼上下面指令: (詳細請參考 http://pythonhosted.org/PyDrive/oauth.html )
client_config_backend: settings
client_config:
client_id: 9637341109347.apps.googleusercontent.com
client_secret: psDskOoWr1P602PXRTHi
save_credentials: True
save_credentials_backend: file
save_credentials_file: credentials.json
get_refresh_token: True
oauth_scope:
- https://www.googleapis.com/auth/drive.file
- https://www.googleapis.com/auth/drive.install
其中 將 client_id 與 client_secret 改成自己的 可以從下載的.json檔中看到
保存後 再次執行 quickstart.py檔
這次手動輸入授權碼後,往後就都不用再輸入了
若是想要上傳檔案 可以這樣寫
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
gauth = GoogleAuth()
gauth.CommandLineAuth() #透過授權碼認證
drive = GoogleDrive(gauth)
try:
file1 = drive.CreateFile({"title":'Hello.txt',"parents": [{"kind": "drive#fileLink", "id": "1B4GktyQzQmZDRYTHYDUpW"}]})
file1.SetContentFile('../mail.py')
file1.Upload() #檔案上傳
print "Uploading succeeded!"
except:
print "Uploading failed."
在建立檔案時 id 的地方就是雲端硬碟裡面的資料夾id 可以在點進該資料夾時 查看網址
https://drive.google.com/drive/u/0/folders/1B4GktyQzQmZDRYTHYDUpW
大概就是這樣看
還有 在 SetContentFile 時 可以使用相對位置去抓檔
之後 使用crontab 就可以設定排程自動備份了
不懂的話可以自行去看鳥哥 就不再這邊說明了
補充:
讀者或許會發現PyDrive document 裡面是用 gauth.LocalWebserverAuth()
而不是 gauth.CommandLineAuth()
這樣的話 就不用輸入授權碼了 但是只限定從 local 主機上使用
因為文件上提到
LocalWebserverAuth(host_name='localhost', port_numbers=[8080, 8090])
預設就是 localhost 的 8080 8090 port
應該可以透過更改host_name去達到這功能
但是我沒有成功= =ˋ 不論是透過ip或是domain name
所以這對於遠端操作者可能會比較不便
若是選擇 "網路應用程式" 的讀者 可能也會遇到授權的問題
因為官方文件寫說 JavaScript 來源 跟 重新導向 URL都寫 http://loaclhost:8080/
但是我並不能成功
我是使用 JavaScript 來源 http://localhost:8080
重新導向 URI http://localhost:8090/ 才成功的 我也不知道為甚麼 功力太弱QQ
留言
張貼留言