dyzur-bot/fetch-sheet.go

42 lines
1.2 KiB
Go

package dyzurbot
import (
"context"
"fmt"
"os"
"github.com/joho/godotenv"
"google.golang.org/api/option"
"google.golang.org/api/sheets/v4"
)
// ReadSheet czyta zadany zakres z arkusza i zwraca wiersze.
// spreadsheetID to ID z URL-a arkusza, readRange np. "Dyżury!A1:C30".
// Klucz API jest wczytywany z pliku .env (zmienna GOOGLE_API_KEY).
func ReadSheet(ctx context.Context, spreadsheetID, readRange string) ([][]interface{}, error) {
// godotenv.Load nie nadpisuje już ustawionych zmiennych środowiskowych;
// brak pliku .env nie jest błędem (na produkcji zmienne mogą być ustawione inaczej).
_ = godotenv.Load()
apiKey := os.Getenv("GOOGLE_API_KEY")
if apiKey == "" {
return nil, fmt.Errorf("missing GOOGLE_API_KEY in environment/.env")
}
srv, err := sheets.NewService(ctx, option.WithAPIKey(apiKey))
if err != nil {
return nil, fmt.Errorf("init sheets service: %w", err)
}
resp, err := srv.Spreadsheets.Values.
Get(spreadsheetID, readRange).
ValueRenderOption("UNFORMATTED_VALUE"). // surowe wartości, bez formatowania komórek
Context(ctx).
Do()
if err != nil {
return nil, fmt.Errorf("get values %q: %w", readRange, err)
}
return resp.Values, nil
}