Esempio n. 1
0
    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
Esempio n. 2
0
    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
Esempio n. 3
0
 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)
Esempio n. 4
0
 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')
Esempio n. 5
0
    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'Тут нет людей')
Esempio n. 6
0
    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()
Esempio n. 7
0
    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 'зарегистрировались',
                ))
Esempio n. 8
0
    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
Esempio n. 9
0
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)