【初心者向け】Pythonでデータをurl指定したスプレッドシートに書き出す

pythonでheader(strのリスト)とdata(headerの要素をキーにもつ辞書)をurlで指定されたスプレッドシートに書き込む方法です。



Pythonからスプレッドシートを操作するには、以下の手順が必要です。


## Google APIの有効化
スプレッドシートにアクセスするためには、Google APIを有効化する必要があります。具体的には、Google Developers ConsoleでAPIキーと認証情報を作成し、必要なAPIを有効にする必要があります。

## Google APIライブラリのインストール
操作に必要なGoogle APIライブラリをインストールする必要があります。具体的には、google-auth、google-auth-oauthlib、google-auth-httplib2、google-api-python-clientなどのライブラリを使用します。


## 認証
スプレッドシートにアクセスするためには、認証が必要です。OAuth2.0認証を使用する場合は、認証情報を作成し、google-authライブラリを使用して認証を行います。

## スプレッドシートの取得
スプレッドシートのIDを指定して、google-api-python-clientライブラリを使用してスプレッドシートを取得します。

## セルの操作
スプレッドシートのセルにデータを書き込むには、google-api-python-clientライブラリを使用して、スプレッドシートのID、シート名、セルの位置、書き込むデータなどを指定してAPIリクエストを送信します。


## シートの操作
スプレッドシートのシートの作成、削除、名前の変更、セル範囲の操作などを行うには、google-api-python-clientライブラリを使用してAPIリクエストを送信します。

## Pythonコード例

Google Sheets APIを使用してPythonで指定されたスプレッドシートにヘッダーとデータを書き込みます。
この例では、Google Cloud ConsoleでAPIキーを作成し、APIキーを使用して認証を行っています。


```python
import gspread
from google.oauth2 import service_account
import requests

# スプレッドシートID
SPREADSHEET_ID = 'スプレッドシートのID'
# APIキー
API_KEY = 'あなたのAPIキー'

# Google Sheets APIにアクセスするための認証情報を取得
scope = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive']
credentials = service_account.Credentials.from_service_account_info({
    'type': 'service_account',
    'project_id': 'プロジェクトID',
    'private_key_id': '秘密鍵ID',
    'private_key': '-----BEGIN PRIVATE KEY-----\n秘密鍵\n-----END PRIVATE KEY-----\n',
    'client_email': 'メールアドレス',
    'client_id': 'クライアントID',
    'auth_uri': 'https://accounts.google.com/o/oauth2/auth',
    'token_uri': 'https://oauth2.googleapis.com/token',
    'auth_provider_x509_cert_url': 'https://www.googleapis.com/oauth2/v1/certs',
    'client_x509_cert_url': 'https://www.googleapis.com/robot/v1/metadata/x509/メールアドレス'
})

# Google Sheets APIを使用して、指定されたスプレッドシートを取得
gc = gspread.authorize(credentials)
sheet = gc.open_by_key(SPREADSHEET_ID).sheet1

# ヘッダーを書き込む
header = ['ヘッダー1', 'ヘッダー2', 'ヘッダー3']
sheet.insert_row(header, 1)

# データを書き込む
url = f'https://sheets.googleapis.com/v4/spreadsheets/{SPREADSHEET_ID}/values/A2:C'
params = {'valueInputOption': 'USER_ENTERED', 'key': API_KEY}
data = {'range': 'A2:C', 'majorDimension': 'ROWS', 'values': [
        ['データ1', '1', '2022/04/01'],
        ['データ2', '2', '2022/04/02'],
        ['データ3', '3', '2022/04/03']
        ]}
response = requests.put(url, params=params, json=data)
if response.status_code == 200:
    print('データを書き込みました')
else:
    print(f'エラーが発生しました: {response.text}')

```




注意点として、insert_row関数を使用してヘッダーを書き込むと、書き込み先の行がずれる可能性があるため、上記の例ではヘッダーを1行目に書き込むようにしています。

上記の例では、APIキーを直接コードに埋め込んでいますが、APIキーをコードに埋め込むことはセキュリティ上のリスクがあるため、実際には環境変数などに保存して参照することが推奨されています。

また、スプレッドシートに書き込む前に、Google Sheets APIを有効化し、Google Cloud Consoleで認証情報を作成する必要があります。具体的な手順については、Google Sheets APIの公式ドキュメントを参照してください。

さらに、この例ではデータを文字列のリストとして扱っていますが、Google Sheets APIはJSON形式のデータを受け取るため、jsonモジュールを使用して辞書形式のデータをJSON形式に変換してAPIリクエストを送信しています。

以上を踏まえて、実際に使用する際には、APIキーなどを適切に設定し、データの形式や書き込み先のセルなどを適宜変更してください。





## 参考になる書籍など
・[シリコンバレー一流プログラマーが教える Pythonプロフェッショナル大全](https://amzn.to/3MGEPBY)
・[Python業務自動化マスタリングハンドブック (Python定番セレクション) ](https://amzn.to/3GGQ4GV)
・[独学で身につけるPython〜応用編〜【業務効率化・自動化で残業を無くそう！】](https://click.linksynergy.com/deeplink?id=Qw*xM8wv/u4&mid=47984&murl=https%3A%2F%2Fwww.udemy.com%2Fcourse%2Fpython-kaizen-advanced%2F)