1 # -*- coding: utf-8 -*-
3 Created on Sat Sep 1 11:18:39 2018
11 import os, hmac, base64, hashlib, re, json
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 events = tornado.escape.json_decode(self.request)
60 if event['replyToken'] != None:
61 linebot.reply_message(
63 TextSendMessage(text=self.main('RR')))
66 header = self.request.headers.get('X-Line-Signature','')
67 body = json.load(self.request.body)
68 hashid = hmac.new(header.get('X-Line-Signature'),
69 body.decode('utf-8'), hashlib.sha256).digest()
70 signature = base64.b64encode(hashid)
71 parser = WebhookParser(ch)
73 events = parser.parse(body, signature)
74 except InvalidSignatureError:
75 raise tornado.web.HTTPError(400)
78 if (event['type'] == 'text')and(event['message']['type'] == 'text'):
79 linebot.reply_message(
81 TextSendMessage(text=self.main(event.Message.text))
84 class DummyHandler(tornado.web.RequestHandler):
89 db = pymongo.MongoClient(uri)[ac]
92 for x in data.split('\n'):
103 application = tornado.web.Application([(r'/callback',WebHookHandler),(r'/init',DummyHandler)])
105 if __name__ == '__main__':
106 token = os.environ['Access_Token']
107 ch = os.environ['Channel_Secret']
108 uri = os.environ['MONGODB_URI']
109 ac = os.environ['ACCOUNT']
110 port = int(os.environ.get('PORT',5000))#important in heroku
111 linebot = LineBotApi(token)
112 webhook = WebhookParser(ch)
113 application.listen(port)
114 tornado.ioloop.IOLoop.instance().start()