Ejemplo n.º 1
0
def load_events():
    """
    Goes through the events for each program and creates 
    or updates events as necessary using the data from the 
    event_data dictionary 
    """
    for post, program_id in NAClient().get_events():
        if post['status'] == "published":
            try:
                post_parent_program = get_program(program_id)

                parent_program_events_homepage = get_content_homepage(
                    post_parent_program,
                    ProgramEventsPage,
                    'Events',
                )

                event_slug = slugify(post['title'])

                new_event = Event.objects.filter(slug=event_slug).first()

                event_data = get_event_data(post)

                if not new_event and event_slug:
                    new_event = Event(
                        search_description='',
                        seo_title='',
                        depth=5,
                        show_in_menus=False,
                        slug=event_slug,
                        title=post['title'],
                        subheading=post['sub_headline'],
                        date=event_data['date'],
                        end_date=event_data['end_date'],
                        start_time=event_data['start_time'],
                        end_time=event_data['end_time'],
                        host_organization=event_data['host_organization'],
                        street_address=event_data['street_address'],
                        city=event_data['city'],
                        state=event_data['state'],
                        zipcode=event_data['zipcode'],
                        rsvp_link=event_data['rsvp_link'],
                        body=json.dumps([{
                            'type': 'paragraph',
                            'value': post['content']
                        }]),
                        soundcloud_url=post['soundcloud_url'],
                        story_image=download_image(post['cover_image_url'],
                                                   event_slug + "_image.jpeg"),
                        story_excerpt=get_summary(post['summary']),
                    )
                    parent_program_events_homepage.add_child(
                        instance=new_event)
                    new_event.save()
                    connect_programs_to_post(new_event, post['programs'])
                elif new_event and event_slug and need_to_update_post(
                        post['modified']):
                    new_event.search_description = ''
                    new_event.seo_title = ''
                    new_event.depth = 5
                    new_event.date = event_data['date']
                    new_event.end_date = event_data['end_date']
                    new_event.start_time = event_data['start_time']
                    new_event.end_time = event_data['end_time']
                    new_event.host_organization = event_data[
                        'host_organization']
                    new_event.street_address = event_data['street_address']
                    new_event.city = event_data['city']
                    new_event.state = event_data['state']
                    new_event.zipcode = event_data['zipcode']
                    new_event.rsvp_link = event_data['rsvp_link']
                    new_event.show_in_menus = False
                    new_event.slug = event_slug
                    new_event.title = post['title']
                    new_event.subheading = post['sub_headline']
                    new_event.body = json.dumps([{
                        'type': 'paragraph',
                        'value': post['content']
                    }])
                    new_event.story_image = download_image(
                        post['cover_image_url'], event_slug + "_image.jpeg")
                    new_event.story_excerpt = get_summary(post['summary'])
                    new_event.soundcloud_url = post['soundcloud_url']
                    new_event.save()
                    connect_programs_to_post(new_event, post['programs'])
            except django.db.utils.IntegrityError:
                pass
Ejemplo n.º 2
0
    def handle(self, *args, **options):
        print "VK parsing..."
        session = vk.Session(access_token=config.VK_API_TOKEN)
        api = vk.API(session, v='5.40', lang='ru', timeout=100)
        fields = ['place', 'description', 'members_count',
                  'start_date', 'end_date']
        data = api.groups.search(q=options['q'],
                                 type='event',
                                 fields=','.join(fields),
                                 count=self.count,
                                 offset=self.offset,
                                 future=1)

        pp = pprint.PrettyPrinter(indent=1)
        # pp.pprint(data)

        if self.length == 0:
            self.length = data['count']

        for item in data['items']:
            #pp.pprint(item)
            event = Event()
            event.site = 'VK'
            event.lat = item['place']['latitude'] if 'place' in item else 0
            event.lng = item['place']['longitude'] if 'place' in item else 0
            if event.lat*event.lng == 0 :
                continue
            event.start_date = dt.fromtimestamp(item['start_date'], tz=pytz.utc) \
                if 'start_date' in item else None
            event.end_date = dt.fromtimestamp(item['end_date'], tz=pytz.utc) \
                if 'end_date' in item else event.start_date + timedelta(hours=2)
            event.title = item['name']
            event.ext_id = item['id']
            event.photo = item['photo_200'] if 'photo_200' in item else 0
            event.description = item['description'] \
                if 'description' in item else ''
            event.member_count = item['members_count'] \
                if 'members_count' in item else 0
            event.create_or_update()
            """
            event = {}
            event['site'] = 'VK'
            event['lat'] = item['place']['latitude'] if 'place' in item else 0
            event['lng'] = item['place']['longitude'] if 'place' in item else 0
            if event['lat']*event['lng'] == 0 :
                continue
            event['start_date'] = str(dt.fromtimestamp(item['start_date'], tz=pytz.utc).strftime('YYYY-MM-DD HH:MM')) \
                if 'start_date' in item else ''
            event['end_date'] = str(dt.fromtimestamp(item['end_date'], tz=pytz.utc).strftime('YYYY-MM-DD HH:MM')) \
                if 'end_date' in item else ''
            print event['start_date']
            print event['end_date']
            event['title'] = item['name']
            event['ext_id'] = item['id']
            event['photo'] = item['photo_200'] if 'photo_200' in item else 0
            event['description'] = item['description'] \
                if 'description' in item else ''
            event['member_count'] = item['members_count'] \
                if 'members_count' in item else 0
            try:
                save_event, created = Event.objects.update_or_create(**event)
                # print save_event.get_external_url()
            except Exception, e:
                print e.message
            """

        if self.length > 0:
            self.offset += self.count
            self.length -= self.count
            time.sleep(0.5)
            self.handle(**options)
        else:
            print("VK parse ends.")
Ejemplo n.º 3
0
    def handle(self, *args, **options):
        print "FB parsing..."
        graph = facebook.GraphAPI(access_token=config.FB_API_TOKEN)
        fields = [
            'id',
            'name',
            'cover',
            'description',
            'start_time',
            'end_time',
            'place',
            'attending_count',
            'category',
        ]
        data = graph.request(
            "v2.5/search",
            {
                'q': options['q'],
                'type': 'event',
                'limit': self.count,
                'since_date': 'currentTime',
                'fields': ','.join(fields),
                'after': '' if not 'after' in options else options['after'],
            },
        )
        pp = pprint.PrettyPrinter(indent=1)
        # pp.pprint(data)

        for item in data['data']:
            event = Event()
            event.site = 'FB'
            event.lat = 0
            event.lng = 0
            if 'place' in item:
                event.lat = item['place']['location']['latitude'] \
                    if 'location' in item['place'] else 0
                event.lng = item['place']['location']['longitude'] \
                    if 'location' in item['place'] else 0
            if event.lat * event.lng == 0:
                continue
            if not 'start_time' in item:
                continue
            event.start_date = dateutil.parser.parse(item['start_time'])#dt.strptime(item['start_time'],'%Y-%m-%dT%H:%M:%S%Z')
            event.end_date = dateutil.parser.parse(item['end_time']) \
                if 'end_time' in item else event.start_date + timedelta(hours=2)
            event.title = item['name']
            event.ext_id = item['id']
            event.photo = item['cover']['source'] \
                if 'cover' in item else ''
            event.description = item['description'] \
                if 'description' in item else ''
            event.member_count = item['attending_count'] \
                if 'attending_count' in item else ''
            event.category = item['category'] \
                if 'category' in item else ''
            event.create_or_update()
            """
            event = {}
            event['site'] = 'FB'
            event['lat'] = 0
            event['lng'] = 0
            if 'place' in item:
                event['lat'] = item['place']['location']['latitude'] \
                    if 'location' in item['place'] else 0
                event['lng'] = item['place']['location']['longitude'] \
                    if 'location' in item['place'] else 0
            if event['lat'] * event['lng'] == 0:
                continue
            event['start_date'] = item['start_time'] \
                if 'start_time' in item else ''
            event['end_date'] = item['end_time'] \
                if 'end_time' in item else ''
            event['title'] = item['name']
            event['ext_id'] = item['id']
            event['photo'] = item['cover']['source'] \
                if 'cover' in item else ''
            event['description'] = item['description'] \
                if 'description' in item else ''
            event['member_count'] = item['attending_count'] \
                if 'attending_count' in item else ''
            event['category'] = item['category'] \
                if 'category' in item else ''
            try:
                save_event, created = Event.objects.update_or_create(**event)
                # print save_event.get_external_url()
            except Exception, e:
                print e.message
                pass
            """
        if 'paging' in data:
            # time.sleep(0.5)
            options['after'] = data['paging']['cursors']['after']
            self.handle(**options)
        else:
            print("FB parser ends.")