Esempio n. 1
0
    def crawl_events(self, position, distance, custom_keywords=None):
        crawl_time = datetime.now()
        graph = ExtendedGraphAPI(self.app_access_token)
        data = self.crawl_objects('event', position, distance, by_place=False, custom_keywords=custom_keywords, graph=graph)
        for d in data:
            evd = {
                'id': d['id'],
                'start_time':d['start_time'],
                'end_time':d['end_time'],
                'name': d['name'],
            }
            q = FBEvent.objects(fbid=evd['id'])
            if len(q) == 1:
                #print 'found in db %s' % evd['id']
                ev = q[0]
                evd['location'] = tuple(ev.location) if ev.location is not None else None
                if self.in_boundary(evd['location'], position, distance):
                    evd['model'] = ev
                    yield evd
            else:
                result = self.graph.get(path=evd['id'])
                #print result
                try:
                    x = result['venue']['latitude']
                    y = result['venue']['longitude']
                    event_position = (x, y)
                    if not self.in_boundary(event_position, position, distance):
                        event_position = None
                except Exception:
                    event_position = None

                ev = FBEvent()
                ev.fbid = evd['id']
                ev.name = evd['name']

                ev.start_time = dateutil.parser.parse(evd['start_time'])
                ev.end_time = dateutil.parser.parse(evd['end_time'])
                ev.add_time = datetime.now()
                ev.last_crawl_time = crawl_time
                ev.attendant_num = 0

                if event_position is not None:
                    evd['location'] = event_position
                    ev.location = evd['location']
                    ev.save()
                    evd['model'] = ev
                    yield evd
                else:
                    #also save not matchin elements
                    ev.save()