1 # -*- coding: utf-8 -*-
3 Created on Sat Sep 1 11:18:39 2018
11 import os, hmac, base64, hashlib, re
12 import json, pytz, pymongo
13 from datetime import datetime
14 from linebot import LineBotApi, WebhookParser, WebhookHandler
15 from linebot.exceptions import InvalidSignatureError
16 from linebot.models import TextSendMessage
17 from multiprocessing.connection import answer_challenge
20 class WebHookHandler(tornado.web.RequestHandler):
22 mes = self.get_argument('code','')
23 self.write(self.main(mes))
26 pz = pytz.timezone('Asia/Tokyo')
27 now = datetime.now(pz)
30 if (w < 5)and(t >= 9)and(t < 16):
32 db = pymongo.MongoClient(uri)[ac]
34 item = table.find({'no':re.compile(no,re.IGNORECASE)})
37 ans = x['name']+'\n'+x['no']
38 elif item.count() > 1:
41 list1 = sorted(obj, key=lambda k:k['name'])
43 if x['name'] == list1[0]['name']:
44 ans += x['name']+'\n'+x['no']+'\n'
50 for x in sorted(list1, key=lambda k:k['no']):
54 for x in table.find().sort('no'):
61 header = json.load(self.request.headers)
62 body = json.load(self.request.body)
63 hash = hmac.new(header['X-LINE-SIGNATURE'].encode('utf-8'),
64 body.encode('utf-8'), hashlib.sha256).digest()
65 signature = base64.b64encode(hash)
67 events = webhook.parse(body, signature)
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))
79 class DummyHandler(tornado.web.RequestHandler):
84 db = pymongo.MongoClient(uri)[ac]
87 for x in data.split('\n'):
98 application = tornado.web.Application([(r'/callback',WebHookHandler),(r'/init',DummyHandler)])
100 if __name__ == '__main__':
101 token = os.environ['Access_Token']
102 ch = os.environ['Channel_Secret']
103 uri = os.environ['MONGODB_URI']
104 ac = os.environ['ACCOUNT']
105 port = int(os.environ.get('PORT',5000))#important in heroku
106 linebot = LineBotApi(token)
107 webhook = WebhookParser(ch)
108 application.listen(port)
109 tornado.ioloop.IOLoop.instance().start()