Python初心者が、Anaconda3を利用しGoogleスプレッドシートを読み込みしてみる。

Python初心者が、Anaconda3でPython環境を構築し、Googleスプレッドシートを読み込みしてみる。(Windows10上)

今回のPythonのバージョンは「Python 3.7.6」。

まずは、新しいCloud Platformプロジェクトが作成され、Google Sheets APIが自動的に有効される「Python Quickstart」にアクセスする。

アクセス後、「Step 1: Turn on the Google Sheets API」と表記されている箇所に、「Enable the Google Sheets API」という青水色のボタンをクリックします。

クリックしますが、この時、お持ちのGoogleアカウントにログインしておく必要があります。

クリックすると、「Enable the Google Sheets API」というポップアップが表示されます。

「Enter new project name」は、すでに「Quickstart」という名前が設定されていますので、変更しない場合はこのままで大丈夫です。

「Enter new project name」の下の「I agree that my use of any services and related APIs is subject to compliance with the applicable Terms of Service.(サービスおよび関連APIの使用は、適用されるサービス利用規約に従うことに同意します。) 」 は、利用規約を確認し、問題なければ、「Yes」を選択します。

選択後、「NEXT」をクリックします。クリックすると、「Configure your OAuth client(オーオースクライアントの設定)」というポップアップが表示されます。

PC(Windows10)から操作しており、Windows10上で使うので、「Desktop app」という設定のまま、「CREATE」をクリックします。(※なお、「Desktop app」以外にも設定できます。)

クリックすると、「You’re all set!(準備完了!」というポップアップが表示されます。「You’re ready to start developing!(開発を始める準備ができました!)」という表記の下に「DOWNLOAD CLIENT CONFIGURATION」という青水色のボタンがあるので、クリックします。

クリックすると、GoogleChromeであれば、「credentials.json」というファイルがダウンロードされ、指定されたローカル上の保存場所に保存されます。「You’re all set!(準備完了!」というポップアップには、「Client ID」と「Client Secret」が表示されているので情報を保存する。

■Googleスプレッドシートの作成とIDの準備

お持ちのGoogleアカウントにログインした状態で、Googleスプレッドシートの作成を行う。

新しいスプレッドシートの作成から、「空白」を選択。

スプレッドシートID(参考例)「1N52jrtMNxotiiCc7DXm3yIGMnfDy-5emlY6MScU9rmg」

GoogleChromeなどのアドレスバーに表示されたURLに表示されている上記のスプレッドシートIDを保存する。

■仮想環境の構築

仮想環境の構築を行っていきます。まず、Anacondaというデータサイエンス向けのPythonパッケージなどを提供するプラットフォームをインストールする。

Anacondaをインストールするには、Anacondaのサイト(https://www.anaconda.com/products/individual)へアクセスする。

アクセスすると、サイトの下部に、「Windows」という表記があります。2020年5月確認。

「Python 3.7」と、「Python 2.7」に分かれており、今回は、「Python 3.7」の「64-Bit Graphical Installer (466 MB)」をダウンロードする。

「64-Bit Graphical Installer (466 MB)」の文字をクリックするとダウンロードが開始されます。

ダウンロードが完了すると、指定されたローカル上の保存場所に保存されたので、「Anaconda3-2020.02-Windows-x86_64.exe」をクリックしてインストールが開始されます。

「Anaconda3 2020.02(64-bit)Setup」が表示されますので、「Next」ボタンをクリックします。

次は「License Agreement(ライセンス契約)」が表示されますので、内容を確認し、同意するなら、「I Agree」ボタンをクリックします。

次は「「select Installation Type(インストールの種類を選択)」が表示されます。「Just Me(recommended)・私だけ(推奨)」か「All Users (requires admin privileges)・すべてのユーザー(管理者権限が必要です)」のどちらか選択となります。今回は推奨されている「Just Me(recommended)・私だけ(推奨)」を選択し、「Next」ボタンをクリックします。

次は「Choose Install Location(インストール場所の選択)」が表示されます。「Destination Folder(インストール先フォルダ)」にAnaconda3をインストールする場所を設定します。

デフォルトのままで問題がなければ、「Next」ボタンをクリックします。

次は「Advanced Installation Options(高度なインストールオプション)」が表示されます。オプションとして「Add Anaconda3 to my PATH environment variable(PATH環境変数にAnaconda 3を追加する)」か、「Register Anaconda3 as my default Python3.7(Anaconda 3をデフォルトのPython 3.7として登録する)」が選択できます。「Add Anaconda3 to my PATH environment variable(PATH環境変数にAnaconda 3を追加する)」は、説明文に「Not recommended(推奨しない)」と表記されており、「Register Anaconda3 as my default Python3.7(Anaconda 3をデフォルトのPython 3.7として登録する)」のみ追加して、「Install」ボタンをクリックします。

インストールが開始されます。

しばらくすると、インストールが完了。完了後は、「Next」ボタンをクリックします。

次に「Anaconda+JetBrains」というポップアップが表示されますので、「Next」ボタンをクリックします。

次に「Thank you for installing Anaconda Individual Edition.(Anaconda Individual Editionをインストールしていただきありがとうございます。)」というポップアップが表示されます。「Anaconda Individual Edition Tutorial(Anaconda Individual Editionチュートリアル)
」、「Learn More About Anaconda(Anacondaの詳細)」という項目にチェックが入っています。変更された方は変更できます。

問題がなければ、「Finish」ボタンをクリックして、インストールは完了です。

今回インストールした、Anaconda3にはconda コマンドがインストールされており、conda コマンドを使って、GoogleのAPIを利用するための仮想環境を準備していきます。

まずは、インストールしたAnaconda3の「Anaconda Powershell Prompt (Anaconda3)」を起動させます。

仮想環境に必要なモジュール「google-api-python-client」、「google-auth-httplib2」、「google-auth-oauthlib」を用意します。

こちらのサイトを参考にして、

conda create --name envname -c conda-forge google-api-python-client google-auth-httplib2 google-auth-oauthlib

 

上記のコマンドを入力します。入力すると最後に「Proceed(実行)([y]/n)?」と表示されますので、[y]と入力しENTERキーを押します。

done
#
# to activate this environment, use
#
# $conda activate envname
#
# to deactivate this environment, use
#
# $conda deactivate

実行されますので、最後に「done(完了)」といった上記のような表示が出ます。

仮想環境の準備が整い、Pythonのプロジェクトを作ります。

プロジェクトを作る際は、「credentials.json」というファイルをプロジェクトフォルダに移動する。

■テストでGoogleスプレッドシートを読み込む

前に作成したGoogleスプレッドシートのスプレッドシートID(参考例)「1N52jrtMNxotiiCc7DXm3yIGMnfDy-5emlY6MScU9rmg」が必要となります。

Googleスプレッドシートの中身は、テスト用に編集しておきます。

■コード

from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build


SAMPLE_SPREADSHEET_ID = '1N52jrtMNxotiiCc7DXm3yIGMnfDy-5emlY6MScU9rmg'  # 操作したいシートのID
SAMPLE_RANGE_NAME = 'A1:C3'  # 操作したいレンジ


# Read only
SCOPES = ['https://www.googleapis.com/auth/spreadsheets.readonly']
# Read and write の場合は↓を指定する
# SCOPES = ['https://www.googleapis.com/auth/spreadsheets']


# APIへのアクセストークンを要求する
flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPES)
creds = flow.run_local_server(port=0)

こちらのサイトを参考にコードを作成。「googlespreadsheets-test.py」というファイル名で保存し、「credentials.json」と一緒に「googlesheet」というプロジェクトフォルダにまとめます。

「googlespreadsheets-test.py」を実行。

実行するが、「ModuleNotFoundError: No module named ‘google_auth_oauthlib’」とエラーが表示され、実行できない。翻訳すると「’google_auth_oauthlib’という名前のモジュールがありません」という内容。

「Anaconda Powershell Prompt (Anaconda3)」から

conda install -c conda-forge google-auth-oauthlib

上記のコマンドで「google_auth_oauthlib」をインストールしてみる。インストール後、「googlespreadsheets-test.py」を実行してみるが、今後は「ModuleNotFoundError: No module named ‘googleapiclient’」とエラーが表示され、実行できない。「’googleapiclient’という名前のモジュールがありません」となる。

conda install -c conda-forge googleapiclient

「conda install -c conda-forge google-auth-oauthlib」を応用し、上記の記述で実行。実行するも「googleapiclient」をインストールできず、いろいろ調べてみた結果。

1.virtualenvをインストール。

pip install virtualenv
virtualenv <your-env>
<your-env>\Scripts\activate
<your-env>\Scripts\pip.exe install google-api-python-client

参考:https://github.com/googleapis/google-api-python-client

2.google-api-python-clientをインストール。

pip install --upgrade google-api-python-client

参考:https://s51517765.hatenadiary.jp/entry/2019/03/29/073000

上記のことを行う。「1」と行い「2」を行った結果、「’googleapiclient’という名前のモジュールがありません」というエラーは表示されず問題は解決したようが、「FileNotFoundError: [Errno 2] No such file or directory: ‘credentials.json’」という新しいエラーが表示される。

どうやら、credentials.jsonというファイルが見つからないのが原因なので、カレントディレクトリに配置する。(原因解決参考:https://teratail.com/questions/183066

カレントディレクトリに配置して、再び「Anaconda Powershell Prompt (Anaconda3)」から実行してみる。

実行してみると、Windows10の「Microsoft Edge」が起動される。持っているGoogleアカウントでログインしてみる。ID、パスワード、2段階認証プロセスも認証する。

2段階認証プロセスも認証後、「このアプリは確認されていません」という表示になります。水色の「安心なページに戻る」ボタンはクリックせずに、左下の「詳細」をクリックします。

クリックすると、「Google ではまだこのアプリを確認していないため、アプリの信頼性を保証できません。未確認のアプリは、あなたの個人データを脅かす可能性があります。」という文章が表示されます。その下の「Quickstart(安全ではないページ)に移動」をクリックします。

クリックすると、「Quickstart への権限の付与」というポップアップが表示されます。「Google スプレッドシートの表示」が選択されていますので、これを「許可」をクリックして許可します。

許可すると、「選択内容を確認してください」というポップアップが表示され、「QuickstartにGoogle スプレッドシートの表示を許可しています」といった内容なので確認し水色の「許可」ボタンをクリックします。

クリックすると、「The authentication flow has completed. You may close this window.」という文章が表示されます。翻訳すると、「認証フローが完了しました。このウィンドウは閉じてもかまいません。」という意味になりますので、認証が完了したということなので、「Microsoft Edge」を閉じます。

認証が完了して、「googlespreadsheets-test.py」というファイルを実行してみます。実行してみるのですが、毎回「Microsoft Edge」が起動し、Googleアカウントで許可されてしまうので、pickleと呼ばれるオブジェクトを保存・復元する標準ライブラリを使って、APIへのアクセストークン(オブジェクト)を保存することにしてみました。

import pickle

「googlespreadsheets-test.py」というファイルに、上記のコードを記述します。pickleは、標準ライブラリのため、インストールは必要ありません。

さらに、

with open('token.pickle', 'wb') as token:
pickle.dump(creds, token)

上記を記述し、アクセストークンcreds オブジェクトを「token.pikcle」に保存させます。

「Anaconda Powershell Prompt (Anaconda3)」で「googlespreadsheets-test.py」というファイルを実行すると、カレントディレクトリに、

pickleファイルが作成されます。pickleファイルが作成されましたので、毎回「APIへのアクセストークンを要求する」という動作は必要なくなります。

動作は必要なくなり、pickeファイルに保存されたアクセストークンの読み込むために、

with open('token.pickle', 'wb') as token:
pickle.dump(creds, token)

上記の記述を変更します。

with open('token.pickle', 'rb') as token:
creds = pickle.load(token)

「pickle.load(token)」といった形に変更し記述します。

values = result['values']
for row in values:
print(row[0],row[1])

さらに、今回作成したGoogleスプレッドシートを読み込み、結果を出力させるためにテストで上記のコードを記述します。

■最終的なコード

import pickle
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build


SAMPLE_SPREADSHEET_ID = '1N52jrtMNxotiiCc7DXm3yIGMnfDy-5emlY6MScU9rmg'  # 操作したいシートのID
SAMPLE_RANGE_NAME = 'A1:C3'  # 操作したいレンジ


# Read only
SCOPES = ['https://www.googleapis.com/auth/spreadsheets.readonly']
# Read and write の場合は↓を指定する
# SCOPES = ['https://www.googleapis.com/auth/spreadsheets']


## APIへのアクセストークンを要求する
#flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPES)
#creds = flow.run_local_server(port=0)


# 認証情報を保存します
with open('token.pickle', 'rb') as token:
   creds = pickle.load(token)


# Google スプレッドシートへアクセスする
service = build('sheets', 'v4', credentials=creds)


# セルの値を読み取る
result = service.spreadsheets().values().get(spreadsheetId=SAMPLE_SPREADSHEET_ID, range=SAMPLE_RANGE_NAME).execute()


values = result['values']
for row in values:
    print(row[0],row[1])

「APIへのアクセストークンを要求する」という動作は、コメントアウトしています。

この実行プログラムを「Anaconda Powershell Prompt (Anaconda3)」で実行します。

実行してみると、今回作成したGoogleスプレッドシートを読み込み、結果を出力させることができました。

■初心者の私が注意すべき点

Widows10上では、単独で「Python 3.8.2」がインストールされており、こちらでプログラムを実行しようとした。Anacondaは、PythonおよびR言語の無料のオープンソースディストリビューションという複数のものをひとまとめにしたものであり、Anaconda3の中にもPythonが入っていることに注意しなければいけない。Anaconda3でPython環境を構築し、プログラムを実行する場合は、「Anaconda Powershell Prompt (Anaconda3)」から実行しないといけない。

コメント

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