てぃぐれのプログラマwiki

ワクワクに従う

LINE Messaging API の画像URL マルチバイトは送れない?

LINE Messaging APIの画像送信でつまずいた話。

 

【問題】

LINE Messaging APIで画像URL指定するとき、マルチバイト(日本語)を含むことができなくて、エラーが出てしまった。

サーバー:heroku

 

【経緯】

下記のようなソースコードで画像を送信するプログラムを組んでいた。

 

Python 3.8

image_message = ImageSendMessage(
original_content_url=f'https://xxxxx.herokuapp.com/pokemon/テスト',
)
line_bot_api.push_message(userId,image_message)

 

呼出先

@app.route('/pokemon/<pokemon>')
def pika(pokemon):
return app.send_static_file(f'pic/{pokemon}.png')

 

ちなみにブラウザからURLを叩くと、画像は問題なく表示される。

しかし、プログラムを叩くと、下記のようなエラーが。

"message": "Must be a valid HTTPS URL"

 

ソースコードを下記のように変更してみる。

image_message = ImageSendMessage(
)
line_bot_api.push_message(userId,image_message)

 

エラーが出なくなり、プッシュ通知がきた。

もちろん、test.pngは存在しないので、画像がない通知が送られてくる。

 

【解決方法】

マルチバイトの文字はURLエンコードをして、URLとくっ付けてあげると上手くいきました。

test = urllib.parse.quote(テスト)
image_message = ImageSendMessage(
original_content_url=f'https://xxxxx.herokuapp.com/pokemon/{test}',
)
line_bot_api.push_message(userId,image_message)

もちろん、urlが全てシングルバイトなら問題はない。