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.
 
 
 
 
 
 

68 lines
2.0 KiB

import urllib2, base64
import json
from django.core.management.base import BaseCommand, CommandError
from city.models import Hotel
URL = 'https://distribution-xml.booking.com/json/bookings.getRooms?'
username = 'expomap'
password = '33xp00m33p'
test_id = '298239'
def get_prices(rooms):
min_price = None
max_price = None
for room in rooms:
try:
cur_min = float(room.get('min_price'))
except TypeError:
cur_min = None
try:
cur_max = float(room.get('max_price'))
except TypeError:
cur_max = None
if cur_min > min_price:
min_price = cur_min
if cur_max > max_price:
max_price = cur_max
return min_price, max_price
def handle_hotels(hotel_id):
hotel_ids_str = hotel_id
new_url = 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_rooms = response.read()
rooms = json.loads(json_rooms)
min_price, max_price = get_prices(rooms)
Hotel.objects.filter(id=hotel_id).update(min_price=min_price, max_price=max_price)
print('success')
def main():
hotel_id = test_id
for hotel in Hotel.objects.all():
try:
handle_hotels(str(hotel.id))
except:
continue
#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()