parent
5e74873155
commit
5eb1468c38
6 changed files with 135 additions and 8 deletions
@ -0,0 +1,51 @@ |
||||
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() |
||||
@ -0,0 +1,68 @@ |
||||
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() |
||||
Loading…
Reference in new issue