どん底から這い上がるまでの記録

どん底から這い上がりたいけど這い上がれない人がいろいろ書くブログ(主にプログラミング)

Google Sheets APIを使ってみる。

Google Sheets APIを使ってみたので、その導入から使い方までのメモ。

 

環境

Google Sheets APIの有効化

pythonのプログラムを動かしてGoogle Sheets APIを有効化します。

そのためにこちらのページに行きます。

f:id:pytry3g:20180721202157p:plain

ここのページに書かれている通りに進めるだけです。

Step 1: Turn on the Google Sheets API

f:id:pytry3g:20180721202500p:plain

青ボタンのENABLE THE GOOGLE SHEETS APIをクリックします。

クリックすると、この画面が出るので

f:id:pytry3g:20180721202702p:plain

Select or create projectをクリックし、

f:id:pytry3g:20180721202949p:plain

Create a new projectをクリックすると、この画面が出てきます。

f:id:pytry3g:20180721203019p:plain

デフォルトでMy Projectとなっていたので、私はそのままNEXTをクリックしました。

f:id:pytry3g:20180721203109p:plain

NEXTをクリックすると、上のConfigure your OAuth clientの画面が出るので、私はProduct Nameのところを適当にTestという名前にしました。

NEXTをクリックすると、下の画面が出てきます。

f:id:pytry3g:20180721203243p:plain

青ボタンのDOWNLOAD CLIENT CONFIGURATIONをクリックすると、credentials.jsonがダウンロードフォルダにダウンロードされます。

Step 2: Install the Google Client Library

コマンドプロンプトを開いて、下のコマンドを実行するだけです。

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

Step 3: Set up the sample

作業ディレクトリに移動して、下のコードをquickstart.pyで作ります。

ちなみに、ダウンロードフォルダにあるはずのcredentials.jsonも同じ作業ディレクトリに入れときます。

"""
Shows basic usage of the Sheets API. Prints values from a Google Spreadsheet.
"""
from __future__ import print_function
from apiclient.discovery import build
from httplib2 import Http
from oauth2client import file, client, tools

# Setup the Sheets API
SCOPES = 'https://www.googleapis.com/auth/spreadsheets.readonly'
store = file.Storage('token.json')
creds = store.get()
if not creds or creds.invalid:
    flow = client.flow_from_clientsecrets('credentials.json', SCOPES)
    creds = tools.run_flow(flow, store)
service = build('sheets', 'v4', http=creds.authorize(Http()))

# Call the Sheets API
SPREADSHEET_ID = '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms'
RANGE_NAME = 'Class Data!A2:E'
result = service.spreadsheets().values().get(spreadsheetId=SPREADSHEET_ID,
                                             range=RANGE_NAME).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]))

Step 4: Run the sample

$ python quickstart.py

コマンドプロンプトを開いて、quickstart.pyを実行すると、下のようにブラウザが開いて、アカウントの選択画面が表示されます。

f:id:pytry3g:20180721222151p:plain

Googleアカウントへのアクセスを求められているので、これを許可します。

許可すると、The authentication flow has completed.とブラウザに表示されて、作業ディレクトリにtokens.jsonが作成されているはずです。

エラーがでる

おそらく、quickstart.pyを実行すると以下のようなエラーがでると思います。

raise HttpError(resp, content, uri=self.uri)
googleapiclient.errors.HttpError: <HttpError 403 when requesting
https://sheets.googleapis.com/v4/spreadsheets/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/values/Class%20Data%21A2%3AE?alt=json
returned "Google Sheets API has not been used in project

どうやら、まだ認証が完了していないみたいなので、エラー文にあるhttps://console.developers以下のURLにアクセスして青ボタンの有効化を押します。

before or it is disabled. Enable it by visiting 
https://console.developers.google.com/apis/api/sheets.googleapis.com/overview?project=任意の番号 then retry.
If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.">

スプレッドシートを読み込む

Google Sheets APIを有効化できたので、試しにスプレッドシートを読み込んでみます。今回は自分のブログアクセス数などを書き込んだシートを使います。

f:id:pytry3g:20180721231509p:plain

例えば、このシートのA1からA32を読み込むためにはquickstart.pySPREADSHEET_IDRANGE_NAMEを以下のように変える必要があります。

"""
Shows basic usage of the Sheets API. Prints values from a Google Spreadsheet.
"""
from __future__ import print_function
from apiclient.discovery import build
from httplib2 import Http
from oauth2client import file, client, tools

# Setup the Sheets API
SCOPES = 'https://www.googleapis.com/auth/spreadsheets.readonly'
store = file.Storage('token.json')
creds = store.get()
if not creds or creds.invalid:
    flow = client.flow_from_clientsecrets('credentials.json', SCOPES)
    creds = tools.run_flow(flow, store)
service = build('sheets', 'v4', http=creds.authorize(Http()))

# Call the Sheets API
SPREADSHEET_ID = '{spreadsheetId}'
RANGE_NAME = 'A1:A32'
result = service.spreadsheets().values().get(spreadsheetId=SPREADSHEET_ID,
                                             range=RANGE_NAME).execute()
values = result.get('values', [])
if not values:
    print('No data found.')
else:
    print('Name, Major:')
    print(values)

スプレッドシートの編集画面を開くとURLはこんな感じになっています。https://docs.google.com/spreadsheets/d/{spreadsheetId}/edit#gid=0a

このURLにある{spreadsheedId}の文字の羅列をSPREADSHEET_IDのところに入れます。

読み込んだ結果

Name, Major:
[['19'], ['54'], ['89'], ['52'], ['73'], ['42'], ['26'], ['38'], ['56'], ['55'], ['48'], ['37'], ['41'], ['16'], ['20'], ['17'], ['44'], ['50'], ['52'], ['43'], [], [], [], [], [], [], [], [], [], [], [], ['872']]

続き

www.pytry3g.com