import urllib2, base64 import json from django.core.management.base import BaseCommand, CommandError from city.models import Hotel HOTEL_URL = 'https://distribution-xml.booking.com/json/bookings.getHotels?' username = 'expomap' password = '33xp00m33p' def handle_hotels(hotel_ids): good_hotels = [] hotel_ids_str = ','.join(hotel_ids) new_url = HOTEL_URL + 'hotel_ids=%s'%hotel_ids_str request = urllib2.Request(new_url) base64string = base64.encodestring('%s:%s' % (username, password)).replace('\n', '') request.add_header("Authorization", "Basic %s" % base64string) try: response = urllib2.urlopen(request) code = response.getcode() except urllib2.HTTPError, e: code = e.code except urllib2.URLError, e: code = e.code json_hotels = response.read() hotels = json.loads(json_hotels) for item in hotels: id = item['hotel_id'] currency = item['currencycode'] Hotel.objects.filter(id=id).update(currency=currency) good_hotels.append(id) bad_hotels = list(set(hotel_ids) - set(good_hotels)) Hotel.objects.filter(id__in=bad_hotels).delete() print('success update currency in %d hotels'%len(good_hotels)) def main(): hotels_todo = Hotel.objects.filter(currency__isnull=True)[:100].count() while hotels_todo > 0: hotel_ids = [str(item.id) for item in list(Hotel.objects.filter(currency__isnull=True)[:100])] handle_hotels(hotel_ids) hotels_todo =Hotel.objects.filter(currency__isnull=True)[:100].count() class Command(BaseCommand): def handle(self, *args, **options): main()