實作 Laravel 串接Google Sheet API

更新於 發佈於 閱讀時間約 7 分鐘

最近剛好分配一個需求,要批次更新一些基礎設定資料,而新系統基礎設定資料都統一由別的團隊維護在Google Sheet 上,一開始是要我寫 Laravel Seeder 塞資料表,後來發現也太多數據要批次更新了,數據要對到何時何年,乾脆來研究串 Google Sheet API 整批塞入在對總行數就好XDDDD。

原本舊專案Laravel 是5.6版,PHP是7.3版,套件工具上比較熱門大概是revolution/laravel-google-sheets,雖然可以選擇其他相容性版本,但這邊會以google/apiclien來實作串接。

啟用Google Sheet API

首先先啟用Google Sheet API服務,並創建金鑰,首先登入 Google console

如果沒有專案的話,在紅色框框上點擊進去可以新增一個專案,這邊我建立一個DD DEMO的專案練習。

raw-image


raw-image

接著啟用google sheet api的服務,點擊啟用API和服務進去,搜尋google sheet api ,因為我這邊已經啟用了,可以看到他寫api已啟用。

raw-image
raw-image
raw-image

啟用後,我們來建立服務金鑰,點擊左側憑證,並點擊建立憑證,選擇服務帳戶

raw-image

接著取個名稱,最後google服務會幫我建立一個服務帳戶(mail),這邊叫google-sheet-demo,點建立並繼續,下面2-3都不用設定,直接一直往下到完成。

raw-image

設定完成你會看到創建了一個服務帳戶,這到時候要用來加入到我們google sheet 共享群組

raw-image

接著我們來下載我們的金鑰JSON檔案,到時候要放到Laravel專案裡,對著我們服務帳戶的電子郵件進入,看到以下畫面

raw-image

點擊金鑰進入,選擇新增金鑰,並建立新的金鑰

raw-image

這邊建立選擇JSON檔案,點擊建立,會幫我下載一個JSON,務必保存好,不見就GG,重新取得一次XDDDDDDD

raw-image

安裝google/apiclien

下載完畢後就來開始安裝google/apiclien的套件吧,如果是PHP 7.4之前的版本可以安裝2.0版,而PHP 7.4 or higher 直接照readme安裝即可google/apiclient:^2.15.0

//安裝2.0的版本
composer require google/apiclient:2.0

直接閱讀UPGRADING.md 可以看到apiclient:2.0之後,就支持Composer autoloader 了,不必要在加上require_once 'google-api-php-client/src/Google/autoload.php'; 這句。

而因為這個套件依賴google/apiclient-services套件,該套件為大量 Google API 提供了很多API類,所以如果你沒有選擇特定想要的服務的話,預設一開始就會裝一大堆服務,故這個包Readme允許你拔掉不需要安裝的服務

可以使用Google\Task\Composer::cleanup來清除,直接貼上程式碼。而extra就是要保留的服務,剩下沒有秀出來的就是直接拔除。

{
"require": {
"google/apiclient": "^2.15.0"
},
"scripts": {
"pre-autoload-dump": "Google\\Task\\Composer::cleanup"
},
"extra": {
"google/apiclient-services": [
"Sheets"
]
}
}

而我們要怎知道有哪些服務類可以使用,這時候就要去看google/apiclient-services 資料夾或是他的文檔 XDDDDD。

raw-image

因為我只要串Google Sheets 這邊只留 Sheets,接著我們執行更新Composer。

composer update

這邊文檔有說到如果有在composer.json增加新的服務,必須要先移除vendor/google/apiclient-services資料夾在進行一次更新

IMPORTANT: If you add any services back in composer.json, you will need to remove the vendor/google/apiclient-services directory explicitly for the change you made to have effect:
rm -r vendor/google/apiclient-services
composer update

實作流程

下載台銀歷史匯率EXCEL檔

這邊會以台銀歷史匯率EXCEL檔上傳到Google 雲端上,以Google Sheet開啟(讓系統將csv檔轉成雲端excel 版 ),長下列這樣,而我這個檔案總共會有兩個Sheets,依幣別命名(USD, JPY)。

raw-image

修改已下載的金鑰命名

將前面服務金鑰JSON改檔案名稱,命為credentials.json,並放進去專案資料夾裡。

raw-image

將服務帳戶加入EXCEL

記得先前在啟用Google Sheet API 有創建一個服務帳戶,給他編輯者的權限

raw-image

撰寫串接程式碼

這邊會單純使用artisan:command指令來練習,而非建立一個Service檔案,這邊不會仔細講解artisan:command細部說明~主要完成串接並寫入資料庫

//創建一個 artisan 指令​
php artisan make:command UpdateRate

創建完畢後,你會在handle撰寫串接程式碼

接著配置Google client 跟串接程式碼

raw-image

currency參數設定可傳入多個幣別or單一幣別,接著取得幣別後撈取對應SheetName,因為怕行數太多不知道自己有沒有正確塞入正確筆數,所以我額外加上$progressBar功能,統計更新比數資料是否正確,更多progressBar操作可以看這裡的連結。

這邊的$spreadsheetId 會是你google sheet 上這段,通常都會放在環境變數做引入

raw-image
raw-image

查看執行結果

最後程式碼寫完後,執行artisan 指令。

php artisan UpdateRate USD,JPY

查看執行結果,可以看到我們的進度條跟印出info

raw-image

核對筆數扣掉原本標題數量皆正確,這樣就大功告成拉。

raw-image
raw-image

總結:因為不太能用公司Code當例子,隨便舉個類似作法作為筆記,如果是要寫入Google Sheets 那就只是改變方法而已(可以到套件裡面去看他function or 看Google文檔) or ChatGpt 是你的好幫手XDDDDD。

以上就是串接筆記,多寫筆記避免要多吃銀杏才能回想起曾經做過的功能流程QQ







avatar-img
15會員
37內容數
學涯無止境,透過每日or每週模仿學習筆記,不管是哪些領域也好,總有一天也可以從菜雞變小雞
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
DDDDD的沙龍 的其他內容
在撰寫專案時,有時候可能需要做一些特定Exceptions 來拋出error message的情況,而在不同公司任職,大家配置的流程可能就有些不同,這邊將簡單練習如何配置自定義的Exception。
作為一個純後端,不會前端也是正常的事(誤),但該練習的技能線還是得每天練習一點,尤其我是一個前端小廢物,那既然要用Laravel 9 版本來做開發,那就得先試試看vite這個新的工具,基本上這邊就簡單介紹使用方式,另一篇在額外說明Laravel Mix 與 Vite 差別。
最近在開發某一個項目功能,這也是先前同事踩到的坑,這次換我在踩一次,順便記錄一下,主要發生情境是,在執行GET參數,定義一個isDownlineSearch 布林判斷時,前端傳入true or false,在執行以下程式碼判斷時會失敗,他無法正確判斷此值。
最近因為想要花些時間做完一個完整的SideProject,以前總是懂得怎麼使用,拼拼湊湊完成一個塞趴卷就交卷了,但都沒時間去真正理解這些原理的應用,而Laravel 框架本身支持的登入登出的工具,就有好多種。
在公司專案裡,除了使用Laravel 提供的輔助函數外,我們還可以透過建構屬於自己的Helper function 可以方便地執行諸如處理陣列、文件路徑、字符串和路由等操作,來協助我們更方便處理重複的程式碼。
練習 PHPUnit 測試的撰寫,依序創建Controller、Service,並針對計算邏輯進行單元測試的練習。
在撰寫專案時,有時候可能需要做一些特定Exceptions 來拋出error message的情況,而在不同公司任職,大家配置的流程可能就有些不同,這邊將簡單練習如何配置自定義的Exception。
作為一個純後端,不會前端也是正常的事(誤),但該練習的技能線還是得每天練習一點,尤其我是一個前端小廢物,那既然要用Laravel 9 版本來做開發,那就得先試試看vite這個新的工具,基本上這邊就簡單介紹使用方式,另一篇在額外說明Laravel Mix 與 Vite 差別。
最近在開發某一個項目功能,這也是先前同事踩到的坑,這次換我在踩一次,順便記錄一下,主要發生情境是,在執行GET參數,定義一個isDownlineSearch 布林判斷時,前端傳入true or false,在執行以下程式碼判斷時會失敗,他無法正確判斷此值。
最近因為想要花些時間做完一個完整的SideProject,以前總是懂得怎麼使用,拼拼湊湊完成一個塞趴卷就交卷了,但都沒時間去真正理解這些原理的應用,而Laravel 框架本身支持的登入登出的工具,就有好多種。
在公司專案裡,除了使用Laravel 提供的輔助函數外,我們還可以透過建構屬於自己的Helper function 可以方便地執行諸如處理陣列、文件路徑、字符串和路由等操作,來協助我們更方便處理重複的程式碼。
練習 PHPUnit 測試的撰寫,依序創建Controller、Service,並針對計算邏輯進行單元測試的練習。
你可能也想看
Google News 追蹤
Thumbnail
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
※ 什麼是Web API API 就是後端開出來讓前端來用的介面,讓前端與後端可以溝通。 API流程: 終端使用者用任何一種裝置進入瀏覽器。 瀏覽器透過 API 向後端發出請求,請求查詢或修改資料。 後端透過 API 收到前端的請求後,取得資料並回應給前端。 前端渲染畫面,終端使用者
Thumbnail
Google Docs 自動化應用情境,自動依 Google Sheets 試算表、Google Forms 表單回覆、Gmail 信件、Webhook、RSS 訂閱內容,建立相應 Google Docs 文件。還可以在新建 Google Docs 文件後,自動發送 Slack 通知給團隊成員!
Thumbnail
這是一篇介紹如何使用Google Maps API在網頁上呈現地圖,並進行店家名稱的搜尋的文章。內容包含如何申請Google Cloud Platform的API金鑰、初始化地圖、設定搜尋功能等步驟。文章中提供了部分程式碼範例,並附上圖片說明操作過程。
Thumbnail
本次將為大家介紹,如何用Google表單來自製顧客滿意度調查表 進入Google表單有三個步驟,首先必須先進入Google流覽器的環境 接下來,開啟Gmail信箱,第三個步驟,選擇Google應用程式中的表單功能 再點選應用程式集,在程式集中再點選表單的功能,就會出現表單的編輯畫面 此時要建
Thumbnail
手機版進入Google表單有三步驟 第一是進入Google瀏覽器, 第二是在瀏覽器上搜尋框,輸入Google表單, 找到,Google表單登錄,的網頁,點按進入即可 接下來就會出現目前的畫面,我們只要點選,前往表單,就可進入正式編輯的頁面了 首次進入表單編輯頁面,我們必須要為表單,訂定一個
xhr 在下面的例子裡,我們首先建立了一個 XMLHttpRequest 物件,並使用 .open() 開啟一個 URL,最後使用 .send() 發出 request。 具體來說步驟有四個: 建立XMLHttpReque 開啟一個請求。 送出請求。 拿到回應後去處理畫面要如何呈現。
Thumbnail
Google 提供了免費的雲端服務 Google Apps Script (GAS) ,我們可以撰寫一些簡易的程式APP,串接其他 Google 雲端服務 如 Google Docs ,Sheets …,就能夠幫助我們利用雲端硬碟做日常工作
Thumbnail
本篇文章將描述如何產生GCP的服務帳戶金鑰,並利用該金鑰在DBeaver或是其他透過支援JDBC的軟體連接到BigQuery服務。
Thumbnail
先前幾篇筆記介紹了網路請求,瀏覽器儲存資料的方式,那麼實務上,前端最常需要發送網路請求的時候,就是透過呼叫 API,去向後端工程師發送/請求資料,所以今天來記錄什麼是 API吧!
Thumbnail
新的一年來臨,我期望重新檢視我的財務報表,讓自己更輕鬆的管理財務。我希望有一張預算編列表,然後利用這些表格來審視我的預算與到時候實際的收支狀況。我發現許多財務相關的apps都無法滿足我的需求。所以,我親手製作了一個包含預算和實際支出的表格,最後將這兩者合併成一個統一的表格。
Thumbnail
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
※ 什麼是Web API API 就是後端開出來讓前端來用的介面,讓前端與後端可以溝通。 API流程: 終端使用者用任何一種裝置進入瀏覽器。 瀏覽器透過 API 向後端發出請求,請求查詢或修改資料。 後端透過 API 收到前端的請求後,取得資料並回應給前端。 前端渲染畫面,終端使用者
Thumbnail
Google Docs 自動化應用情境,自動依 Google Sheets 試算表、Google Forms 表單回覆、Gmail 信件、Webhook、RSS 訂閱內容,建立相應 Google Docs 文件。還可以在新建 Google Docs 文件後,自動發送 Slack 通知給團隊成員!
Thumbnail
這是一篇介紹如何使用Google Maps API在網頁上呈現地圖,並進行店家名稱的搜尋的文章。內容包含如何申請Google Cloud Platform的API金鑰、初始化地圖、設定搜尋功能等步驟。文章中提供了部分程式碼範例,並附上圖片說明操作過程。
Thumbnail
本次將為大家介紹,如何用Google表單來自製顧客滿意度調查表 進入Google表單有三個步驟,首先必須先進入Google流覽器的環境 接下來,開啟Gmail信箱,第三個步驟,選擇Google應用程式中的表單功能 再點選應用程式集,在程式集中再點選表單的功能,就會出現表單的編輯畫面 此時要建
Thumbnail
手機版進入Google表單有三步驟 第一是進入Google瀏覽器, 第二是在瀏覽器上搜尋框,輸入Google表單, 找到,Google表單登錄,的網頁,點按進入即可 接下來就會出現目前的畫面,我們只要點選,前往表單,就可進入正式編輯的頁面了 首次進入表單編輯頁面,我們必須要為表單,訂定一個
xhr 在下面的例子裡,我們首先建立了一個 XMLHttpRequest 物件,並使用 .open() 開啟一個 URL,最後使用 .send() 發出 request。 具體來說步驟有四個: 建立XMLHttpReque 開啟一個請求。 送出請求。 拿到回應後去處理畫面要如何呈現。
Thumbnail
Google 提供了免費的雲端服務 Google Apps Script (GAS) ,我們可以撰寫一些簡易的程式APP,串接其他 Google 雲端服務 如 Google Docs ,Sheets …,就能夠幫助我們利用雲端硬碟做日常工作
Thumbnail
本篇文章將描述如何產生GCP的服務帳戶金鑰,並利用該金鑰在DBeaver或是其他透過支援JDBC的軟體連接到BigQuery服務。
Thumbnail
先前幾篇筆記介紹了網路請求,瀏覽器儲存資料的方式,那麼實務上,前端最常需要發送網路請求的時候,就是透過呼叫 API,去向後端工程師發送/請求資料,所以今天來記錄什麼是 API吧!
Thumbnail
新的一年來臨,我期望重新檢視我的財務報表,讓自己更輕鬆的管理財務。我希望有一張預算編列表,然後利用這些表格來審視我的預算與到時候實際的收支狀況。我發現許多財務相關的apps都無法滿足我的需求。所以,我親手製作了一個包含預算和實際支出的表格,最後將這兩者合併成一個統一的表格。