TABLE OF CONTENTS

【LINEで画像送信】毎日の画像送信に使用していたLINE Notifyサービス終了するのでLINE公式アカウントに切り替える

LINEで画像を送信している。LINE NotifyからLINE公式アカウントのメッセージAPI使用に切り替える。

Mar 10, 2025
毎日レオの写真投稿をLINE Notifyから別の方法に切り替えるDB
Table view
 

はじめに この作業のきっかけについて 20250308 9:21

 
  • LINE Notifyのサービスが2025年03月31日に終了する
  • 毎日LINEの身内グループに写真投稿をしていたが、LINE Notifyを使用していたため送信されなくなる
  • 送信方法を変更して引き続き写真が送られてくるようにする
  • 代替方法はLine公式アカウントを使うことになると思う
  • 既存のソルシエちゃんBotを使うか新しいLine Botを作るかは未定
  • ソルシエや他の仕組みでソルシエちゃんを使用しているため、もしかしたら新しい仕組みの方が良い可能性もある
 
🌟
先にまとめを書いておく
  • LINE Notifyで画像配信していた処理をLINE公式アカウントのメッセージAPI使用する形に置き換えた
 

LINE公式アカウントを確認する 20250308 9:26

LINE 公式アカウントを確認するため管理ページにログインする

 
  • ソルシエちゃんはLINE公式アカウントだけど、どうやってログインとかしてたんだっけ?
このページから
いつもの
のアカウントでログインできた。
 
notion image
 

画像を送信するスクリプトを変更する 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が画像配信部分を別スクリプトにしていたので、その部分を書き変えるのみで対応できた
 
このあたり全部最初からやろうと思うと結構大変だったかも知れない。

まとめ

 
このページでやったこと
  • LINE Notifyで画像配信していた処理をLINE公式アカウントのメッセージAPI使用する形に置き換えた