實作 Laravel 串接Google Sheet API

更新於 2024/10/04閱讀時間約 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
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
延續上篇: 功能實作篇 框架與結構 接下來我們將深入實作 Laravel 框架中的路由(Router)、控制器(Controller)、業務邏輯(Service)、儲存庫模式(Repository Pattern),以及模型(Model)的細節。這些部分將構成我們縮網址系統的核心功能。
Thumbnail
本篇將涵蓋環境設置和基礎結構的搭建,包括 Laravel 框架的初始化、路由設置、資料庫遷移和模型的建立。下篇將進一步討論核心功能的實現,包括 API 的開發和核心邏輯的實作。
Thumbnail
本文將深入探討如何在 Laravel 中設計縮網址系統的架構,涵蓋數據庫設計、API 設計與核心邏輯。主要介紹系統的核心目標,即將長網址轉換為短網址,並提供查詢和重定向功能。重點在於如何有效設計資料表、優化 API 端點,以及改善系統性能與擴展性。這些設計考慮將有助於實現一個快速而可靠的縮網址服務。
Thumbnail
前言 發佈了五篇關於Laravel 的文章後,我就在思考,後面該如何延伸更多的內容,來讓正在學習或是想要學習的格友們更加的深入了解Laravel 的應用,於是我想到那就不如直接來進行專案開發,同時也能在開發的過程中更加laravel的語法以及內容。
Thumbnail
在 IG 上看到一位前端大大用 Google Apps Script + Line bot 替自己的球隊安排了球經,覺得很有趣,想來玩看看
Thumbnail
如果你正在學習SQL,這邊介紹一個方便簡易的方式,不須透過安裝傳統的MySQL,只要利用Google提供的BigQuery開源示範dataset就可以實作練習,另一方面,如果你想應用自己手邊上的資料,也能簡單的使用匯入功能(如何匯入看這邊)。 輸入名稱「data-to-insights」。
Thumbnail
「斜槓」一詞,在近幾年相當流行,人人都發現 : 只會一項專業是不夠的。但「早上在早餐店打工、下午跑外送、晚上擔任兼職教練」,這樣的生活方式,算是斜槓嗎? 斜槓的目的是什麼? 該如何選擇,才能讓每件事有加乘效果? 過往是運動員的他,是如何跨領域並創業? 在每個關鍵點與身分轉換,他又是如何抓住機會?
Thumbnail
在上一篇Notion實作文章中,我們已經將大部分的功能解釋完了。在這篇文章中,我們將會專注在建立管理讀書進度的資料庫。 我先來說明一下我想要這個資料庫達成的事情: 我可以根據我對知識的掌握程度訂定隔幾天之後要再複習,並利用上次複習時間讓這個資料庫自動計算、過濾出每天我該複習什麼。
Thumbnail
本文使用網站的 FB 登入做示範 採用 Laravel 8 + Socialite 5 使用 Session 記錄狀態 不同版本可能會有些許語法及方法上的差異,請自行調整 前言 最近因為碰到需要實作 OAuth 第三方登入的需求,只好把之前隨便看看的東西撿回來研究並實作。不過我找到多數現存的中文文章
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
延續上篇: 功能實作篇 框架與結構 接下來我們將深入實作 Laravel 框架中的路由(Router)、控制器(Controller)、業務邏輯(Service)、儲存庫模式(Repository Pattern),以及模型(Model)的細節。這些部分將構成我們縮網址系統的核心功能。
Thumbnail
本篇將涵蓋環境設置和基礎結構的搭建,包括 Laravel 框架的初始化、路由設置、資料庫遷移和模型的建立。下篇將進一步討論核心功能的實現,包括 API 的開發和核心邏輯的實作。
Thumbnail
本文將深入探討如何在 Laravel 中設計縮網址系統的架構,涵蓋數據庫設計、API 設計與核心邏輯。主要介紹系統的核心目標,即將長網址轉換為短網址,並提供查詢和重定向功能。重點在於如何有效設計資料表、優化 API 端點,以及改善系統性能與擴展性。這些設計考慮將有助於實現一個快速而可靠的縮網址服務。
Thumbnail
前言 發佈了五篇關於Laravel 的文章後,我就在思考,後面該如何延伸更多的內容,來讓正在學習或是想要學習的格友們更加的深入了解Laravel 的應用,於是我想到那就不如直接來進行專案開發,同時也能在開發的過程中更加laravel的語法以及內容。
Thumbnail
在 IG 上看到一位前端大大用 Google Apps Script + Line bot 替自己的球隊安排了球經,覺得很有趣,想來玩看看
Thumbnail
如果你正在學習SQL,這邊介紹一個方便簡易的方式,不須透過安裝傳統的MySQL,只要利用Google提供的BigQuery開源示範dataset就可以實作練習,另一方面,如果你想應用自己手邊上的資料,也能簡單的使用匯入功能(如何匯入看這邊)。 輸入名稱「data-to-insights」。
Thumbnail
「斜槓」一詞,在近幾年相當流行,人人都發現 : 只會一項專業是不夠的。但「早上在早餐店打工、下午跑外送、晚上擔任兼職教練」,這樣的生活方式,算是斜槓嗎? 斜槓的目的是什麼? 該如何選擇,才能讓每件事有加乘效果? 過往是運動員的他,是如何跨領域並創業? 在每個關鍵點與身分轉換,他又是如何抓住機會?
Thumbnail
在上一篇Notion實作文章中,我們已經將大部分的功能解釋完了。在這篇文章中,我們將會專注在建立管理讀書進度的資料庫。 我先來說明一下我想要這個資料庫達成的事情: 我可以根據我對知識的掌握程度訂定隔幾天之後要再複習,並利用上次複習時間讓這個資料庫自動計算、過濾出每天我該複習什麼。
Thumbnail
本文使用網站的 FB 登入做示範 採用 Laravel 8 + Socialite 5 使用 Session 記錄狀態 不同版本可能會有些許語法及方法上的差異,請自行調整 前言 最近因為碰到需要實作 OAuth 第三方登入的需求,只好把之前隨便看看的東西撿回來研究並實作。不過我找到多數現存的中文文章