Download file dari Google Drive dengan Python
Terkait dengan artikel sebelumnya tentang
bagaimana membuat Service Account
di akun Google Cloud Platform, kali ini kita akan mencoba
implementasinya dalam sebuah program sederhana namun berguna dalam keseluruhan project kita
tentang ID Card.
Program ini hanya memiliki satu fungsi yaitu mendownload file Google Datasheet
serta mengkonversi
menjadi file berformat Microsoft Excel
(xlsx). Service Account yang kita buat sebelumnya,
berfungsi agar script yang kita jalankan tidak akan meminta kita untuk memasukkan username serta
password setiap kali dijalankan. Sebagai gantinya, agar file kita yang berada di dalam Google
Drive tetap aman dan tidak bisa diakses oleh sembarang orang, dibutuhkan mekanisme tersendiri.
Dan mekanisme tersebut melibatkan Service Account
beserta Access Key
berupa file berformat
JSON yang kita download dibagian akhir dari
artikel sebelumnya. Untuk lebih jelasnya, kita akan bedah perbagian dari scriptnya dibawah ini:
#!/usr/bin/env python3
import argparse
import os
from google.oauth2 import service_account
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
import googleapiclient.http
scriptName = os.path.basename(__file__)
scriptPath = os.path.realpath(os.path.dirname(scriptName))
assetsFolder = os.path.join(scriptPath, 'assets/')
# credentialFile and fileId kita samarkan dengan alasan keamanan
credentialFile = os.path.join(assetsFolder, 'idcard-******-************.json')
fileId = '12ZyiJ_***********************-txWsIEAnIx2Mc'
def downloadDataFromGoogleDrive(credFile, assetId, destFile):
funcName = downloadDataFromGoogleDrive.__name__
if not (os.path.isfile(credFile) and (os.path.isdir(destFile))):
print(
f"Error in {scriptName}, function: {funcName}(): File do not exist")
print(f"credentialFile: {credFile} ({os.path.isfile(credFile)})")
print(f"dataFile: {destFile} ({os.path.isfile(destFile)})")
exit(1)
# Create a service object for interacting with Google Drive API
credentials = service_account.Credentials.from_service_account_file(
credFile, scopes=['https://www.googleapis.com/auth/drive'])
service = build('drive', 'v3', credentials=credentials)
try:
# Download the file
request = service.files().export_media(
fileId=assetId,
mimeType='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
with open(destFile, 'wb') as fh:
downloader = googleapiclient.http.MediaIoBaseDownload(fh, request)
done = False
while done is False:
status, done = downloader.next_chunk()
print(f"Download {int(status.progress() * 100)}%.")
print(f'Google documents ID "{assetId}" succesfully exported and downloaded')
print(f"output file: {destFile}")
fh.close()
except HttpError as e:
print(f'An error while exporting and downloading Google docs file: {e}')
def main():
parser = argparse.ArgumentParser(scriptName)
parser.add_argument("-o", "--output", default="RegistrasiMember.xlsx",
help="save downloaded file as filename. Default to RegistrasiMember.xlsx")
args = parser.parse_args()
dataFile = os.path.join(scriptPath, args.output)
try:
downloadDataFromGoogleDrive(credentialFile, fileId, dataFile)
except Exception as e:
print(f"Error: download failed ({e})")
exit(1)
if __name__ == "__main__":
main()
Seperti biasa, untuk menjalankan script ini, terlebih dulu kita harus mengaktifkan
Virtual Environment
python dengan cara:
$ source .venv/bin/activate
$ ./downloadFromGoogleDrive.py <== sesuai nama file script
(output yang dihasilkan serupa dengan berikut:)
Download 100%.
Google documents ID "12ZyiJ_***********************-txWsIEAnIx2Mc" succesfully exported and downloaded
output file: /root/source/IDCard/RegistrasiMember.xlsx
parameter penting disini yaitu credentialFile
dan fileId
. untuk credentialFile adalah file
Access Key
yang kita jelaskan sebelumnya, sedangkan untuk fileId adalah identitas file unik
dari file yang berada di google drive yang akan kita download. Untuk mendapatkan fileId ini caranya
cukup mudah. Cukup buka file yang bersangkutan dalam sebuah browser, kemudian perhatikan pada
alamat URL
yang ada pada window browser, maka akan terlihat sebuah alamat URL
serupa berikut:
https://docs.google.com/spreadsheets/d/<fileId>/edit?pli=1#gid=********
pada bagian <fileId>
itulah identitas file unik yang akan kita gunakan.
Nah, sampai disini sekiranya cukup jelas bagaimana cara kerja script yang kita buat. Selanjutnya
script ini tinggal kita integrasikan dengan fungsionalitas project IDCard kita yang lain untuk
membentuk sebuah sistem yang komplit untuk mengelola database member beserta halaman profil
tiap member yang ditampilkan di website https://sif.my.id
by: @adymulianto