[Google Colabratory]Google認証を自動化しよう その3

Google Colaboratory

どうも。つじけ(tsujikenzo)です。このシリーズでは 「Google ColaboratoryのGoogle認証を自動化しよう」 について全3回でお送りします。今日は第3回目です。

前回のおさらい

前回は、「Google認証を自動化する下準備」をお届けしました。

[Google Colabratory]Google認証を自動化しよう その2
どうも。つじけ(tsujikenzo)です。このシリーズでは「Google ColaboratoryのGoogle認証を自動化しよう」について全3回でお送りします。今日は第2回目です。前回のおさらい前回は、「Google認...

今日は、最終回で、「Googleドライブを自動でマウントしよう」 をお届けします。

Drive APIとSpreadSheetAPIをONにする

サービスアカウントで認証を行う為に、GCPのAPIライブラリで、各サービスのAPIを有効にする必要があります。

Google Cloud console

今回は、ドライブとスプレッドシートのAPIをONにしましょう。

こちらのリンク先がドライブです。「有効にする」をクリックします。

こちらのリンク先が、スプレッドシートです。「有効にする」をクリックします。

鍵を作成する

前回作成したサービスアカウントを表示して、メールアドレスをクリックします。 

上部の[キー]をクリックして、[鍵を追加]から[新しい鍵を作成]をクリックします。 

キーのタイプを[JSON]にチェックをいれて、[作成]をクリックします。 

すると、ダウンロードがはじまります。所定の場所に「JSONタイプの秘密鍵」をダウンロードできています。 

秘密鍵はテキストファイルなので、メモ帳などで開けます。

こちらが、ファイルの中身ですが、JSONであることがわかります。(JSONについてはこちらの記事を参照ください) 

秘密鍵は、後ほど使います。秘密鍵は大事な個人情報なので、他人に漏れないように管理しましょう。

認証用スタンドアロンスクリプトを作成する

GASのスタンドアロンスクリプトを作成します。名前はなんでもかまいません。 

コード.gs」のスクリプトファイル内に、以下のコードを記述します。

function doGet(e) {

  const json ={
  
  };

  return ContentService.createTextOutput(JSON.stringify(json)).setMimeType(ContentService.MimeType.JSON);
}

const json ={ };の中に、先ほどのJSONの{}の中身をコピペします。({}が2重になってしまわないように気を付けましょう。) 

上書き保存します。

WEBアプリとして公開する

このスクリプトファイルをWEBアプリとして公開します。右上の「デプロイ」から「新しいデプロイ」をクリックします。 

歯車をクリックして、「ウェブアプリ」をクリックします。 

アクセスできるユーザーを「全員」にします。最後に「デプロイ」をクリックします。 

デプロイするとURLが発行されますので、コピーしておきます。 

フォルダ作成と共有

マイドライブで、作業用のフォルダを作成します。名前はなんでもかまいません。 

そのフォルダに共有権限を設定します。 

誰に、フォルダ編集の権限を与えるかというと、そうです。前回作成したサービスアカウントです。 

これで、サービスアカウントが、フォルダを編集する権限をもちます

Google Colaboratoryを用意する

Google Colaboratoryのファイルを新規作成します。 

名前をつけておきましょう。なんでもかまいません。

下記コードを書きます。[‘デプロイURL’]には、WEBアプリとして公開したURLを記入します。

import json
import requests
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
from oauth2client.service_account import ServiceAccountCredentials 

scope = ['https://www.googleapis.com/auth/drive']

# 上記で発行されたURLを記載
json_file = 'デプロイURL'

# URLの情報を辞書型へ変換
key = json.loads(requests.get(json_file).text)

# credentialsの読み込み
credentials = ServiceAccountCredentials.from_json_keyfile_dict(key, scope)

gauth = GoogleAuth()
gauth.credentials = credentials

drive = GoogleDrive(gauth)

driveを出力すると、内部で振られたアドレスが確認できます。(成功しています) 

idを確認する

フォルダIDを確認してみましょう。ブラウザからフォルダIDをコピーします。 

コードでフォルダidを取得し、assertで検証します。(assertはtry…catchと同様に例外を出力します。)

#フォルダ名を指定してフォルダIDを取得する
folder_id = drive.ListFile({'q': "title = 'オリジナルフォルダ'"}).GetList()[0]['id']

# 作成したフォルダIDと一致しているか確認
id = 'フォルダID'

# 一致していない場合はAssertionErrorがでる
assert folder_id == id 

idが一致していれば何も出力されません。一致していなければ、このような例外が発生します。 

おまけ(スプレッドシート)

スプレッドシートも同様に、認証用コードを用意します。

必要なモジュールや、scopeがドライブと異なりますが、基本的な考え方は同じです。

import gspread
import json
import requests
from oauth2client.service_account import ServiceAccountCredentials 

scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']

# 上記で発行されたURLを記載
json_file = 'デプロイURL'

# URLの情報を辞書型へ変換
key = json.loads(requests.get(json_file).text)

# credentialsを読み込む
credentials = ServiceAccountCredentials.from_json_keyfile_dict(key, scope)

gc = gspread.authorize(credentials)

ss_id = 'SSID'
sht_name = 'シート1'

workbook = gc.open_by_key(ss_id)
worksheet = workbook.worksheet(sht_name)

まとめ

以上で、「Googleドライブを自動でマウントしよう」をお届けしました。

共有とかWEBアプリとして公開は、反映に少し時間が掛かるので、待ってみてください。

Google Colabratoryは、スマホからの実行や、定期的な実行も可能です。

また、記事をまとめたいと思います。

参考資料

PyDrive

このシリーズの目次

  1. [Google Colabratory]Google認証を自動化しよう その1
  2. [Google Colabratory]Google認証を自動化しよう その2
  3. [Google Colabratory]Google認証を自動化しよう その3
タイトルとURLをコピーしました