🐏

Google Sheets APIを使う

2023/09/12に公開

Overview

Googleスプレッドシートの情報を取得する方法を知りたいないと思いAPIを使って情報を取得するのを今回やってみました。ドキュメントだけだと分かりにくかったので、記事や海外の動画を参考にしました。

これがドキュメントと言ってもい
https://notes.sharesl.net/articles/2541/

summary

参考になった動画
https://www.youtube.com/watch?v=P16uA1Hl4DI

動画を参考にスプレッドシート側の設定で見落としていた箇所があったので設定しました。参考にした記事では、画面下の赤丸をつけているところも保存しているスプレッドシートと同じtestという名前にする必要がありました。
画面左の赤丸のところで、参考にした記事と同じようにリンクを知っている人に情報を共有する設定が必要なので、お忘れなく。

こんな感じでデータを用意する


設定が完了したら、URLにAPI KEY、スプレッドシートID、シート名を指定する。
これを参考に

https://sheets.googleapis.com/v4/spreadsheets/{スプレッドシートID}/values/{シート名}?key={APIキー}

書き換える。

https://sheets.googleapis.com/v4/spreadsheets/1nX**************C0g-lvwT4LK3Efhzk/values/test?key=AIzaSyDOqu2gQN*************

こんな感じでJSONのデータがURLにアクセスして表示されたら最高です🙌

thoughts

設定まわり、以前やった時ハマって挫折したことがあるのですが人の書いた記事や海外の動画を参考にすると、目的を達成できたので、やってみたいことを実現できました!

curlでやってみる場合だと、HTTP GETメソッドを明示的に使う設定が必要でハマりました!
使う時は、このコマンドをターミナルで実行してください。
すいませんAPI KEYとかは隠してます🙇‍♂️

curl -X GET -H "User-Agent: Mozilla/5.0" --insecure "https://sheets.googleapis.com/v4/spreadsheets/1nXr**************3Efhzk/values/test?key=AIzaSyD******************ZktXrwrSTY"

実行結果

hashimotojunichi@hashimotojunichinoMacBook-Pro ~ % curl -X GET -H "User-Agent: Mozilla/5.0" --insecure "https://sheets.googleapis.com/v4/spreadsheets/1nX*************0g-lvwT4LK3Efhzk/values/test?key=AIzaSyD*************TY"

{
  "range": "test!A1:Z1000",
  "majorDimension": "ROWS",
  "values": [
    [
      "id",
      "name",
      "count"
    ],
    [
      "1",
      "taro",
      "4"
    ],
    [
      "2",
      "hanako",
      "3"
    ],
    [
      "3",
      "tom",
      "2"
    ],
    [
      "4",
      "jim",
      "5"
    ]
  ]
}
hashimotojunichi@hashimotojunichinoMacBook-Pro ~ % 

Flutterで使った例もご紹介しておきます。HTTP GETするだけなので、エンドポイントにアクセスできればデータの取得は可能です。今回はログに出すだけ。

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'HTTP Request',
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  
  void initState() {
    super.initState();
    _fetchData();
  }

  _fetchData() async {
    var url = Uri.parse('https://sheets.googleapis.com/v4/spreadsheets/1nXrWzb*************:3Efhzk/values/test?key=AIza*******************TY'); // あなたのURLをセット
    try {
      var response = await http.get(url);
      print('Response status: ${response.statusCode}');
      print('Response body: ${response.body}');
    } catch (e) {
      print('Error occurred: $e');
    }
  }

  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('HTTP Request')),
      body: Center(child: Text('Check the logs for the HTTP response.')),
    );
  }
}

Discussion