【Python】GoogleスプレッドシートAPI連携!秘密鍵(サービスアカウントキー)の取得方法を解説

本ページはプロモーションが含まれています

プログラムでスプレッドシートを操作するためにはAPIを利用する必要があって、このAPIを利用するためには秘密鍵ファイルをGoogleアカウントベースで作成する必要があります

つまり誰かに準備してもらうのではなく、利用者自身で作成する必要があるので今回はこの秘密鍵ファイルの取得方法をまとめていきます

前提としてGoogleアカウントが必要になりますが大半の人はすでに作成していると思うのでここでは割愛・・・

まずはGCP(Google Cloud Platform)アカウントを作成

アカウント作成のためにGoogle Cloudページへ

無料で利用開始“ボタンをクリックしそうなんですが”コンソール“リンクの方をクリック

初めて開く場合は”利用規約への同意“と”更新情報をメールで受信希望”を聞かれるので利用規約は必須でチェック

ここまででGoogle Cloudのアカウント作成完了できたので続いて無料トライアルへ

国を選んで

連絡先(住所)を登録して

支払い方法(クレジットカード情報)を登録して

利用開始!

続いてプロジェクトを作成

アカウントに続いてプロジェクトを作成します

手順は下記の通り

  1. プロジェクトの選択“をクリック
  2. 新しいプロジェクト“をクリック
  3. プロジェクト名“を適当に登録
  4. 作成“ボタンをクリック

場所“は大半の人は”組織なし”のままでOK

プロジェクトの作成完了にもう一度”プロジェクトの選択“をクリックすると先ほど作成したプロジェクトがあるので選択しておく

ようやくAPIの設定

トップメニューで左上のハンバーガーからメニューを表示させて”APIとサービス“→”ライブラリ“でメニューを表示する

APIライブラリの中からスプレッドシート操作に必要な”Google Drive“と”Google Sheets API“を選択

有効化はボタンをクリックだけの簡単仕様

次はサービスアカウントの作成

PythonなどのプログラムからGCPのリソースにアクセスする際には、「サービスアカウント」という特別なアカウントを利用します

サービスアカウントは人間が使うGoogleアカウントとは異なり、プログラムがGCPと安全にやり取りするための専用アカウントみたいなものです

再びハンバーガーメニューから”IAM と 管理“→”サービス アカウント“へ

サービスアカウント名“をお好みで入力すると勝手に”サービスアカウントID“が生成されるのでそのまま”作成して続行“をクリック

※権限とアクセス権を持つプリンシパルは表記の通り省略可なのでこの場はスルーで完了を

最後に鍵ファイルを作成

またまたハンバーガーメニューから”IAM と 管理“→”認証情報“へ

先ほど作成したサービスアカウント情報を見つつ、右側の”サービスアカウントを管理”をクリック

三点リーダーをクリックして”鍵を管理”を選択

キーを追加をクリックすると鍵のタイプを選ぶメニューが表示されるのでデフォルトのJSONのまま右下の作成をクリック

パソコンにサービスアカウントIDの一部がファイル名に含まれたJSONファイルが自動ダウンロードされて完了!!

最後にスプレッドシートを共有

あとは対象のスプレッドシートのURLや参照・更新してほしい情報を伝えるだけですがこのままではプログラムでエラーが起こります

例外が発生しました: PermissionError
{'code': 403, 'message': 'The caller does not have permission', 'status': 'PERMISSION_DENIED'}
gspread.exceptions.APIError: {'code': 403, 'message': 'The caller does not have permission', 'status': 'PERMISSION_DENIED'}

The above exception was the direct cause of the following exception:

  File "C:\Users\thosh\デスクトップ\python\mercari.py", line 9, in <module>
    sheet = gc.open_by_url('https://docs.google.com/spreadsheets/d/1cT_wQXpv0wfsMakmGtOq2tkd4htSwvMDDbsbgVPe3MQ/edit#gid=0').worksheet('テストシート')
PermissionError: 

原因はエラーにも書いてある通り”許可”されていないんですね

何の許可かと言えばスプレッドシート自体の閲覧or編集許可なんでファイルの共有設定から参照してもらうだけなら”閲覧者“、実際に操作してもらうなら”編集者“で設定しましょう

ここまでくればPythonでスプレッドシートの操作ができます!!

あとがき

Pythonでのスプレッドシート操作自体は難しくないのですがここまでの事前準備がが結構面倒くさい・・

信頼できる発注先なら相手のGoogle Driveで運用してもらって共有設定してもらうのもありじゃないでしょうか

コメント

タイトルとURLをコピーしました