PythonでKindleの新着本データをGoogleスプレッドシートに出力する方法(その1)

Googleスプレッドシートにhelloを表示

この記事では、Kindleの
Webページのデータを
取得(Webスクレイピング)した結果を
Googleスプレッドシート に
整理する方法について解説します。

ただし今回は
Kindleのデータ取得は行わず
次回行います。


Googleスプレッドシートの準備の
記事に画像がふんだんに必要に
なりましたので
記事が長くなってしまいましたが
そのぶん、中身がありません😂

なお、今回の記事・プログラムは
ほぼ全てが小生にとって初めてでした。

全てググるところから入り、
Googleスプレッドシートの設定ミスで
3時間ほどハマり、試行錯誤・原因究明
をして記事を仕上げました。

記事作成まで含めて14時間ですが

・他のサイトのマネをして
 プログラミングしながら
・4時間ハマり
・どうしても調べないといけない
 こと(Google APIとか)を調べながら
・後述の絵を書いて理解しながら

で実質、8時間です。

最初はこんなものです。
大半がハマりと調査の時間なので
次回から、同じことをするときは
新しいトラブルが発生しない限り
今回ほど時間はかからないでしょう。

前提

この記事は Windows 10上で、
Python3 を Anaconda 環境上で使う
ことを前提に書いています。

また、前回の記事
『PythonでAmazon Kindleの書籍をWebスクレイピング』
からの続編のため
前回の記事の内容を進めてからでないと
本記事の内容は実行できません。

動作を確認した環境

OS: Windows 10 20H2 (OSビルド 19042.804)
Python 3.8.3

この記事の目的とやらなくて良いこと

この記事は、
これだけのプログラムを作るだけでも
こんなことができてしまう
ということを説明するためのもの
です。

そのため、プログラムの中身を
隅から隅まで理解してもらう
ことは目的としていませんし
隅から隅まで理解してもらう必要も
ない
のです。


後ろを
流し読み程度で見ていただけたら十分
です。

というのも、難しく見えている部分の
大半が
だれかが作った関数の呼び出しで
この場でしか通用しないからです。

これらは、プログラムを作るときに
調べて動くように組み合わせて
作り上げていくときにだけ
理解が必要となるものです。
つまり、
今理解するべき内容ではない
のです。

それでも他でも使うから
というのでしたら
プログラムやメモ書きに
覚えさせておけば良いと思います。

プログラム作成前の準備

前回の記事内容で行った準備

『PythonでAmazon Kindleの書籍をWebスクレイピング』
で実行したインストール等の準備を行ってください。
プログラムは本記事で再掲載して改良するため
前回の記事から取ってくる必要はありません。

Googleアカウントとその他の準備

Googleアカウントの作成

以下のサイトの説明を参照して
Googleアカウントを作成してください。

Google アカウントの作成 - Google アカウント ヘルプ
Google アカウントは、多くの Google サービスへのアクセスに使用できます。Google アカウントを使用すると、次のようなことができます。 Gmail でメールを送受信する YouTube で新しいお気に入り動画を見つける

Google APIのプロジェクトの作成

以下のサイトにアクセスしてください。

下記の『プロジェクトを作成』をクリックしてください。

プロジェクト名を入力して『作成』を押してください。
ここでは、後々、pythonで
Googleのアプリを操作するときは
このプロジェクトを使うということから
『python-control』としました。

下記のようなものが右側に表示されたかと思います。

Google Drive APIの有効化

次に下記の『Google APIs』ロゴを押してください。

すると、下記の表示になるので
『python-copntrol』になっていることを確認し
『ライブラリ』をクリックしてください。

下記の表示になるので、検索ボックスに
Google Driveを表す『drive』を入力してください。

Googleスプレッドシートは
Google Drive上にデータを保存するため
Google Driveにもアクセスできるようにする
ということですね。

途中で画面が勝手に切り替わりますが
びっくりしないよう。

切り替わると、
Google Drive APIが表示されるので
クリックしてください。

『有効にする』をクリックしてください。

Google Sheets APIの有効化

『Google Drive APIの有効化』で行ったとおり
『Google APIs』のロゴをクリックして
『ライブラリ』を選んで検索ボックスに
こんどは『sheet』と入力してください。
すると下記の画面になるので
『Google Sheets API』をクリックしてください。

『有効にする』をクリックしてください。

サービスアカウントキーの作成

前の画面からの続きで
以下の表示になると思います。
下記の『認証情報を作成』を
クリックしてください。
左のメニューの『認証情報』を
クリックしても
画面の上のほうに出てきます。

『サービスアカウント』を
クリックしてください。

『Google Cloud Platform』という
ページの画面に切り替わります。
『サービスアカウントを作成』
をクリックしてください。

下記の画面になるので、
サービスアカウント名を
入力して『作成』してください
ここではプロジェクト名と同じ
『python-control』としています。

下記画面になるので
『ロールを選択』を
選んでください。

以下のポップアップが出るので
『基本』『編集者』を
選んでください。

③は不要です。
『完了』を押してください。

以下の画面になります。
『キーがありません』
と表示されるので
『︙』を押して
『キーを作成』
を押してください。

以下のポップアップが出るので
『 JSON 』を選んで『作成』
してください。

下方にファイルが
ダウンロードされます。
『閉じる』を押して
『^』をクリックして
ダウンロード場所を
開いてください。

notepadやサクラエディタ
Visual Studio Codeなどの
エディタでファイルを
開いて『client-email』の
メールアドレスを控えてください。

スプレッドシートの作成と共有

下記をクリックして
スプレッドシートを
作成してください。

Google Sheets: Sign-in
Access Google Sheets with a personal Google account or Google Workspace account (for business use).

タイトルを『Kindle新着本』と
入力してください。
『共有』をクリックしてください。

控えておいた『client-email』の
メールアドレスを入力して
必ず Enter を押してください。
『完了』を押すと設定されたことに
ならず、これで後でハマりました。

なお、上記の設定は
ここのgspreadのサイト
英語ですが記載されています。
英語であっても
最近は右クリックで
『日本語に翻訳』が出るので
問題ありません。

次に『送信』を押してください。
これで完了です。

必要なPythonモジュールのインストール

Anaconda Powershell Prompt上で
以下のコマンドを実行して
Webの自動操作とHTML解析をする
Pythonモジュールをインストールしてください。

conda install -c conda-forge oauth2client
conda install -c conda-forge gspread

プログラムの内容

今回のプログラムは
’hello’を表示させるだけなので
ループも条件分岐もなく本当に1直線です。

[write_hello_to_gss.py]

import gspread  # Googleスプレッドシート操作モジュール
                # https://gspread.readthedocs.io/en/latest/
from google.oauth2.service_account import Credentials as cred # Google OAuth認証モジュール

# Google APIで発行したキーファイルの保存場所を変数に代入
keyfile = 'F:\python_generic\google_spread_sheet\classes\python-control-305710-98fa3786dd4c.json'

# 操作対象のoogleスプレッドシートのブック名を変数に代入
bookname = 'Kindle新着本'

# 操作対象のGoogleスプレッドシートのシート名を変数に代入
sheetname = 'シート1'

# Google APIを使用する範囲(scope)を設定する。
# Googleスプレッドシートと、それを保存するGoogle Driveを読み書きする範囲に設定する。
# scopeの値は ⇒ https://developers.google.com/sheets/api/guides/authorizing
# spreadsheet scope でWeb検索して見つかった
scope = ['https://www.googleapis.com/auth/spreadsheets',
         'https://www.googleapis.com/auth/drive']

# キーファイルと使用範囲から資格情報(credential)を取得する
credentials = cred.from_service_account_file(keyfile, scopes=scope)

# 資格情報をもとに、Googleスプレッドシートへのアクセスの承認を得る(authoprize)
gc = gspread.authorize(credentials)

# ブック名を指定してGoogleスプレッドシートを開く
book = gc.open(bookname)

# ブック内のワークシートを取得する
sheet = book.worksheet(sheetname)

# ワークシート内の'A1'セルを'hello'に更新(update)する
sheet.update_acell('A1','hello')

# その他のワークシート操作は下記サイトにある
# 参考:https://qiita.com/plumfield56/items/dab6230512f3381fdcad

# 手元のプロンプト画面に更新した内容を表示する
print(sheet.acell('A1'))

この絵がプログラムの全てを説明しています。
ただ、この絵に書いてある仕組みは
私はまるで知らなかったので
理解しながらプログラミングしながら
作り上げたものです。
つまり最初から全てを理解していなくても
見よう見まねで作れてしまうものなのです。

実行結果

今回は動画で見せるほどの
動きのあるものではありません。

以下を実行してください。

python write_hello_to_gss.py

実行結果は下の画面のようになります。
“hello”が表示されます。

まとめ

いかがでしたでしょうか。
これで次回はKindleから取ってきた
データをGoogleスプレッドシートに
書き出せそうになりました。

後は作っている最中にたまたま見つけた
このサイトに書いてある関数を使って
データの内容をもとに繰り返しをして
セルを埋めていけば出来上がりそうです。

イメージは湧きましたでしょうか?
イメージを描くことが一番大事です。

では、次回をお楽しみください。😊

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