22
Python connect Google sheets by Google API
อันเนื่องมาจาก ผมต้องการ Implement service สักตัวโดยที่ไม่ต้องมี Database หรือ Web server มันไม่ใช้เรื่องความมันหรือว่าอะไรหรอกครับแต่มันเป็นงานที่เรียนมิใช่งานบริษัท จึงทำให้เกิดเรื่องราวนี้ขึ้นมา 55555+
จากที่รองไปหาข้อมูลมาจาก Google นะครับ เราจะต้องเริ่มจากการสร้าง Google sheets ใน Google drive ก่อนเลย
และต้องอย่าลืมกำหนดชื่อของ google sheets ด้วยนะครับ ^^
เอาให้มันชัดๆไปเลย
โดยเราจะต้องไปที่ developer console โดยจะต้องเข้าใช้งานผ่าน google account ของเราน้นเอง
- Create google project
ทำการสร้าง project ของเราหรือถ้าเรามี project ในนี้อยู่แล้วก็สามารถเอามาใช้ได้นะครับ โดยส่วนตัวผมจะทำการสร้าง project เพื่อที่จะง่ายในการ manage และควบคุม permission ต่างๆได้ง่าย
- Enable Google service
เราจะทำการ enable Google Sheets API และ Google Drive API สำหรับ project ของเรา
Google Drive API ใช้สำหรับการ access resource ต่างๆภายใน google drive
- Create credentials
ทำการกดปุ่ม + CREATE CREDENTIALS
และทำการเลือก Service account
กรอกข้อมูล Service account
- Download credential
เลือก service account ที่เราได้ทำการสร้างขึ้นและเลือกไปที่ tabs KEY
จากนั้นให้ทำการกดไปที่ปุ่ม ADD KEY
และเลือก Create new key
ทำการเลือก Key type เป็น json
และทำการกดปุ่ม create
- setup google sheets permission
ทำการเปิด file ที่เราได้ทำการ download มา และทำการ copy client_email
ในส่วนนี้ผมอาจจะขออธิบาย source code แค่นิดหน่อยก่อนนะครับ แล้วถ้า project ของผมเรียบร้อยจะขอมาให้ข้อมูลเพิ่มเติมครับ
Project Layouts
pans_apis
|-- /repository
|-- food_repository.py
|-- credential_file.json
repository
จะทำหน้าที่ในการเก็บส่วนในการเชื่อมต่อฐานข้อมูลซึ่งตอนนี้ผมมองว่า google sheets ของผมนั้นก็คือฐานข้อมูลนั้นเองครับ โดยใน folder จะมี food_repository.py
โดยในส่วนนนี้จะเป็นส่วนที่ใช้ในการเชื่อมต่อกับ google sheet ของเรา
credential_file.json
จะทำหน้าที่เก็บข้อมูล credential ที่เราได้ทำการ Download มากจาก google console ในตัวอย่างด้านบนครับ
และด้านล่างนี้คือตัวอย่าง code ที่ผมใช้ครับ
import gspread
import pandas as pd
from oauth2client.service_account import ServiceAccountCredentials
from pprint import pprint
# define the scope
scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']
credential = ServiceAccountCredentials.from_json_keyfile_name("credential_file.json",scope)
# authorize the clientsheet
client = gspread.authorize(credential)
sheet = client.open('api-database')
sheet_instance = sheet.worksheet("Table_Food_In_Ref")
# get all the records of the data
records_data = sheet_instance.get_all_records()
# convert the json to dataframe
records_df = pd.DataFrame.from_dict(records_data)
# view the top records
print(records_df.head())
โดยจะมีจุดที่สำคัญก็คือในส่วนของการ เรียกใช้งาน credential
credential = ServiceAccountCredentials.from_json_keyfile_name("credential_file.json",scope)
และก็จะมีการระบุ google sheet name api-database
และ sheet Table_Food_In_Ref
sheet = client.open('api-database')
sheet_instance = sheet.worksheet("Table_Food_In_Ref")
โดยในส่วนของการเชื่อมต่อ google sheets ผมจะข้อจบไว้ประมาณนี้ก่อนแล้วกันนะครับ แล้วเดียวพบกันในส่วนที่จะทำ flask python มาเชื่อมต่อครับผม
อันนี้เป็นแหล่งข้อมูลที่ผมใช้นะครับ
ขอบคุณครับ
22