【Python】Googleスプレッドシートでスライドショーを楽しむ

●概要

入浴中にスマホで様々な画像を見ているのですが、
画像URLを一個ずつ選択する操作を自動化できないか?
という問題を解消するため、
Googleスプレッドシート「IMAGE」関数を使って、
予め用意してあるリンクURLをランダムに選択して、
擬似的なスライドショーを作ってみました


●作成の流れ

・リンク画像URLを用意する(予めスクレイピングなどで用意しておく)
Google Sheets APIを取得する(またこれに関連する設定を合せて行う)
・スライド用のスプレッドシートを用意する
・ランダムで選ばれたリンク画像URLを、表示用のスプレッドシートに張るためのソースコードを用意する

以上の流れのプログラムとなります。


Google Sheets APIを取得する

正直に言いますと、自分が拙い説明をするより、
下記のキノコード様の動画が見ながら、APIを入手してください。

●動画

●画像を表示する為のスプレッドシートを用意する

新しくスプレッドシートを用意して、
任意のファイル名とシート名を記載する。
またAPIでアクセルできるよう、共有設定も済ませておく
↓↓↓
標示するセルに「=IMAGE(B2,1)」という
画像リンクIDを表示させる、IMAGE関数を入力しておく

※ここではA2のセルに記載

↓↓↓
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エンジニアのレベルを上げてい事思った次第です。

以上ここまでご覧になってくださりありがとうございました。





この記事が気に入ったらサポートをしてみませんか?