Python
linebot
RQ

LinebotをJobキュー使って非同期処理をする

More than 1 year has passed since last update.

さくっとできそうだったので、Pythonを使ってLinebotを操作してみることした。

まず、Linebot自体は、 データを受け取り、そして、 データを返す ことしかしない。

なので、ちょーざっくり言うと、基本的に2つのことを行うために使うケースが多いと考えられる。


  • ユーザーからのデータをcallbackで 受け取り解釈 する

  • 解釈したデータを使って 処理を行い返答 する

この、 解釈の方法返答のフォーマット によって、 Botの機能/性質 が決まる。

以下、LinebotモジュールをPythonでざっくり準備してみた。

使い方/実行方法などは、README.mdにあるので、参考にしてもらえればと思う。

Linebotモジュール: https://github.com/JFK/linebot

ここでは、上記のモジュールとrq(jobキューワーカー)を使ってLinebotを操作してみる。


rqを使ってLinebotを実行


rqの準備


job_queue.py

from rq import Queue

from redis import Redis

def queue(name='low'):
redis = Redis()
q = Queue(connection=redis)
return q



rqを使って実行

from job_queue import queue

from linebot import LINEBot
...
# callbackのデータをパースする
bot = LINEBot(<CHANNEL_ID>)
receive = bot.receive_callback(json_body)
to = receive.content('from')
text = 'Hi!'

# テキストを受けっとた場合
if receive.is_message and receive.content('contentType') == ContentType.TEXT:
# jobキューにセットして実行する
queue.enqueue(bot.send_text, [to], text)
...

みたいな感じ。