Google Sheets API – Python Quickstart

Google Sheets API

Google スプレッドシート

もしかしたら初めて聞く方もいるかもしれないですか、基本ブラウザで使えるエクセルだと思っておけばよいです。

但し、個人的には、Google スプレッドシートがあればMicrosoftエクセルはいらないのではないかと思ってるぐらい便利です。
(というかMicrosoftのエクセルは年単位のライセンス購入をしていたのですが、金も無駄だし解約しました。)

自分も全然使い込んでないのですが、少し使うだけも分かるメリットとしては

・Google アカウントがあれば誰でも無料で使える
複数人での編集が同時に可能
・バックアップをスナップショットで自動で取得してくれる
・Linuxでも使える

は使ってみてすぐ思いました。

まず無料だし、できることにも大差なさそうなので、Microsoftエクセルで無駄に金をかける必要もないし、

何といっても一番恩恵を受けられるのは仕事で複数人でエクセルをいじる時ではないでしょうか。

Googleスプレッドなら同時にいじれるから平行で作業ができるし、作業履歴もバックアップとして自動で残してくれるので特定の地点に戻したい時も簡単です。

唯一スプレッドシート自体にパスワードとかはかけられないみたいなので懸念してたんですけど、とりあえずアカウントにログインされなければとりあえずは大丈夫なので、そこはワンタイムパスワードら辺でGoogle Authenticator等使用すれば、シート自体にパスワードはなくても問題ないのかなと。

普段からデスクトップ環境も全部Linuxでやってるので、もう知ったときには神だわコレって感じでした。

で、そのGoogle スプレッドシートをプログラミングして使える Google Sheets APIってのがあったので、それを掲載しておきます。

 

Python Quickstart

以下のURLが公式サイトです。(英語のみのようです。)

https://developers.google.com/sheets/quickstart/python?hl=ja

 

Prerequisites

Prerequisites

To run this quickstart, you’ll need:

・Python 2.6 or greater.
・The pip package management tool.
・Access to the internet and a web browser.
・A Google account.

以下は事前に済ませておきましょう。

・Pythonのインストール

・pipのインストール

・Chrome(Googleのものを使うときはChromeでやりましょう。)

・Googleアカウント

 

Step 1: Turn on the Google Sheets API

a. Use this wizard to create or select a project in the Google Developers Console and automatically turn on the API. Click Continue, then Go to credentials.
b. On the Add credentials to your project page, click the Cancel button.
c. At the top of the page, select the OAuth consent screen tab. Select an Email address, enter a Product name if not already set, and click the Save button.
d. Select the Credentials tab, click the Create credentials button and select OAuth client ID.
e. Select the application type Other, enter the name “Google Sheets API Quickstart”, and click the Create button.
f. Click OK to dismiss the resulting dialog.
g. Click the file_download (Download JSON) button to the right of the client ID.
h. Move this file to your working directory and rename it client_secret.json.

 

まず、手順aの部分のthis wizardをクリックすると以下の画面が表示されるので、両方とも「はい」を選択して、「同意して続行」を選択しましょう。

 

続いて以下の画面が表示されるので、「認証情報に進む」を選択しましょう。

 

「2.認証情報を取得する」の欄にある「キャンセル」を選択します。

 

「OAuth同意画面」のタブを選択すると以下画面が表示されるので、「メールアドレス」を選択し、「ユーザーに表示するサービス名」に適当なものを入力し、「保存」してください。

 

「認証情報」をタブが選択されていることを確認し、「認証情報を作成」ボタンを選択する

 

「OAuthクライアントID」を選択してください。

 

「その他」を選択し、名前に「Google Sheets API Quickstart」と入力して、「作成」を選択してください。
「クライアント ID」と「クライアント シークレット」が記載されたダイアログが表示されますので、「OK」を選択して閉じてください。

 

画面右側にダウンロードアイコンがあるかと思うので、クリックして、JSONをダウンロードしておきましょう。
ダウンロード後、このファイルをAPIを利用する任意のワークディレクトリに移動して、わかりやすいように「client_secret.json」でリネームしておきましょう。

 

Step 2: Install the Google Client Library

Googleクライアントライブラリをインストールしましょう。

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

 

Step 3: Set up the sample

client_secret.json」を配置した同じワークディレクトリへ以下のサンプルコードをコピーして配置しましょう。

quickstart.py

from __future__ import print_function
import httplib2
import os

from apiclient import discovery
from oauth2client import client
from oauth2client import tools
from oauth2client.file import Storage

try:
    import argparse
    flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args()
except ImportError:
    flags = None

# If modifying these scopes, delete your previously saved credentials
# at ~/.credentials/sheets.googleapis.com-python-quickstart.json
SCOPES = 'https://www.googleapis.com/auth/spreadsheets.readonly'
CLIENT_SECRET_FILE = 'client_secret.json'
APPLICATION_NAME = 'Google Sheets API Python Quickstart'


def get_credentials():
    """Gets valid user credentials from storage.

    If nothing has been stored, or if the stored credentials are invalid,
    the OAuth2 flow is completed to obtain the new credentials.

    Returns:
        Credentials, the obtained credential.
    """
    home_dir = os.path.expanduser('~')
    credential_dir = os.path.join(home_dir, '.credentials')
    if not os.path.exists(credential_dir):
        os.makedirs(credential_dir)
    credential_path = os.path.join(credential_dir,
                                   'sheets.googleapis.com-python-quickstart.json')

    store = Storage(credential_path)
    credentials = store.get()
    if not credentials or credentials.invalid:
        flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES)
        flow.user_agent = APPLICATION_NAME
        if flags:
            credentials = tools.run_flow(flow, store, flags)
        else: # Needed only for compatibility with Python 2.6
            credentials = tools.run(flow, store)
        print('Storing credentials to ' + credential_path)
    return credentials

def main():
    """Shows basic usage of the Sheets API.

    Creates a Sheets API service object and prints the names and majors of
    students in a sample spreadsheet:
    https://docs.google.com/spreadsheets/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/edit
    """
    credentials = get_credentials()
    http = credentials.authorize(httplib2.Http())
    discoveryUrl = ('https://sheets.googleapis.com/$discovery/rest?'
                    'version=v4')
    service = discovery.build('sheets', 'v4', http=http,
                              discoveryServiceUrl=discoveryUrl)

    spreadsheetId = '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms'
    rangeName = 'Class Data!A2:E'
    result = service.spreadsheets().values().get(
        spreadsheetId=spreadsheetId, range=rangeName).execute()
    values = result.get('values', [])

    if not values:
        print('No data found.')
    else:
        print('Name, Major:')
        for row in values:
            # Print columns A and E, which correspond to indices 0 and 4.
            print('%s, %s' % (row[0], row[4]))


if __name__ == '__main__':
    main()

 

Step 4: Run the sample

配置したサンプルコードを次のコマンドで実行してください。

$ python quickstart.py

 

a.The sample will attempt to open a new window or tab in your default browser. If this fails, copy the URL from the console and manually open it in your browser.
If you are not already logged into your Google account, you will be prompted to log in. If you are logged into multiple Google accounts, you will be asked to select one account to use for the authorization.
b. Click the Accept button.
c.The sample will proceed automatically, and you may close the window/tab.

 

コマンド実行後、初回実行時のみ、以下の許可を求めるリクエストがブラウザで開きますので、許可を選択しましょう。

 

認証完了後、以下がブラウザに表示されればOKです。

 

ちなみに、コマンド初回実行時は以下のような感じになります。

$ python quickstart.py 
/root/anaconda3/lib/python3.6/site-packages/oauth2client/_helpers.py:255: UserWarning: Cannot access /home/admin/.credentials/sheets.googleapis.com-python-quickstart.json: No such file or directory
  warnings.warn(_MISSING_FILE_MESSAGE.format(filename))

Your browser has been opened to visit:

    https://accounts.google.com/o/oauth2/auth?client_id=*****************************************************************

If your browser is on a different machine then exit and re-run this
application with the command-line parameter

  --noauth_local_webserver

ATTENTION: default value of option force_s3tc_enable overridden by environment.
既存のブラウザ セッションに新しいウィンドウが作成されました。
Authentication successful.
Storing credentials to /home/admin/.credentials/sheets.googleapis.com-python-quickstart.json
Name, Major:
Alexandra, English
Andrew, Math
Anna, English
Becky, Art
Benjamin, English
Carl, Art
Carrie, English
Dorothy, Math
Dylan, Math
Edward, English
Ellen, Physics
Fiona, Art
John, Physics
Jonathan, Math
Joseph, English
Josephine, Math
Karen, English
Kevin, Physics
Lisa, Art
Mary, Physics
Maureen, Physics
Nick, Art
Olivia, Physics
Pamela, Math
Patrick, Art
Robert, English
Sean, Physics
Stacy, Math
Thomas, Art
Will, Math

 

二回目の実行からは認証系が出なくなって取得した情報のみが出力されました。

$ python quickstart.py 
Name, Major:
Alexandra, English
Andrew, Math
Anna, English
Becky, Art
Benjamin, English
Carl, Art
Carrie, English
Dorothy, Math
Dylan, Math
Edward, English
Ellen, Physics
Fiona, Art
John, Physics
Jonathan, Math
Joseph, English
Josephine, Math
Karen, English
Kevin, Physics
Lisa, Art
Mary, Physics
Maureen, Physics
Nick, Art
Olivia, Physics
Pamela, Math
Patrick, Art
Robert, English
Sean, Physics
Stacy, Math
Thomas, Art
Will, Math

 

Google Sheets APIを使ったコードを今後紹介していければと思います。

コメント