盆栽の管理向上をめざして 4:LINE Botで画像データを管理したい1
はじめに
盆栽の管理を始め、所有盆栽の全てにタグ付けを行いGoogleスプレッドシートに記入し、今度は取りためた画像を紐づけするためのうまい方法を考えています。
前回はPCでトリミング後、画像サイズを小さくし、Googleドライブにアップロードし、そのファイル一覧をGoogleスプレッドシートに自動で取りこむチャレンジをしました。
フォルダに画像ファイルが追加、削除されたとき、考えなければならないことはたくさんあります。そもそも、keyを紐づけする後作業が発生するため、あまり良い方法ではありません。
そんな中、最後にLINE Botを使う方法をひらめきました。というより、探し当てました。
LINE Botを使って、Googleドライブに画像を転送し、Googleスプレッドシートにリンクとメッセージを記入する。
これができれば、やりたいことはできそうな気がしてきました。
今回はここからチャレンジし、紆余曲折を経て、LINE Botを試すところまでを記事にします。体験記としてお読みください。
結果を知りたい方は次回以降の記事をお待ちください。
さっそくチャレンジしてみます
ChatGPT3.5先生に相談します
You
ChatGPT
from google.oauth2 import service_account
from googleapiclient.discovery import build
from linebot import LineBotApi
# LINE BotのトークンとChannel Secret
LINE_CHANNEL_ACCESS_TOKEN = 'Your_Line_Channel_Access_Token'
line_bot_api = LineBotApi(LINE_CHANNEL_ACCESS_TOKEN)
# Googleサービスアカウントの認証情報
SCOPES = ['https://www.googleapis.com/auth/drive', 'https://www.googleapis.com/auth/spreadsheets']
SERVICE_ACCOUNT_FILE = 'path/to/your/service-account-file.json'
credentials = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE, scopes=SCOPES)
# GoogleドライブとスプレッドシートのAPIクライアント
drive_service = build('drive', 'v3', credentials=credentials)
sheets_service = build('sheets', 'v4', credentials=credentials)
# LINEからのメッセージと画像の処理
@handler.add(MessageEvent, message=ImageMessage)
def handle_image_message(event):
message_id = event.message.id
message_content = line_bot_api.get_message_content(message_id)
# 画像をGoogleドライブにアップロード
file_metadata = {'name': 'image.jpg', 'parents': ['your_folder_id']}
media = MediaIoBaseUpload(io.BytesIO(message_content.content), mimetype='image/jpeg')
file = drive_service.files().create(body=file_metadata, media_body=media, fields='id').execute()
file_id = file.get('id')
# Googleスプレッドシートにデータを書き込む
spreadsheet_id = 'your_spreadsheet_id'
values = [['=HYPERLINK("https://drive.google.com/uc?id=' + file_id + '")', 'Your Message']]
body = {'values': values}
result = sheets_service.spreadsheets().values().append(spreadsheetId=spreadsheet_id, range='Sheet1', body=body, valueInputOption='RAW').execute()
ばっちり答えてくださいました。
でも私にはほとんど内容を理解することができません。
少しずつ調べながらやってみることにします
1.LINE Developer ConsoleでMessaging APIを設定する
ネット検索で調べます。
Messaging APIを始めよう
を見ながら、試してみます。
PCで「LINE Developersコンソール」にアクセスします。
「LINEアカウントでログイン」を押します。
メールアドレスとパスワードを入力します。
PCでこの操作を行うと、スマホで確認番号を入力するよう求められます。
緑の4桁の数字が表示されます。
スマホの確認画面に入力すると次へ進みます。
スマホの画面をキャプチャ
開発者名、メールアドレスを記入し、LINE開発者契約を確認、最後に「アカウント作成」を押します。
プロバイダー名を記入し、「作成」ボタンを押します。
Messaging APIを選択します。
だんだん話が大きくなってきましたが、すべては壮大な計画のためです。
以前、スマートウオッチのアプリを公開するため、Google Play Consoleを登録したときのようなドキドキ感を味わっています。
必要事項を記入し、
最後に「作成」ボタンを押します。
「OK」を押します。
個人的な盆栽写真の画像転送のためにここまでする必要があるのか。
少し怖くなってきました。
ひょっとしたら、このチャネルを知って友達登録してしまうと、誰でも私の盆栽画像管理場所に画像をポスト出来てしまうのではないか?
という怖さがあります。
ここに来るまでにたくさんの契約文章を読み、同意してきました。
全てのユーザーが善意のもとに技術を利用する約束はどこにもありません。
せめて、予防線を張ることぐらいしかできないのでしょう。
ここまでで、1.の処理が終了です。
2.Google Cloud Platform (GCP)でプロジェクトを作成する
前回記事でチャレンジしたことは無駄ではなかったかもしれません。
なんとなくわかるような気がします。
とはいえ、Google Cloud Platform (GCP)は未知ですし、ここも調べながら慎重に行った方が無難です。
プロジェクトの作成と管理
Google Cloud Platform (GCP)は初めてと思っていましたが、ことあるごとにかじっていたので、以前作ったサービスが転がっていました。
ということは、一から作成する場合、別の手順になるかもしれません。
「プロジェクトの作成」を押します。
プロジェクト名をどうするか悩みましたが、ここは直球勝負「LINE-Bonsai-Photo-Post-API」にしました。そして「作成」ボタンを押します。
このあたりまでできましたが、この先がわかりません。
あれ?もっと別画面から入っていった覚えが。。。
今までは、Googleドライブで「新しいスプレッドシート」を作成した後、拡張機能から「Apps Script」を選択していました。
このあたりで少し迷子になり、初心者向けの記事を探しました。
コメント:後から振り返ってみると、ここで大きな勘違いをしていたことになります。Google Cloud Platform(GCP)とGoogle Apps Script(GAS)を混同しておりました。
【初心者向け】GAS×LINEでチャットボットを自作する【Line Bot】
これに乗っかっていけばいい所まで行けそうですが、浮気するとぐちゃぐちゃになりそうだったので、チラ見しながら進んでいくことにしました。
https://script.google.com/ をChromeで開きます。
そして「新しいプロジェクト」を押すと、以下の画面になります。
「新しいデプロイ」を押します。
歯車アイコン→「ウェブアプリ」を選択します。
アクセスできるユーザーを「全員」にし、「デプロイ」を押します。
「完了」を押して終了です。
ごにょごにょして、この画面にたどり着きました。
GASのWebhook URLをコピペしました。
「検証」ボタンを押します。
はい「成功」。ガイドのおかげです。
これでOKと思って実行してみましたが、うまくできません。
Webhookの利用を有効にしてもだめです。
もう一体何が悪いのか全く分かりません。
先が見えず力尽きてしまいました。
次の記事へつづく。。。
#盆栽管理 #画像管理 #LINEbot #GoogleCloudPlatform #GCP #GoogleAppsScript #GAS #体験記