def update_all_city(): """ Update all city's forecast. In order to reduce query times, query 45 cities forecasts every times from weather api. :return: """ from time import sleep from weather.api_config import query_by_areaid import json import re query_count = 45 lol = [CityInfo.objects.all()[i * query_count:(i + 1) * query_count] for i in range(int(CityInfo.objects.count() / query_count))] for i, city_list in enumerate(lol): qids = '|'.join([city.areaid for city in city_list]) try: respon_str = query_by_areaid(qids) rs = re.sub(r'"c":({.+?})', r'\1', respon_str) rs = re.sub(r'"f":({.+?"f0".+?})', r'\1', rs) fjson = json.loads('[' + rs[1:-1] + ']') print(fjson) cs = fjson[:query_count] fs = fjson[query_count:] for c, f in zip(cs, fs): city = CityInfo.objects.get(areaid=c['c1']) update_forecast(city, {'c': c, 'f': f}) except: raise Exception('forecast update failed for id:' + str(i * query_count) + '-' + str((i + 1) * query_count)) sleep(10)
def setUp(self): from weather.api_config import query_by_areaid self.city = CityInfo(areaid='101010100', nameen='beijing', namecn='北京', districten='beijing', districtcn='北京', proven='beijing', provcn='北京', nationen='china', nationcn='中国') self.city.save() self.qstr = query_by_areaid(self.city.areaid)