【Python】Googleスプレッドシートでスライドショーを楽しむ
●概要
入浴中にスマホで様々な画像を見ているのですが、
画像URLを一個ずつ選択する操作を自動化できないか?
という問題を解消するため、
Googleスプレッドシート「IMAGE」関数を使って、
予め用意してあるリンクURLをランダムに選択して、
擬似的なスライドショーを作ってみました
●作成の流れ
・リンク画像URLを用意する(予めスクレイピングなどで用意しておく)
・Google Sheets APIを取得する(またこれに関連する設定を合せて行う)
・スライド用のスプレッドシートを用意する
・ランダムで選ばれたリンク画像URLを、表示用のスプレッドシートに張るためのソースコードを用意する
以上の流れのプログラムとなります。
●Google Sheets APIを取得する
正直に言いますと、自分が拙い説明をするより、
下記のキノコード様の動画が見ながら、APIを入手してください。
●動画
●画像を表示する為のスプレッドシートを用意する
新しくスプレッドシートを用意して、
任意のファイル名とシート名を記載する。
またAPIでアクセルできるよう、共有設定も済ませておく
↓↓↓
標示するセルに「=IMAGE(B2,1)」という
画像リンクIDを表示させる、IMAGE関数を入力しておく
![](https://assets.st-note.com/img/1654075037807-rI9h8ssLTo.jpg?width=1200)
↓↓↓
B2に画像リンクを張る用のセルを用意する
↓↓↓
別シートで表示させたい画像リンクの一覧を張っておく
※ここではシート「リスト記載用」のA行に張っておきます
●ソースコードを記載する
下準備が整ったところでコードをjupyter labで記載をします。
以下が完成形です
!pip install gspread
!pip install gspread oauth2client
import gspread
from oauth2client.service_account import ServiceAccountCredentials
import random
import time
SCOPES = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']
SERVICE_ACCOUNT_FILE = 'APIの秘密鍵'
credentials = ServiceAccountCredentials.from_json_keyfile_name(SERVICE_ACCOUNT_FILE, SCOPES)
gs = gspread.authorize(credentials)
# スプレッドシートのURLとシート設定
SPREADSHEET_KEY01 = 'スプレッドシートのd/と/editの間がURLとなる'
# 画像を表示させるシート
worksheet01 = gs.open_by_key(SPREADSHEET_KEY01).worksheet("再生用")
# 画像URLを記載するシート
worksheet02 = gs.open_by_key(SPREADSHEET_KEY01).worksheet("リスト記載用")
# 画像URLを記載するシートからランダムでリンクURLを取得する
row_list = worksheet02.col_values(1)
len01 = len(row_list)
# 無限ループでスライドを回す
while True:
# 0,len01にすると、0はセルが無いのでerrorになる
len02 = random.randrange(1,len01)
URL01 = worksheet02.row_values(len02)
worksheet01.update_cell(2, 2, URL01[0])
time.sleep(3)
では各コードの解説をします
!pip install gspread
!pip install gspread oauth2client
import gspread
from oauth2client.service_account import ServiceAccountCredentials
import random
import time
こちらでスプレッドシートに書きこむ用のパッケージと、
ランダムで数字を選択するパッケージ、
操作を一時待機させるパッケージをインポートします。
ただ「!pip install gspread」・「!pip install gspread oauth2client」は
初回だけの操作で大丈夫です。
※自分がimportはまとめて上段に記載をしたいタチなので、ここで使うものはまとめてしまいます。
SCOPES = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']
SERVICE_ACCOUNT_FILE = 'APIの秘密鍵の記載'
credentials = ServiceAccountCredentials.from_json_keyfile_name(SERVICE_ACCOUNT_FILE, SCOPES)
gs = gspread.authorize(credentials)
スプレッドシートにアクセルするためのおまじないです。
※詳しくはキノコードさんの動画を参照してください
※「'APIの秘密鍵の記載」の箇所は、APIの秘密鍵のファイル名を記載してください
# スプレッドシートのURLとシート設定
SPREADSHEET_KEY01 = 'スプレッドシートのd/と/editの間がURLとなる'
# 画像を表示させるシート
worksheet01 = gs.open_by_key(SPREADSHEET_KEY01).worksheet("再生用")
# 画像URLを記載するシート
worksheet02 = gs.open_by_key(SPREADSHEET_KEY01).worksheet("リスト記載用")
使用するスプレッドシートのファイルと、
そのファイルのスライド用のシート名、
リンク画像URLを格納しておくシート名をそれぞれ設定する
# リスト記載用からランダムでリンクURLを取得する
row_list = worksheet02.col_values(1)
# シートのA行のURLの数を数える
len01 = len(row_list)
# 無限ループでスライドを回す
while True:
#1行目から最終行の中から、ランダムで行を1つ取得する
len02 = random.randrange(1,len01)
#上記で取得した行の中のリンク画像URLを取得する
URL01 = worksheet02.row_values(len02)
#上記で取得した画像URLを、スライド表示用のセルに張る
worksheet01.update_cell(2, 2, URL01[0])
3秒待機してから、再度ループさせる
time.sleep(3)
リンク画像URLを格納しておくシートの、A行の行数を取得してから、
while文で無限ループさせる。
その際A行からランダムで選んだリンク画像URLを、
スライド標示用のシートのセルはります。
これを3秒毎に無限ループで続けます。
●最後に
以上でプログラムが終了です。
そこまで多くのコードや設定をするものではありませんでしたが、
これを作るのに1日使ってしまったので、Pythonエンジニアとしてはまだまだ実力不足である事を痛感しました。
これから作りたいプログラムはあるので、
その作成を通してPythonエンジニアのレベルを上げてい事思った次第です。
以上ここまでご覧になってくださりありがとうございました。