def fetch_new_alarms(): fetch_count = 0 alarms = Alarm.fetch_online(cancel=False) if Alarm.objects.filter(url=alarms[0]['url']).count() > 0: return 0 all_areas = City.get_all_areas() cities_below = {} for am in reversed(alarms): #print am['color_id'],am['title'],am['url'],am['pub_time'] url = am['url'] if Alarm.objects.filter(url=url).count()>0: continue alarm_obj =Alarm() for key,val in am.iteritems(): setattr(alarm_obj,key,val) title = am['title'] for code,area in all_areas: if area in title: alarm_obj.area_code = code break else: raise ValueError(u'%s failed to match any areas' % title) #匹配城市 if len(code) < 9: title = title[len(area):-1] if not cities_below.has_key(code): cities_below[code] = City.get_below_cities(code) for cid,city in cities_below[code]: #print code,cid,city if city in title: alarm_obj.area_code = cid break #print alarm_obj.area_code,alarm_obj.title alarm_obj.save() fetch_count+=1 Log(level=1,event="new alarm:%s-%s(%s)" % ( alarm_obj.title,alarm_obj.pub_time,alarm_obj.area_code)).save() return fetch_count