async def parse_live_link(self, response):
        rs = await response.json()

        if response.status == 200:
            for live in rs['data']:
                speaker = live.pop('speaker')
                speaker_id = speaker['member']['id']
                speaker['member'][
                    'avatar_url'] = await self.convert_local_image(  # noqa
                        speaker['member']['avatar_url'])
                user = User.add(speaker_id=speaker_id,
                                **flatten_live_dict(speaker, SPEAKER_KEYS))
                live_dict = flatten_live_dict(live, LIVE_KEYS)
                topics = live_dict.pop('topics')
                for topic in topics:
                    topic_id = topic['id']
                    if topic_id not in self.seen_topics:
                        self.seen_topics.add(topic_id)
                        self.add_url(TOPIC_API_URL.format(topic_id),
                                     self.max_redirect)

                topics = [t['name'] for t in topics]
                tags = ' '.join(
                    set(
                        sum([(t['name'], t['short_name'])
                             for t in live_dict.pop('tags')], ())))
                live_dict['speaker_id'] = user.id
                live_dict['speaker_name'] = user.name
                live_dict['topics'] = topics
                live_dict['topic_names'] = ' '.join(topics)
                live_dict['seats_taken'] = live_dict.pop('seats')['taken']
                live_dict['amount'] = live_dict.pop('fee')['amount'] / 100
                live_dict['status'] = live_dict['status'] == 'public'
                live_dict['tag_names'] = tags
                live_dict['starts_at'] = datetime.fromtimestamp(
                    live_dict['starts_at'])
                live_dict['live_suggest'] = gen_suggests(
                    live_dict['topic_names'], tags, live_dict['outline'],
                    user.name, live_dict['subject'])

                result = await Live.add(**live_dict)
                if result.meta['version'] == 1:
                    user.incr_live_count()

            paging = rs['paging']
            if not paging['is_end']:
                next_url = paging['next']
                return paging['next']
        else:
            print('HTTP status_code is {}'.format(response.status))
Beispiel #2
0
    async def parse_link(self, response):
        rs = await response.json()

        if response.status == 200:
            for live in rs['data']:
                speaker = live.pop('speaker')
                speaker_id = speaker['member']['id']
                user = User.add(speaker_id=speaker_id,
                                **flatten_live_dict(speaker, SPEAKER_KEYS))
                live_dict = flatten_live_dict(live, LIVE_KEYS)
                topics = [t['name'] for t in live_dict.pop('topics')]
                tags = ' '.join(
                    set(
                        sum([(t['name'], t['short_name'])
                             for t in live_dict.pop('tags')], ())))
                live_dict['speaker_id'] = user.id
                live_dict['speaker_name'] = user.name
                live_dict['topics'] = topics
                live_dict['topic_names'] = ' '.join(topics)
                live_dict['seats_taken'] = live_dict.pop('seats')['taken']
                live_dict['amount'] = live_dict.pop('fee')['amount'] / 100
                live_dict['status'] = live_dict['status'] == 'public'
                live_dict['tag_names'] = tags
                live_dict['starts_at'] = datetime.fromtimestamp(
                    live_dict['starts_at'])
                live_dict['live_suggest'] = gen_suggests(
                    live_dict['topic_names'], tags, live_dict['outline'],
                    user.name, live_dict['subject'])
                Live.add(**live_dict)

            paging = rs['paging']
            if not paging['is_end']:
                next_url = paging['next']
                return paging['next']
        else:
            print('HTTP status_code is {}'.format(response.status))
Beispiel #3
0
 async def parse_topic_link(self, response):
     rs = await response.json()
     if response.status == 200:
         rs['avatar_url'] = await self.convert_local_image(
             rs['avatar_url'].replace('_s', '_xl'))
         Topic.add_or_update(**flatten_live_dict(rs, TOPIC_KEYS))