1 # -*- coding: utf-8 -*-
3 Created on Sat Sep 1 11:18:39 2018
11 import os, hmac, base64, hashlib, re
13 from datetime import datetime
14 from linebot import LineBotApi, WebhookParser
15 from linebot.exceptions import InvalidSignatureError
16 from linebot.models import TextSendMessage
19 class WebHookHandler(tornado.web.RequestHandler):
21 mes = self.get_argument('code','')
22 self.write(self.main(mes))
25 pz = pytz.timezone('Asia/Tokyo')
26 now = datetime.now(pz)
29 if (w < 5)and(t >= 9)and(t < 16):
31 db = pymongo.MongoClient(uri)[ac]
33 item = table.find({'no':re.compile(no,re.IGNORECASE)})
36 ans = x['name']+'\n'+x['no']
37 elif item.count() > 1:
40 list1 = sorted(obj, key=lambda k:k['name'])
42 if x['name'] == list1[0]['name']:
43 ans += x['name']+'\n'+x['no']+'\n'
49 for x in sorted(list1, key=lambda k:k['no']):
53 for x in table.find().sort('no'):
58 header = self.request.headers.get('X-Line-Signature','')
59 body = tornado.escape.json_decode(self.request.body)
61 hashid = hmac.new(header.get('X-Line-Signature'),
62 body.decode('utf-8'), hashlib.sha256).digest()
63 signature = base64.b64encode(hashid)
64 parser = WebhookParser(ch)
66 events = parser.parse(body, header)
67 except InvalidSignatureError:
68 raise tornado.web.HTTPError(400)
71 if (event['type'] == 'text')and(event['message']['type'] == 'text'):
72 linebot.reply_message(
74 TextSendMessage(text=self.main(event.Message.text))
78 linebot.reply_message(event['replytoken'],text=self.main(event['message']['text']))
80 class DummyHandler(tornado.web.RequestHandler):
85 db = pymongo.MongoClient(uri)[ac]
88 for x in data.split('\n'):
99 application = tornado.web.Application([(r'/callback',WebHookHandler),(r'/init',DummyHandler)])
101 if __name__ == '__main__':
102 token = os.environ['Access_Token']
103 ch = os.environ['Channel_Secret']
104 uri = os.environ['MONGODB_URI']
105 ac = os.environ['ACCOUNT']
106 port = int(os.environ.get('PORT',5000))#important in heroku
107 linebot = LineBotApi(token)
108 webhook = WebhookParser(ch)
109 application.listen(port)
110 tornado.ioloop.IOLoop.instance().start()