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()