async def fetch(self, **kwargs): params = { 'apikey': self.api_key, 'from': (await self.place_code(kwargs.get('src'))), 'to': (await self.place_code(kwargs.get('dst'))), 'format': 'json', 'lang': 'ru', 'date': kwargs.get('date'), 'page': 1, } print(kwargs) print(params) params.update(kwargs.get('extra', {})) url = url_concat('https://api.rasp.yandex.net/v1.0/search/', params) result = await self.store.cache.get(url) if not result: request = HTTPRequest(url) try: response = await client.fetch(request) result = json_loads(response.body) await self.store.cache.set(url, result) except: raise BotException('Ошибка в получении расписания') return result
async def vk_user_get(self, user_id): url = 'https://api.vk.com/method/users.get' url = url_concat(url, {'user_id': user_id, 'v': '5.52'}) result = await client.fetch(HTTPRequest(url=url)) result = json_loads(result.body) try: return result['response'][0] except Exception as e: return False
def get_argument(self, name, default=TornKTSHandler._ARG_DEFAULT, strip=True, **kwargs): if self.request.method == 'POST': if self._payload is None: try: self._payload = utils.json_loads(self.request.body.decode()) except: pass if self._payload and name in self._payload: return self._payload[name] else: return super(BaseHandler, self).get_argument(name, default, strip) else: return super(BaseHandler, self).get_argument(name, default, strip)
def post(self, id): bots = self.settings.get('bots', []) ok = False for bot in bots: if bot.access_key == id: ok = True data = utils.json_loads(self.request.body) bot._on_hook(**data) break if ok: self.send_success_response() else: raise ServerError('not_found')
def _on_image(cls, chat_id, photo): if len(photo) == 3: photo = photo[2] elif len(photo) == 2: photo = photo[1] elif len(photo) == 1: photo = photo[0] else: return response = requests.get(cls.get_method_url('getFile'), { 'file_id': photo.get('file_id'), }) response = utils.json_loads(response.content) url = cls.get_file_url(response.get('result').get('file_path')) response = requests.post( 'https://api.projectoxford.ai/face/v1.0/detect?returnFaceAttributes=age,gender,headPose,smile,facialHair,glasses', headers={ 'Content-Type': 'application/json', 'Ocp-Apim-Subscription-Key': '07974eb651b84489b9bd0ff0900531de' }, data=utils.json_dumps({'url': url})) response = utils.json_loads(response.content) if len(response) > 0: for face in response: attrs = face.get('faceAttributes') msg = u"Это {0}, возраст {1}".format( u'мальчик' if attrs.get('gender') == 'male' else u'девочка', int(attrs.get('age')) ) cls.send(chat_id=chat_id, text=msg) else: cls.send(chat_id=chat_id, text=u'Тут нет людей')
def wrapper(): logger.info('Update currency') req = HTTPRequest('http://admin.awa.finance/api/exchange.current') res = yield client.fetch(req) data = json_loads(res.body) for currency, item in data.get('data', {}).items(): currency = currency.upper() value = item.get('purchasing_rate') try: logger.info('try find {0}, {1}'.format(currency, Currency.DIRECT_SALE)) currency_object = Currency.objects.get( code=currency, direct=Currency.DIRECT_SALE) logger.info('Success find') if currency_object.use_api: logger.info('Update') currency_object.value = value currency_object.save() else: logger.info('use_api=False, skip') except Currency.DoesNotExist: logger.info('Create {0}, {1}'.format(currency, Currency.DIRECT_SALE)) Currency(code=currency, direct=Currency.DIRECT_SALE, value=value).save() value = item.get('selling_rate') try: logger.info('try find {0}, {1}'.format(currency, Currency.DIRECT_BUY)) currency_object = Currency.objects.get( code=currency, direct=Currency.DIRECT_BUY) logger.info('Success find') if currency_object.use_api: logger.info('Update') currency_object.value = value currency_object.save() else: logger.info('use_api=False, skip') except Currency.DoesNotExist: logger.info('Create {0}, {1}'.format(currency, Currency.DIRECT_BUY)) Currency(code=currency, direct=Currency.DIRECT_SALE, value=value).save()
async def add_passenger(self): buy_id = self.get_str_argument('buy_id') passengers = json_loads(self.get_argument('passengers')) passengers_names = [] if not isinstance(passengers, list): raise ServerError(ServerError.BAD_REQUEST) user = await self._get_user(buy_id) cv = user['cv'] if not cv.get('passengers'): cv['passengers'] = list() for passenger in passengers: cv['passengers'].append(passenger) passengers_names.append('{name} {surname}'.format( name=passenger.get('name'), surname=passenger.get('surname'), )) user['cv'] = cv await self._save_user(buy_id, user) self.send_success_response() self.finish() if len(passengers_names) > 0: bot = self.bot(user) await bot.send( '{users} {verb} на рейс\n\n' 'Для просмотра всех пассажиров введите {all}\n' 'Для заказа билетов напишите {yes}\n' 'Для отмены покупки напишите {cancel}'.format( all='Все' if bot.is_vk else '/all', yes='Да' if bot.is_vk else '/ok', cancel='Отмена' if bot.is_vk else '/cancel', users=', '.join(passengers_names), verb='зарегистрировался' if len(passengers_names) == 1 else 'зарегистрировались', ))
async def place_code(self, query): params = { 'lang': 'ru', 'national_version': 'ru', 'part': query, 't_type_code': 'plane', 'format': 'old' } url = url_concat('https://suggests.rasp.yandex.net/by_t_type', params) result = await self.store.cache.get(url) if not result: request = HTTPRequest(url) try: response = await client.fetch(request) result = json_loads(response.body) result = result[1][0][0] await self.store.cache.set(url, result) except: raise BotException('В городе `%s` нет аэропорта' % query) return result
def notifications(): worker = get_worker() def create_bot(user): source, from_id = user.get('external', '').split(':') msg = Message(source=source, from_id=from_id) return worker.bot_instance(msg) while True: cursor = worker.store.db.reserving.find() while (yield cursor.fetch_next): try: ticket = cursor.next_object() if ticket.get('weather'): continue departure = parse(ticket['flight']['departure']) now = datetime.now() now -= timedelta(hours=24) print(departure, now) if departure > now: to = ticket['flight']['to']['title'] req = HTTPRequest(url=url_concat( 'http://api.openweathermap.org/data/2.5/weather', { 'APPID': '4c9bb6c2fb1800b3d01343f22867d2cc', 'q': to, 'units': 'metric', })) res = yield client.fetch(req) res = json_loads(res.body) user = yield worker.store.db.users.find_one( {'_id': ObjectId(ticket.get('user_id'))}) if user and res: bot = create_bot(user) temp = res['main']['temp'] if temp < 15: advice = 'одевайтесь теплее!' elif 15 < temp < 25: advice = 'температура комфортная' else: advice = 'аккуратнее на жаре!' yield bot.send( 'По прибытии в {to} ожидается температура {temp}° С, {advice}' .format(to=to, temp=round(temp), advice=advice)) ticket['weather'] = 1 _id = ticket.get('_id') if '_id' in ticket: del ticket['_id'] yield worker.store.db.reserving.update_one( {'_id': ObjectId(_id)}, {'$set': ticket}, upsert=True) except Exception as e: print(e) yield gen.sleep(60)