【LINE Messaging API】簡単!PythonでLINEのリッチメニューを簡単に作成!
PythonでLINEのリッチメニューを作りたいという方は多いのではないでしょうか。
こちらのgithubや他の記事を参考にしてみてもよく分からない方もいると思います。
今回は、できるだけ分かりやすいように、classで機能をまとめることはせずに説明していきます。
まずはインポートしよう
リッチメニューを作るために必要最低限必要なもののインポートと定義をします。
import os
from linebot import (
LineBotApi
)
from linebot.models import (
RichMenu, RichMenuArea,
RichMenuBounds, RichMenuSize
)
from linebot.models.actions import PostbackAction
line_bot_api = LineBotApi(os.environ["CHANNEL_ACCESS_TOKEN"])
Create rich menu
rich_menu_to_create = RichMenu(
size = RichMenuSize(width=2500, height=1686),
selected = True,
name = 'richmenu',
chat_bar_text = 'メニュー',
areas=[
RichMenuArea(
bounds=RichMenuBounds(x=0, y=0, width=1273, height=868),
action=PostbackAction(data='renew')
),
RichMenuArea(
bounds=RichMenuBounds(x=1278, y=0, width=1211, height=864),
action=PostbackAction(data='deadline')
),
RichMenuArea(
bounds=RichMenuBounds(x=0, y=864, width=1268, height=818),
action=PostbackAction(data="not_submitted")
),
RichMenuArea(
bounds=RichMenuBounds(x=1273, y=877, width=1227, height=805),
action=PostbackAction(data="forget")
)
]
)
引数の詳細は以下になります。
全体のサイズを設定できます。widthは幅、heightは高さを表します。
リッチメニューの画像は以下の要件を満たす必要があります。
・画像フォーマット:JPEGまたはPNG
・画像の幅サイズ(ピクセル):800以上、2500以下
・画像の高さサイズ(ピクセル):250以上
・画像のアスペクト比(幅/高さ):1.45以上
・最大ファイルサイズ:1MB
リッチメニューを使う
sizeが2500×1686, 2500×843, 1200×810, 1200×405, 800×540, 800×270のみとなっている点に注意が必要です。
デフォルトでリッチメニューを表示するならTrueにしましょう。
ユーザには表示されないリッチメニューの名前です。リッチメニューの管理に役立ちます。
チャットバーに表示されるテキストです。
クロネコヤマトのLINEならこの部分のことです。
タップ領域の座標とサイズを定義します。
座標を決めよう
リッチメニューを作るためにはareasの部分で座標を決めなくてはいけません。
目視でやっていってもいいですがもっと簡単な方法があります。
それは「Line Bot Designer」を利用することです。
ダウンロードが完了してプロジェクトを作成するとこのような画面が開きます。
次に画面にあるリッチメニューの右にある+を押してください。
するとこのようになるので、リッチメニューに設置したい画像をプロパティの画像からファイルを選択してください。
選択すると下の画像のようになっていると思います。
では、赤色の背景の賛成の範囲を調べてみます。
赤い四角の左上端をクリックしたまま右下隅までスライドさせて下さい。
そして手を離してみると下の画像のようになります。
また、先ほど指定した範囲がアクション1として登録されました。
ここでいう領域のx, y, 横, 縦が下記のコード部分のx, y, width, heightに対応しています。
bounds=RichMenuBounds(x=0, y=0, width=1252, height=1682)
青色の反対においても同じように座標を調べることができます。
Line Bot Designerでは他にもいろいろと機能があるので試してみることをお勧めします。
APIを呼び出そう
richMenuId = line_bot_api.create_rich_menu(rich_menu=rich_menu_to_create)
これでAPIを呼び出してリッチメニューを作成できます。
ですが、これだけでは画像がついていないただのリッチメニューなので次は画像をつけましょう。
画像をアップロードしよう
imageフォルダに入っているmenu.pngファイルをリッチメニューの画像としてアップロードします。
“image/png”の部分であるContent-Typeは image/pngとimage/jpegの二種類の拡張子に対応しています。
with open("image/menu.png", 'rb') as f:
line_bot_api.set_rich_menu_image(richMenuId, "image/png", f)
これで画像のアップロードも完了しました。
リッチメニューを設置しよう
では作ったリッチメニューを設置してみましょう。
登録したすべてのユーザにリッチメニューを設置する
line_bot_api.set_default_rich_menu(richMenuId)
一人のユーザにリッチメニューを設置する
line_bot_api.link_rich_menu_to_user(user_id, richMenuId)
複数のユーザにリッチメニューを設置する
line_bot_api.link_rich_menu_to_users(user_ids, richMenuId)
user_idsはリストで複数のユーザを指定することができます。
リッチメニューを解除しよう
リッチメニューを解除することもできます。
一人のユーザのリッチメニューを解除する
line_bot_api.unlink_rich_menu_from_user(user_id)
複数のユーザのリッチメニューを解除する
line_bot_api.unlink_rich_menu_from_users(user_ids)
user_idsはリストで複数のユーザを指定することができます。
リッチメニューを取得
リッチメニューをリストで取得できます。
rich_menu_list = line_bot_api.get_rich_menu_list()
リッチメニューを削除
リッチメニューを削除できます。
line_bot_api.delete_rich_menu(rich_menu.rich_menu_id)
リッチメニューをすべて削除
リッチメニューをすべて削除するためのコードです。
import time
rich_menu_ids = [rich_menu.rich_menu_id for rich_menu in line_bot_api.get_rich_menu_list()]
for rich_menu_id in rich_menu_ids:
time.sleep(3)
line_bot_api.delete_rich_menu(rich_menu_id)
最後に
まだ分からないことがある方は「Lineの公式サイト」を見ることをお勧めします。
コメント