prehistoric.me

Membaca Data dari Google Sheet dan Mengubahnya Menjadi JSON

Saya membuat script untuk membaca berkas spreadsheet di Google Sheet, misalnya seperti ini:

Google Sheet Document

Script tersebut kemudian akan menghasilkan data JSON seperti berikut ini:

[
  { "nama": "Soekarno", "tahun_mulai": "1945", "tahun_udahan": "1967" },
  { "nama": "Suharto", "tahun_mulai": "1967", "tahun_udahan": "1998" },
  { "nama": "Habibi", "tahun_mulai": "1998", "tahun_udahan": "1999" },
  { "nama": "Megawati", "tahun_mulai": "1999", "tahun_udahan": "2004" },
  { "nama": "SBY", "tahun_mulai": "2004", "tahun_udahan": "2014" },
  { "nama": "Jokowi", "tahun_mulai": "2014", "tahun_udahan": "masih njabat" }
]

Aturannya, data JSON yang dihasilkan berupa array object, dengan baris pertama pada spreadsheet sebagai key/attribute object, kemudian baris ke-2 dan seterusnya menampung nilai tiap attribut.

Seperti inilah script yang saya buat:

import json
from oauth2client.client import GoogleCredentials
from googleapiclient.discovery import build

DOCUMENT_ID = '1V27aexn_E4H2iANUsbcy9RU9Y0fQrjsH0pLk2Iauh2U'
SHEET_RANGE = 'Sheet1'

credential = GoogleCredentials.get_application_default()
service = build('sheets', 'v4', credentials=credential)
sheet = service.spreadsheets()

sheet_content = sheet.values()\
                  .get(
                    spreadsheetId=DOCUMENT_ID,
                    range=SHEET_RANGE,
                    majorDimension='ROWS'
                  ).execute()

rows = sheet_content['values']
result = [
           { key:row[index] for index, key in enumerate(rows[0]) }
           for row in rows[1::]
         ]

print(json.dumps(result))

Otorisasi

Sebelum script tersebut bisa dijalankan, perlu dilakukan beberapa hal terkait otentikasi dan otorisasi untuk mengakses data dari Google Sheet, terutama jika sebelumnya belum pernah menggunakan fitur API Google Sheet.

Langkah pertama adalah membuat GCP Project (jika belum punya), kemudian menghidupkan fitur API Google Sheet. Dari GCP Console, masuk ke menu APIs & Services, kemudian tekan tombol ENABLE APIS AND SERVICES. Dari pilihan services yang tersedia, pilih Google Sheets API, kemudian klik ENABLE. Setelah ini, kita bisa menggunakan fitur Google Sheet API dari project GCP kita.

Langkah berikutnya adalah membuat Service Account. Saya memilih menggunakan Service Account sebagai credential untuk otentikasi karena lebih mudah mengaturnya dan penggunaannya pun instan. Untuk membuat Service Account, dari GCP console, masuk ke menu IAM & ADMIN >> Service Account, kemudian tekan tombol CREATE SERVICE ACCOUNT.

Daftar dan Pengaturan Service Accounts

Dari form yang tersedia, kita akan diminta untuk mengisi nama Service Account yang akan dibuat. Nama inilah yang nanti akan menjadi alamat email Service Account yang bisa diberikan hak akses untuk membaca dokumen Google Sheet. Setelah membuat Service Account, dari daftar yang tersedia, pilih menu action Create key kemudian klik CREATE pada dialog yang muncul. Kita akan diberikan file JSON yang berisi kunci untuk otentikasi. Dengan kunci tersebut, script kita akan dijalankan dan melakukan request API Google Sheet sebagai Service Account tadi. Simpan baik-baik file JSON tersebut.

Langkah terakhir adalah mengijinkan Service Account yang baru dibuat tadi untuk mengakses dokumen Google Sheet. Dari halaman dokumen Google Sheet, klik menu Share, kemudian masukkan alamat email Service Account yang sudah dibuat tadi ke dalam input yang tersedia.

Memberikan Hak Akses pada Service Account untuk Membaca (dan Menulis) Dokumen Google Sheet

Cara menjalankan script

Dari script di atas, baris berikut ini perlu diubah sesuai Document Id (ada di url Google Sheet) dan nama sheet yang benar:

DOCUMENT_ID = '1V27aexn_E4H2iANUsbcy9RU9Y0fQrjsH0pLk2Iauh2U'
SHEET_RANGE = 'Sheet1'

Kemudian, sebelum script dijalankan, perlu diatur environment variable GOOGLE_APPLICATION_CREDENTIAL dengan nilai lokasi file JSON kunci Service Account yang sebelumnya sudah dibuat. Environment variable bisa juga diatur sambil menjalankan script seperti ini:

GOOGLE_APPLICATION_CREDENTIALS=/lokasi/file/service-account.json python main.py

Halaman depan / Semua Tulisan / Perihal / Blogroll