cubehouse / themeparks

Unofficial API for accessing ride wait times and schedules for Disneyland, Disney World, Universal Studios, and many more parks
MIT License
536 stars 126 forks source link

Virtual Line Pass Times for Universal Studios Florida #291

Closed zpocbob closed 4 years ago

zpocbob commented 4 years ago

Would it be possible to get the Virtual Line Pass times from the attractions at Universal Studios Florida? Thank you, Bobby

DougSisk commented 4 years ago

The system is locked to those with a scanned ticket/pass for the day. To sniff out the endpoints, you'd have to enter the park first. Proprietary systems like these that require logins/valid entry are beyond the scope of this library.

cubehouse commented 4 years ago

I'm afraid my job is taking up pretty much 100% of my time right now, so I can't look into this. If what Doug says is how it works, then I'm afraid that is not something we can support for this library. I don't want people to ever be entering their usernames/passwords into this library to get access to stuff, and it edges a lot closer to starting to automate fastpasses and stuff, which I want to stay well away from.

If anyone finds a way of seeing it without needing valid park tickets, please pull request away though :)

DougSisk commented 4 years ago

Had some free time today, so did some sniffing. It looks like Universal does indeed supply available times (see Fast & Furious):

{
   "TotalCount":5,
   "Pages":1,
   "PreviousPage":"",
   "NextPage":"",
   "Results":[
      {
         "Id":10003,
         "Name":"Race Through New York Starring Jimmy Fallon",
         "MaxAppointmentSize":8,
         "AppointmentDuration":"01:00:00",
         "SessionTimeoutInSec":20,
         "QueueEntityId":14348,
         "QueueEntityType":"Rides",
         "AppointmentTimes":[

         ],
         "QueueImage":null,
         "AdjustmentStatus":null,
         "AdjustmentEndTime":null,
         "GracePeriodInMin":15
      },
      {
         "Id":10004,
         "Name":"Fast & Furious - Supercharged",
         "MaxAppointmentSize":10,
         "AppointmentDuration":"00:30:00",
         "SessionTimeoutInSec":20,
         "QueueEntityId":16061,
         "QueueEntityType":"Rides",
         "AppointmentTimes":[
            {
               "Id":132181,
               "StartTime":"2020-06-04T15:50:00-04:00",
               "EndTime":"2020-06-04T16:50:00-04:00",
               "QueueId":10004,
               "CreatedBy":null,
               "LastUpdatedDate":"0001-01-01T00:00:00+00:00",
               "LastUpdatedBy":null,
               "CreatedDate":"0001-01-01T00:00:00+00:00",
               "EffectiveCapacity":105,
               "UsedCapacity":9,
               "UEPAllowance":54,
               "NoShowAllowance":15,
               "StandByAllowance":50
            },
            {
               "Id":132180,
               "StartTime":"2020-06-04T16:00:00-04:00",
               "EndTime":"2020-06-04T17:00:00-04:00",
               "QueueId":10004,
               "CreatedBy":null,
               "LastUpdatedDate":"0001-01-01T00:00:00+00:00",
               "LastUpdatedBy":null,
               "CreatedDate":"0001-01-01T00:00:00+00:00",
               "EffectiveCapacity":111,
               "UsedCapacity":15,
               "UEPAllowance":45,
               "NoShowAllowance":15,
               "StandByAllowance":50
            }
         ],
         "QueueImage":null,
         "AdjustmentStatus":null,
         "AdjustmentEndTime":null,
         "GracePeriodInMin":15
      },
      {
         "Id":10082,
         "Name":"Hagrid's Magical Creatures Motorbike Adventure",
         "MaxAppointmentSize":8,
         "AppointmentDuration":"00:15:00",
         "SessionTimeoutInSec":30,
         "QueueEntityId":17097,
         "QueueEntityType":"Rides",
         "AppointmentTimes":[

         ],
         "QueueImage":null,
         "AdjustmentStatus":null,
         "AdjustmentEndTime":null,
         "GracePeriodInMin":15
      },
      {
         "Id":10105,
         "Name":"Harry Potter and the Forbidden Journey",
         "MaxAppointmentSize":8,
         "AppointmentDuration":"00:30:00",
         "SessionTimeoutInSec":30,
         "QueueEntityId":10840,
         "QueueEntityType":"Rides",
         "AppointmentTimes":[

         ],
         "QueueImage":null,
         "AdjustmentStatus":null,
         "AdjustmentEndTime":null,
         "GracePeriodInMin":15
      },
      {
         "Id":10112,
         "Name":"Revenge of the Mummy",
         "MaxAppointmentSize":8,
         "AppointmentDuration":"00:30:00",
         "SessionTimeoutInSec":30,
         "QueueEntityId":10858,
         "QueueEntityType":"Rides",
         "AppointmentTimes":[

         ],
         "QueueImage":null,
         "AdjustmentStatus":null,
         "AdjustmentEndTime":null,
         "GracePeriodInMin":15
      }
   ]
}

Endpoint is https://services.universalorlando.com/api/AdditionalAppts/QueuesWithAppointments?city=Orlando&page=1&pageSize=all&appTimeForToday=06%2F04%2F2020

zpocbob commented 4 years ago

Doug, How did you find this data? is there an api breakdown of what is available? Bobby

DougSisk commented 4 years ago

I used a HTTP inspector, Fiddler, and then proxied my iPhone through it. Then I can see all requests sent or received by my iPhone. Most of the parks in this library have been added by doing this procedure.

TouringPlans commented 4 years ago

I'm willing to fund someone's time to get this done. - Len