OSDN Git Service

pip pytz
[simple-tornado-bot/simple-tornado-bot.git] / bot.py
1 # -*- coding: utf-8 -*-
2 """
3 Created on Sat Sep  1 11:18:39 2018
4
5 @author: fuke masasi
6 """
7
8 import tornado.ioloop
9 import tornado.web
10 import tornado.escape
11 import json, os, hmac, base64, hashlib, pytz
12 from datetime import datetime
13 from linebot import LineBotApi, WebhookParser, WebhookHandler
14 from linebot.exceptions import InvalidSignatureError
15 from linebot.models import MessageEvent, TextMessage, TextSendMessage
16
17
18 class WebHookHandler(tornado.web.RequestHandler):   
19     def get(self):
20         pz = pytz.timezone('Asia/Tokyo')
21         t = datetime.now(pz).hour
22         if (t >= 9)and(t < 16):
23             self.write(u'仕事中.'+str(datetime.now()))
24         else:
25             self.write(str(t))
26         
27     def post(self):
28         header = json.load(self.request.headers)
29         body = json.load(self.request.body)
30         hash = hmac.new(header['X-Line-Signature'].encode('utf-8'),
31             body.encode('utf-8'), hashlib.sha256).digest()
32         signature = base64.b64encode(hash)
33         '''
34         try:
35             events = webhook.parse(body, signature)
36         except InvalidSignatureError:
37             raise tornado.web.HTTPError(400)
38             return
39         for event in events:
40             if not isinstance(event, MessageEvent):
41                 continue
42             if not isinstance(event.message, TextMessage):
43                 continue
44             linebot.reply_message(
45                 event.reply_token,
46                 TextSendMessage(text=event.message.text)
47             )
48         '''
49         self.write(header)
50         
51 class DummyHandler(tornado.web.RequestHandler):
52     def get(self):
53         self.write('OK')
54
55 application = tornado.web.Application([(r'/callback',WebHookHandler),(r'/',DummyHandler)])
56
57 if __name__ == '__main__':
58     token = os.environ['Access_Token']
59     ch = os.environ['Channel_Secret']
60     linebot = LineBotApi(token)
61     webhook = WebhookParser(ch)  
62     application.listen(5000)
63     tornado.ioloop.IOLoop.instance().start()