You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

52 lines
1.7 KiB

import urllib2
import base64
import json
from django.core.management.base import BaseCommand, CommandError
from django.conf import settings
from city.models import Hotel
HOTEL_URL = 'https://distribution-xml.booking.com/json/bookings.getHotels?'
username = settings.BOOKING_USERNAME
password = settings.BOOKING_PASSWORD
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):
# fill hotel currencies
main()