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
59 body = self.request.body.decode('utf-8')
61 hashid = hmac.new(header.get('X-Line-Signature'),
62 body.decode('utf-8'), hashlib.sha256).digest()
63 signature = base64.b64encode(hashid)
65 parser = WebhookParser(ch)
67 events = parser.parse(body, header)
68 except InvalidSignatureError:
69 raise tornado.web.HTTPError(400)
72 if (event['type'] == 'text')and(event['message']['type'] == 'text'):
73 linebot.reply_message(
75 TextSendMessage(text=self.main(event.Message.text))
78 class DummyHandler(tornado.web.RequestHandler):
83 db = pymongo.MongoClient(uri)[ac]
86 for x in data.split('\n'):
97 application = tornado.web.Application([(r'/callback',WebHookHandler),(r'/init',DummyHandler)])
99 if __name__ == '__main__':
100 token = os.environ['Access_Token']
101 ch = os.environ['Channel_Secret']
102 uri = os.environ['MONGODB_URI']
103 ac = os.environ['ACCOUNT']
104 port = int(os.environ.get('PORT',5000))#important in heroku
105 linebot = LineBotApi(token)
106 webhook = WebhookParser(ch)
107 application.listen(port)
108 tornado.ioloop.IOLoop.instance().start()