画像を送信するスクリプトを変更する 20250311 9:30
LINE notifyで画像送信していたスクリプトをLINE公式アカウントのメッセージAPIを使うように変更する。
スクリプト自体はAIに書き変えてもらった。
プロンプト
LINE Notifyを使って自分のLINEグループに画像を送るスクリプトを作成して、日時cronで動かしていました。
LINE Notifyのサービス終了を受けて、LINE公式アカウントからの送信に機能を移し替えたい。
対応方法について確認して新しいスクリプトコードを作成してください。
- LINE 公式アカウントは作成しました。
- 画像を送るスクリプトはpythonで作成しています。新しいコードもpythonで作成してください
- 画像を送るスクリプトは、同じフォルダにある「画像ファイルのpath」と「対象LINEグループのアクセストークン」を指定することで画像を送信していました。
- LINE公式アカウントのチャネルアクセストークン(長期)は取得済みです。
作り直して欲しいコードの元のコード
import requests ## ログ出力関連の自作スクリプト from log_setting import getMyLogger ### logger関連 loglevel="info" info_file_path="dailyLEO" logger = getMyLogger(__name__,loglevel,info_file_path+".log") ### 出力内容は下記のように指定する # logger.info('出力内容') ### デバッグ表示用Icecream # pip install icecream from icecream import ic def send_line_notify(image_path, access_token): url = "https://notify-api.line.me/api/notify" headers = {"Authorization": "Bearer " + access_token} payload = {'message': 'おはよう'} try: # 画像ファイルを開く with open(image_path, "rb") as image_file: files = {"imageFile": image_file} # リクエストを送信 response = requests.post(url, data=payload, headers=headers, files=files) #ic(url) #ic(headers) #ic(files) #ic(response) if response.status_code == 200: logger.info("画像を送信しました。") else: logger.info("画像の送信に失敗しました。") logger.info("エラーコード:", response.status_code) except FileNotFoundError: logger.info("指定したパスの画像ファイルが見つかりませんでした。") # 単体実行時に実行される内容 if __name__ == '__main__': # 画像ファイルのパス image_path = "output_image.jpg" # LINE Notifyのアクセストークン access_token = "nanikashiranomojiretsu" # LINE Notifyに画像を送信 send_line_notify(image_path, access_token)
追加の1往復と少しの手直しで下記のスクリプトが作成できた。
import requests import json from log_setting import getMyLogger # ログ出力設定 loglevel = "info" info_file_path = "dailyLEO" logger = getMyLogger(__name__, loglevel, info_file_path + ".log") def send_line_image(save_name, channel_access_token, group_id): image_url = "https://imagenopath/" + save_name url = "https://api.line.me/v2/bot/message/push" headers = { "Content-Type": "application/json", "Authorization": "Bearer " + channel_access_token } # プレビュー画像のURLは省略可能ですが、同じURLを指定することでプレビューも表示されます。 payload = { "to": group_id, "messages": [ { "type": "image", "originalContentUrl": image_url, "previewImageUrl": image_url # 同じURLを指定 } ] } try: response = requests.post(url, headers=headers, data=json.dumps(payload)) if response.status_code == 200: logger.info("画像を送信しました。") else: logger.info("画像の送信に失敗しました。") logger.info("エラーコード:", response.status_code) except Exception as e: logger.info("エラーが発生しました:", str(e)) # 単体実行時に実行される内容 if __name__ == '__main__': # 画像のURL save_name = "imagenofilename.png" # LINE公式アカウントのチャネルアクセストークン channel_access_token = "channelaccesstokennonanikashiranomojiretu" # LINEグループのID group_id = "groupidnomojiretu" # 画像をLINEに送信 send_line_image(save_name, channel_access_token, group_id)
- 今回は下記の対応をしていたので、特に追加で困ることが少なかった
- 既にLINE公式アカウントを作成していて、そのアカウントで別の作業をしていた
- 長期トークンなどもすでに使える状態だった
- グループIDを取得する術も既に準備済みだった
- 配信したい画像が既にURLを持っている状態だった
- 配信用のcronが画像配信部分を別スクリプトにしていたので、その部分を書き変えるのみで対応できた
このあたり全部最初からやろうと思うと結構大変だったかも知れない。