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.
 
 
 
 
 
 

70 lines
2.5 KiB

import pickle, json, urllib2
import urllib2, base64
from django.core.management.base import BaseCommand, CommandError
from django.db.models import Q
from django.conf import settings
from city.models import Hotel, City
'https://distribution-xml.booking.com/json/bookings.getHotelPhotos?'
'https://distribution-xml.booking.com/json/bookings.getHotels?'
HOTEL_URL = 'https://distribution-xml.booking.com/json/bookings.getHotels?'
HOTEL_PHOTO_URL = 'https://distribution-xml.booking.com/json/bookings.getHotelPhotos?'
username = settings.BOOKING_USERNAME
password = settings.BOOKING_PASSWORD
langs = [code for code, name in settings.LANGUAGES]
def create_hotels(hotels, city):
dj_hotels = []
dj_hotels_translation = []
tr_model = Hotel._meta.translations_model
for hotel in hotels:
h = Hotel(id=hotel['hotel_id'], url=hotel['url'], city=city, ranking=hotel['ranking'],
hotel_class=hotel['class'], latitude=hotel['location']['latitude'],
longitude=hotel['location']['longitude'])
dj_hotels.append(h)
for lang in langs:
tr = tr_model(name=hotel['name'], address=hotel['address'], master_id=hotel['hotel_id'], language_code=lang)
dj_hotels_translation.append(tr)
Hotel.objects.bulk_create(dj_hotels)
#print dj_hotels
tr_model.objects.bulk_create(dj_hotels_translation)
print('city: %s'%str(city))
def main():
cities = City.objects.select_related('place_expositions', 'place_conferences').\
filter(Q(place_expositions__city__isnull=False) | Q(place_conferences__city__isnull=False)).distinct()
for city in cities:
url = HOTEL_URL + 'city_ids=%s'%city.id
offset = 0
rows = 500
flag = True
while(flag):
new_url = url + '&offset=%s&rows=%s'%(offset, rows)
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)
create_hotels(hotels, city)
offset +=rows
if not hotels:
flag = False
class Command(BaseCommand):
def handle(self, *args, **options):
main()