Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
52
Help us understand the problem. What is going on with this article?
@AAkira

pythonでGoogle Spread Sheetをいじる(OAuth)

More than 3 years have passed since last update.

環境

  • Mac OSX(El Capitan)
  • Python 2.7

準備

Google Drive APIの発行

プロジェクトの作成

  • プロジェクトが無い場合は右上のExampleの箇所から新規プロジェクトの作成を行います

スクリーンショット 2016-04-11 22.46.14.png

  • プロジェクト名とIDを決める事が出来ます

スクリーンショット 2016-04-11 22.45.20.png

API

スクリーンショット 2016-04-11 22.29.31.png

  • APIを有効にしたら左の認証情報を選択し、認証情報を作成 -> サービスアカウントキーを選択します (サービスアカウントが無い場合は作成して下さい)

スクリーンショット 2016-04-11 22.30.48.png

  • JSONとP12形式が選択可能ですが、ここではJSONを利用します

スクリーンショット 2016-04-11 22.36.07.png

  • 完了するとJSONファイルが自動的にダウンロードされます

スプレッドシート側の共有設定

  • 使用するスプレッドシートの右上にある共有ボタンを押し、ダウンロードしたJSONファイルに記載されているclient_emailの欄のアドレスを入力します

スクリーンショット 2016-04-11 22.53.04.png

  • id

urlのhttps://docs.google.com/spreadsheets/d/***********/edit
アスタリスク部分がidになります

Python

ライブラリのインストール

  • ライブラリ
    • oauth2client
      sudo pip install --upgrade oauth2client --ignore-installed six
    • gdata (google正規: 今回は使わない)
      sudo pip install gdata --ignore-installed six
    • gspread (こちらの方が便利そうなので今回はこっちを使用します)
      sudo pip install gspread --ignore-installed six

※ El Capitanでは System Integrity Protection (SIP)のせいでpipのinstallが失敗するので、--ignore-installed sixを最後に付けてます

Code

  • 以前はSignedJwtAssertionCredentialsクラスが使用されていたのですが、2016/02にライブラリのアップデートがありServiceAccountCredentialsを使うようになりました

import os
import gspread
from oauth2client.service_account import ServiceAccountCredentials

def main():
    scope = ['https://spreadsheets.google.com/feeds']
    doc_id = 'Your doc id'
    path = os.path.expanduser("Path of json file")

    credentials = ServiceAccountCredentials.from_json_keyfile_name(path, scope)
    client = gspread.authorize(credentials)
    gfile   = client.open_by_key(doc_id)
    worksheet  = gfile.sheet1
    records = worksheet.get_all_values()

    for record in records:
        print(record)

if __name__ == '__main__':
    main()
52
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
AAkira
Android Engineer, Kotlin
cyberagent
サイバーエージェントは「21世紀を代表する会社を創る」をビジョンに掲げ、インターネットテレビ局「AbemaTV」の運営や国内トップシェアを誇るインターネット広告事業を展開しています。インターネット産業の変化に合わせ新規事業を生み出しながら事業拡大を続けています。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
52
Help us understand the problem. What is going on with this article?