Beispiel #1
0
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)
Beispiel #2
0
 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)