LINENotifyで画像を送信&Response 401の対処方【Python】

「LINE Notifyで画像を送信する方法を知りたい。」

「レスポンスで401となっていて、なぜこうなるかわからない」

今回は、LINENotifyでこのような悩みを抱えている方に向けて書いています。

この記事では、それらを解決できるコードを示しています。

実践すれば、LINE Notifyのエラーを対処できるようになり、画像も送付できるようになるはずです

また、実際に自分の環境で動作することは確認できているので、コピペするなどして試していただければと思います。

ではさっそく見ていきましょう。

必要な前準備

今回の実装に必要なのは以下のです。

  1. LINE Notifyのアクセストークン取得
  2. requestsメソッドのインストール

LINENotifyを使うには、一度しか表示されない「アクセストークン」が必要になります。

アクセストークンを取得する方法は、他の記事でもたくさん紹介されてますので、今回はそちらは自身で調べてやってみてください。今回説明は省きます。

あとは、requestsメソッドを実装の中で使います。

普通にPythonを使ったことがある人であれば、すでにインストールしているので大丈夫かと思いますが、インストールしていない方は以下でインストールしておきましょう。

pip install requests

では、準備が整ったところで実装に入りましょう。

画像を送付する

まずは画像を送付します。

画像は、コードを実行したときに、LINENotifyとのトーク画面です。

スタンプも送られていますが、画像送付とは関係ないので気にしなくて大丈夫です。(スタンプの送付の仕方は、後で解説しています)

画像送付する方法ですが、以下2つの方法があります。

  1. URLを指定する方法(jpegのみ可)
  2. ローカルからファイルをアップロードする方法(.png .jpegのみ可)

それぞれの方法について順番に解説します。

URLを指定する方法(jpegのみ可)

まず、URLを指定する方法を紹介します。

URLを指定する場合は、サーバーなどに写真をアップロードしてそのURLを張り付けるような形になるでしょう。

あべべ

(余談です)

特定のサイトの画像URLを取得したい場合などは、サイトをスクレイピングしてとってくるのが簡単だと思います。

スクレイピングで画像のURLを取得したい場合は以下の記事を参考にしてみてください。

以下がURLを指定して、画像を送付するコードです。

import requests
import json

message = "私がセルだ"

url = "https://notify-api.line.me/api/notify"
token = "<アクセストークン>"
headers = {"Authorization": "Bearer " + token}
param = {
    "message":message,
    "imageThumbnail":"https://saiwai-ichiba.jp/gallery/wp-content/uploads/2017/06/%E8%82%891-20170615-768x512.jpg",
    "imageFullsize" : "https://saiwai-ichiba.jp/gallery/wp-content/uploads/2017/06/%E8%82%891-20170615-768x512.jpg"
    }

response = requests.post(url, headers= headers,params = param)

imageThumbnail imageFullsize の両方にURLを指定する必要があります。

また、messageは必須項目なので、画像のみというのはできません。必ずmessageを含めてパラメーターに入れるようにしてください。

ローカルからファイルをアップロードする方法(.png .jpegのみ可)

次にローカルファイルにある画像を送付する場合についてです。

import requests
import json

message = "私がセルだ"

url = "https://notify-api.line.me/api/notify"
token = "<アクセストークン>"
headers = {"Authorization": "Bearer " + token}
param = {
    "message":message,
    }
files = {
    "imageFile":open("image2.jpeg","rb")
}

response = requests.post(url, headers= headers,params = param,files=files)

今回は、同じディレクトリに「image2.jpg」という画像ファイルを格納しており、それを送付する形で書いています。

別のディレクトリから送付する場合は、image2.jpgの部分を別のパスに書き換えるようにしてください。

こちらもURLで画像を送付する場合と同様で、messageは必須です。

また、以下のようにparamに画像URLを指定し、filesも送付する場合は、filesのみが送付されます。

param = {
    "message":message,
    "imageThumbnail":"https://saiwai-ichiba.jp/gallery/wp-content/uploads/2017/06/%E8%82%891-20170615-768x512.jpg",
    "imageFullsize" : "https://saiwai-ichiba.jp/gallery/wp-content/uploads/2017/06/%E8%82%891-20170615-768x512.jpg"
    }
files = {
    "imageFile":open("image2.jpeg","rb")
}

Response 401への対処方

LINE Notifyを使うとどうしてかトークが送られない場合があります。

その場合、何らかのエラーが考えられるわけですが、その場合の対処方を記しておきます。

結論、以下コードのようにエラーメッセージを見れるようにしておきましょう。

response = requests.post(url, headers= headers,params = param,files=files)
print(response.json()) #<-これを書き加える。

print(response)でも、statusは見えるので、ある程度分かると言えばわかると言えばわかります。

statusで見えるのは、以下3種類のみです。(試してみたらこれ以外も返ってくることもあるみたい。。。)

ただ、どうしてリクエストが不正なのかなどの理由が不明です。なので、.json()でメッセージも読めるようにした方が効率的です。

あべべ

【私がLINENotifyを送れず、エラーだった時の原因】

お恥ずかしい話ですが、私もしばらく送付できずに「あれー」となっていました。

そしたらよくよく見ると、

headers = {"Authorization": "Bearer" + token}

「Bearer」の後にスペースを入れていないことが原因でした。

そのせいで、アクセストークン不正となっていたんですね。

正しくは、以下

headers = {"Authorization": "Bearer " + token}

皆さんの中に、アクセストークン不正で苦しんでいる人がいれば、スペースが入っているかを確認してみてください。

(番外編)スタンプも送っちゃおう

番外編ですが、LINE Notifyではスタンプを送ることも可能です。

以下のようにLINEのキャラクターが送れるようになっています。

他にもいくつかあるので、送りたい方は見てみてください。送信可能なスタンプリスト

そして、送りたいスタンプが決まったら「パッケージID」と「スタンプID」をメモしておきます。

あとは、メモした「パッケージID」と「スタンプID」をstickerPackagedId と stickerIdに格納します。

import requests
import json

message = "私がセルだ"

url = "https://notify-api.line.me/api/notify"
token = "<アクセストークン>"
headers = {"Authorization": "Bearer " + token}
param = {
    "message":message,
    "stickerPackageId":"<パッケージID>",
    "stickerId":"<スタンプID>"
    }

response = requests.post(url, headers= headers,params = param)

これで実行すれば、スタンプが送れるはずです。

まとめ

今回は、LINENotifyで画像を送信する方法、送付できないときの対処法を書きました。

LINEはNotify以外にもAPIを提供しています。

LINEログインAPIもその一つです。LINEログインAPIを使えば、ログイン機能をLINEに置き換えることができます。

以下の記事で実装方法を紹介していますので、併せて読んでみてください。

(Visited 60 times, 1 visits today)