Pythonで取得した結果をGoogleスプレッドシートに書き出すためには「gspread」をインポートして割と簡単に書き出せるのですがその手前のGoogleの設定が面倒だったのでその手順を備忘録として残します。
Google Cloud Platform の準備
Google Cloud Platformへログインします。
プロジェクトを作成
上記リンクを開き「プロジェクトの作成」から新規にGoogle スプレッドシートへ書き出すためのプロジェクトを作成します。
適当に「プロジェクト名」を決めます。組織はあれば項目が表示されるので追加します。GCPの権限まわりよくわかっていないのですが組織がある場合は指定しないと先に進めないことがあります。
プロジェクトが作成されたら「ダッシュボード」へ移動すると思います。移動しなくてもメニューからホーム→ダッシュボードへ移動すればOK。
Google Sheets APIとGoogle Drive APIを有効化
Pythonで操作するために関連するAPIを有効化します。
上の方にある検索画面に「Google Sheets API」と検索し候補の中からGoogle Sheets APIを選択します。
※ 丸が3つのアイコンの場所が作成したプロジェクトになっているか確認してください。
Google Sheets APIの画面に移動したら有効化します。
同じ手順で「Google Drive API」も有効化します。
認証情報からサービスアカウントを作成する
スプレッドシートに書き込む際のサービスアカウントを作成します。
左上の3本線のハンバーガーメニューから「APIとサービス」→「認証情報」をクリックします。
表示された画面より、「サービスアカウントを管理」をクリックします。
次の画面では「サービスアカウントを作成」をクリックします。
サービスアカウント名を決めます。python-to-spreadとかわかりやすくしておいた方がいいかもです。サービスアカウント名を決めたら「作成して続行」をクリックします。2と3は省略可能なので飛ばします(不安であればオーナーや編集権限を与えておけば無難です)。必要なら後から編集も可能です。
秘密キーを作成する
作成されたサービスアカウントの右側の操作のアイコン(縦三つの丸)をクリックし「鍵を管理」を選びキーを作成します。
次の画面でまだキーが作成されていないため「鍵を追加」より「新しい鍵を作成」をクリックし鍵を作成します。
推奨のJSONが選択されているはずなので、そのまま作成をクリックします。
作成をクリック後、自動でJSONがブラウザよりダウンロードされます。ダウンロードされたJSONデータは
ダウンロードした
データをテキストエディタなどで開き「client_email」の部分をコピーしておきます。
client_email”: “test-xxx@my-project-xxxxxxxx.iam.gserviceaccount.com”
上記のように書かれている部分があるので、「test-xxx@my-project-xxxxxxxx.iam.gserviceaccount.com」の部分をコピーしておきます。
※ スプレッドシートの共有設定で使います。
スプレッドシートの準備
スプレッドシートへ書き込みできるように書き込み先のスプレッドシートを用意します。
共有設定をする
スプレッドシートを用意したら、「共有」をクリックします。
秘密キー内にあった、client_emailのメールアドレスを追加し「完了」をクリックします。
次の画面で「編集者」と「閲覧者」が選べるので「編集者」権限を付与します。
これで準備完了です。
簡単にテストする
ここではGoogle Colaboratoryを使った簡単なテストの例を紹介します。同様の手順で手持ちの環境でも動くかと思います。
上記画像はColabで実行する場合のコードの完成形です。
colab用サンプルコード
適宜コードを追加しコピペしていけば完成します。
環境構築用
秘密キーのjsonデータをドライブに上げるため、マウント用のコード。(ドライブに上げなくてもcolab上にあれば問題ないですが、一定時間経つとファイルデータが消えるため)
from google.colab import drive
drive.mount('/content/drive')
ドライブをマウントしたら左側のフォルダアイコンをクリックしdrive内の好きな場所へGCPで作成した秘密キーのJSONファイルをアップロードしてください。(上記コードを実行してから実際にマウントされdriveが表示されるまで1分くらい時間差があります)
アップロードしたファイルのパスはファイルを選択し現れる「・・・」をクリックし「パスをコピー」で取得できます。(実行用のコードで使います)
Googleスプレッドシートを操作するためのインターフェースをインストールするためのコード。
※最近試したところ以下インストールしなくても動くみたいです。
!pip install gspread
Google API認証用のインターフェースをインストールするためのコード。
!pip install oauth2client
実行用
import gspread
from oauth2client.service_account import ServiceAccountCredentials
scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']
#ダウンロードしたjsonファイルをドライブにアップデートした際のパス
json = 'ここに秘密キーのパスを貼り付け'
credentials = ServiceAccountCredentials.from_json_keyfile_name(json, scope)
gc = gspread.authorize(credentials)
#書き込み先のスプレッドシートキーを追加
SPREADSHEET_KEY = 'ここにスプレッドシートのキーを貼り付け'
#共有設定したスプレッドシートの1枚目のシートを開く
worksheet = gc.open_by_key(SPREADSHEET_KEY).sheet1
#書き込み用の文字列を作成
items = ['Hello', 'World']
# シートへ文字列を追加
worksheet.append_row(items)
上記コードにJSONデータのパスとスプレッドシートのキーを自分の環境のものに変えてください。
スプレッドシートのキーは、スプレッドシートのURLの以下の「xxx」の部分です。
https://docs.google.com/spreadsheets/d/xxxxxxxxxxxxxxxxxxxxx/edit#gid=0
上から順にコードを実行すると書き込み先のスプレッドシートに「Hello world」と表示されていると思います。
これでスプレッドシートへ書き込むための準備が完了です。
おわり
準備が面倒で諦めようかと思いましたが、準備が終わればいろいろ遊べるようになるので楽しいですね。これでようやく書き込むための記事を書いたりできそうです。