Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import requests
- import xml.etree.ElementTree as ET
- import uuid
- from time import sleep
- headers = {'Content-Type':'application/xml', 'Accept':'application/xml'}
- hotel_link = "http://jewel.cs.man.ac.uk:3010/queue/enqueue"
- band_link = "http://jewel.cs.man.ac.uk:3020/queue/enqueue"
- # find available slots for hotels
- def find_hotel():
- hotel_av = []
- tree3 = ET.parse('availability.xml')
- root3 = tree3.getroot()
- tree3.find('.//request_id').text = str(uuid.uuid1())
- tree3.write('availability.xml')
- av_data = open('availability.xml').read()
- a = requests.put("http://jewel.cs.man.ac.uk:3010/queue/enqueue", data=av_data, headers=headers)
- while a.text == "Message Unavailable" or a.text == "Service Unavailable":
- a = requests.put("http://jewel.cs.man.ac.uk:3010/queue/enqueue", data=av_data, headers=headers)
- sleep(1)
- msg_uri3 = a.text[9:-10] + "?username=0mm022&password=db3fLs"
- response3 = requests.get(msg_uri3)
- # wait until the get request in successful
- while response3.text == "Message unavailable" or response3.text == "Service unavailable":
- response3 = requests.get(msg_uri3)
- sleep(1)
- root_av = ET.fromstring(response3.content)
- for av in root_av.iter('slot_id'):
- av_val = int(av.text)
- hotel_av.append(av_val)
- print "Found available hotel slots."
- return hotel_av
- # find available slots for bands
- def find_band():
- band_av = []
- tree3 = ET.parse('availability.xml')
- root3 = tree3.getroot()
- tree3.find('.//request_id').text = str(uuid.uuid1())
- tree3.write('availability.xml')
- av_data = open('availability.xml').read()
- a = requests.put("http://jewel.cs.man.ac.uk:3020/queue/enqueue", data=av_data, headers=headers)
- while a.text == "Message Unavailable" or a.text == "Service Unavailable":
- a = requests.put("http://jewel.cs.man.ac.uk:3020/queue/enqueue", data=av_data, headers=headers)
- sleep(1)
- msg_uri3 = a.text[9:-10] + "?username=0mm022&password=db3fLs"
- response3 = requests.get(msg_uri3)
- # wait until the get request in successful
- while response3.text == "Message unavailable" or response3.text == "Service unavailable":
- response3 = requests.get(msg_uri3)
- sleep(1)
- root_av = ET.fromstring(response3.content)
- for av in root_av.iter('slot_id'):
- av_val = int(av.text)
- band_av.append(av_val)
- print "Found available band slots."
- return band_av
- # find earlies slot that is free for both the hotel and the band
- def find_common_earliest(hotel_list, band_list):
- min = 100000;
- # slots that are free for both the hotel and the band
- common_av = set(hotel_list).intersection(band_list)
- for slot in common_av:
- if slot < min:
- min = slot
- print "Found earliest common slot - ", min
- return min
- # find reservations made by you
- def find_my_hotel_reservations():
- my_res = []
- tree4 = ET.parse('bookings.xml')
- root4 = tree4.getroot()
- tree4.find('.//request_id').text = str(uuid.uuid1())
- tree4.write('bookings.xml')
- book_data = open('bookings.xml').read()
- b = requests.put("http://jewel.cs.man.ac.uk:3010/queue/enqueue", data=book_data, headers=headers)
- while b.text == "Message Unavailable" or b.text == "Service Unavailable":
- b = requests.put("http://jewel.cs.man.ac.uk:3010/queue/enqueue", data=book_data, headers=headers)
- sleep(1)
- msg_uri4 = b.text[9:-10] + "?username=0mm022&password=db3fLs"
- response4 = requests.get(msg_uri4)
- # wait until the get request in successful
- while response4.text == "Message unavailable" or response4.text == "Service unavailable":
- response4 = requests.get(msg_uri4)
- sleep(1)
- root_b = ET.fromstring(response4.content)
- for booking in root_b.iter('slot_id'):
- booking_val = int(booking.text)
- my_res.append(booking_val)
- print "Found your hotel reservations."
- return my_res
- def find_my_band_reservations():
- my_res = []
- tree4 = ET.parse('bookings.xml')
- root4 = tree4.getroot()
- tree4.find('.//request_id').text = str(uuid.uuid1())
- tree4.write('bookings.xml')
- book_data = open('bookings.xml').read()
- b = requests.put("http://jewel.cs.man.ac.uk:3020/queue/enqueue", data=book_data, headers=headers)
- while b.text == "Message Unavailable" or b.text == "Service Unavailable":
- b = requests.put("http://jewel.cs.man.ac.uk:3020/queue/enqueue", data=book_data, headers=headers)
- sleep(1)
- msg_uri4 = b.text[9:-10] + "?username=0mm022&password=db3fLs"
- response4 = requests.get(msg_uri4)
- # wait until the get request in successful
- while response4.text == "Message unavailable" or response4.text == "Service unavailable":
- response4 = requests.get(msg_uri4)
- sleep(1)
- root_b = ET.fromstring(response4.content)
- for booking in root_b.iter('slot_id'):
- booking_val = int(booking.text)
- my_res.append(booking_val)
- print "Found your band reservations."
- return my_res
- def cancel_res_hotel():
- my_res = find_my_hotel_reservations()
- for res in my_res:
- tree2 = ET.parse('cancellations.xml')
- root2 = tree2.getroot()
- tree2.find('.//request_id').text = str(uuid.uuid1())
- tree2.find('.//slot_id').text = str(res)
- tree2.write('cancellations.xml')
- cancel_data = open('cancellations.xml').read()
- c = requests.put("http://jewel.cs.man.ac.uk:3010/queue/enqueue", data=cancel_data, headers=headers)
- while c.text == "Message Unavailable" or c.text == "Service Unavailable":
- c = requests.put("http://jewel.cs.man.ac.uk:3010/queue/enqueue", data=cancel_data, headers=headers)
- sleep(1)
- msg_uri2 = c.text[9:-10] + "?username=0mm022&password=db3fLs"
- response2 = requests.get(msg_uri2)
- # wait until the get request in successful
- while response2.text == "Message unavailable" or response2.text == "Service unavailable":
- response2 = requests.get(msg_uri2)
- sleep(1)
- print "Cancelled ", res, " for hotel."
- def cancel_res_band():
- my_res = find_my_band_reservations()
- for res in my_res:
- tree2 = ET.parse('cancellations.xml')
- root2 = tree2.getroot()
- tree2.find('.//request_id').text = str(uuid.uuid1())
- tree2.find('.//slot_id').text = str(res)
- tree2.write('cancellations.xml')
- cancel_data = open('cancellations.xml').read()
- c = requests.put("http://jewel.cs.man.ac.uk:3020/queue/enqueue", data=cancel_data, headers=headers)
- while c.text == "Message Unavailable" or c.text == "Service Unavailable":
- c = requests.put("http://jewel.cs.man.ac.uk:3020/queue/enqueue", data=cancel_data, headers=headers)
- sleep(1)
- msg_uri2 = c.text[9:-10] + "?username=0mm022&password=db3fLs"
- response2 = requests.get(msg_uri2)
- # wait until the get request in successful
- while response2.text == "Message unavailable" or response2.text == "Service unavailable":
- response2 = requests.get(msg_uri2)
- sleep(1)
- print "Cancelled ", res, " for band."
- # reserve hotel
- def reserve_hotel():
- print "Trying to reserve hotel."
- res_data = open('reservations.xml').read()
- # try reserve hotel
- r_hotel = requests.put("http://jewel.cs.man.ac.uk:3010/queue/enqueue", data=res_data, headers=headers)
- while r_hotel.text == "Message Unavailable" or r_hotel.text == "Service Unavailable":
- r_hotel = requests.put("http://jewel.cs.man.ac.uk:3010/queue/enqueue", data=res_data, headers=headers)
- sleep(1)
- msg_uri_hotel = r_hotel.text[9:-10] + "?username=0mm022&password=db3fLs"
- response_hotel = requests.get(msg_uri_hotel)
- # wait until the get request in successful
- while response_hotel.text == "Message unavailable" or response_hotel.text == "Service unavailable":
- response_hotel = requests.get(msg_uri_hotel)
- sleep(1)
- root = ET.fromstring(response_hotel.content)
- for code in root.iter('code'):
- # if reservations request fails, try again
- if int(code.text) != 200:
- print "Failed to reserve hotel."
- return False
- else:
- return True
- return False
- def reserve_band():
- print "Trying to reserve band."
- res_data = open('reservations.xml').read()
- r_band = requests.put("http://jewel.cs.man.ac.uk:3020/queue/enqueue", data=res_data, headers=headers)
- while r_band.text == "Message Unavailable" or r_band.text == "Service Unavailable":
- r_band = requests.put("http://jewel.cs.man.ac.uk:3020/queue/enqueue", data=res_data, headers=headers)
- sleep(1)
- msg_uri_band = r_band.text[9:-10] + "?username=0mm022&password=db3fLs"
- response_band = requests.get(msg_uri_band)
- # wait until the get request in successful
- while response_band.text == "Message unavailable" or response_band.text == "Service unavailable":
- response_band = requests.get(msg_uri_band)
- sleep(1)
- root = ET.fromstring(response_band.content)
- for code in root.iter('code'):
- # if reservations request fails, try again
- if int(code.text) != 200:
- print "Failed to reserve band."
- return False
- else:
- return True
- return False
- # try to reserve the earliest available slot for the hotel and the band
- def try_reserve():
- # cancel all previous reservations
- cancel_res_hotel()
- cancel_res_band()
- hotel_list = find_hotel()
- band_list = find_band()
- tree1 = ET.parse('reservations.xml')
- root1 = tree1.getroot()
- tree1.find('.//request_id').text = str(uuid.uuid1())
- tree1.find('.//slot_id').text = str(find_common_earliest(hotel_list, band_list))
- tree1.write('reservations.xml')
- rh = reserve_hotel()
- if rh == False:
- return False
- tree1 = ET.parse('reservations.xml')
- root1 = tree1.getroot()
- tree1.find('.//request_id').text = str(uuid.uuid1())
- tree1.write('reservations.xml')
- rb = reserve_band()
- if rb == False:
- cancel_res_hotel()
- return False
- return True
- def try_again(id):
- tree1 = ET.parse('reservations.xml')
- root1 = tree1.getroot()
- tree1.find('.//request_id').text = str(uuid.uuid1())
- tree1.find('.//slot_id').text = str(id)
- tree1.write('reservations.xml')
- rh = reserve_hotel()
- if rh == False:
- return False
- tree1 = ET.parse('reservations.xml')
- root1 = tree1.getroot()
- tree1.find('.//request_id').text = str(uuid.uuid1())
- tree1.write('reservations.xml')
- rb = reserve_band()
- if rb == False:
- cancel_res_hotel()
- return False
- return True
- def check_for_new_min():
- hotel_res = find_my_hotel_reservations()
- band_res = find_my_band_reservations()
- print "Reserved hotel slot ", hotel_res[0], " and band slot ", band_res[0]
- print "Checking for earlier slots."
- hotel_list = find_hotel()
- band_list = find_band()
- new_min = find_common_earliest(hotel_list, band_list)
- if new_min < hotel_res[0]:
- print "Trying to reserve slot ", new_min
- resp = try_again(new_min)
- if resp == True:
- print "Reserved hotel slot ", new_min, " and band slot ", new_min
- else:
- print "No earlier slots were found."
- # try reserve the earliest available slot for the band
- response = try_reserve()
- while response == False:
- response = try_reserve()
- check_for_new_min()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement