Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/timyboy12345/themeparks-node-api

This repo exposes an API that simplifies theme park wait times endpoints and returns one single easy to understand format for all data types, from park information to waiting and show times.
https://github.com/timyboy12345/themeparks-node-api

nestjs themeparks

Last synced: 6 days ago
JSON representation

This repo exposes an API that simplifies theme park wait times endpoints and returns one single easy to understand format for all data types, from park information to waiting and show times.

Awesome Lists containing this project

README

        

# ๐ŸŽก Themeparks API ๐ŸŽก

Using this API, you can request waiting times from theme parks all around the world. It communicates with public API's that the parks use internally for their apps.

Feel free to add new parks.

## Example
To view the API, please go to [the example API](https://tp.arendz.nl/api) at https://tp.arendz.nl. This API is always up-to-date with the latest master-branch of this repo.

### Supported parks
In the table below you will find the parks that are currently supported and the functions that they support. This list of included and non-included functions is also included in the API.

| Park | Type | Ride Support | Restaurants Support | Shows Support | Shops Support | Halloween Support |
| ------------- | ------------- | ------------- | ------------- | ------------- | ------------- | ------------- |
| ๐Ÿ‡ง๐Ÿ‡ช Walibi Belgium | ๐ŸŽก | True | True | False | True | False |
| ๐Ÿ‡ง๐Ÿ‡ช Bellewaerde | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡ง๐Ÿ‡ช Bobbejaanland | ๐ŸŽก | True | True | False | True | False |
| ๐Ÿ‡ง๐Ÿ‡ช Plopsalande de Panne | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡จ๐Ÿ‡ฆ La Ronde, Montreal | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡ฉ๐Ÿ‡ช Phantasialand | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡ฉ๐Ÿ‡ช Holiday Park | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡ฉ๐Ÿ‡ช LegoLand Deutschland | ๐ŸŽก | False | False | False | False | False |
| ๐Ÿ‡ฉ๐Ÿ‡ช Hansa Park | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡ฉ๐Ÿ‡ช Movie Park Germany | ๐ŸŽก | True | True | True | True | True |
| ๐Ÿ‡ฉ๐Ÿ‡ฐ Tivoli | ๐ŸŽก | True | True | True | False | False |
| ๐Ÿ‡ช๐Ÿ‡ธ Portaventura | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡ช๐Ÿ‡ธ Ferrari Land | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡ช๐Ÿ‡ธ Parque Warner | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡ช๐Ÿ‡ธ Parque de Atracciones Madrid | ๐ŸŽก | True | False | True | True | False |
| ๐Ÿ‡ช๐Ÿ‡ธ Parque Warner Beach | ๐ŸŒŠ | True | True | False | True | False |
| ๐Ÿ‡ซ๐Ÿ‡ท Walibi Rhรดne-Alpes | ๐ŸŽก | True | True | False | True | False |
| ๐Ÿ‡ซ๐Ÿ‡ท Disneyland Paris | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡ซ๐Ÿ‡ท Walt Disney Studios Park | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡ซ๐Ÿ‡ท Parc Asterix | ๐ŸŽก | True | True | True | False | False |
| ๐Ÿ‡ซ๐Ÿ‡ท Futuroscope | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡ซ๐Ÿ‡ท Marineland Cote D'azure | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡ฌ๐Ÿ‡ง Thorpe Park | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡ฌ๐Ÿ‡ง Alton Towers | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡ฌ๐Ÿ‡ง Paultons Park | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡ฌ๐Ÿ‡ง Chessington world of Adventures | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡ฎ๐Ÿ‡น Gardaland | ๐ŸŽก | True | True | True | False | False |
| ๐Ÿ‡ฎ๐Ÿ‡น Mirabilandia | ๐ŸŽก | True | True | False | True | False |
| ๐Ÿ‡ณ๐Ÿ‡ฑ Efteling | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡ณ๐Ÿ‡ฑ Toverland | ๐ŸŽก | True | True | True | False | True |
| ๐Ÿ‡ณ๐Ÿ‡ฑ Walibi Holland | ๐ŸŽก | True | True | False | True | False |
| ๐Ÿ‡ณ๐Ÿ‡ฑ DippieDoe | ๐ŸŽก | True | False | False | False | False |
| ๐Ÿ‡ณ๐Ÿ‡ฑ Hellendoorn | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡ณ๐Ÿ‡ฑ Ouwehands Dierenpark | ๐Ÿฆ | False | False | False | False | False |
| ๐Ÿ‡ณ๐Ÿ‡ฑ Wildlands | ๐Ÿฆ | False | False | False | False | False |
| ๐Ÿ‡ณ๐Ÿ‡ฑ Blijdorp | ๐Ÿฆ | False | False | True | False | False |
| ๐Ÿ‡ณ๐Ÿ‡ฑ Apenheul | ๐Ÿฆ | False | False | False | False | False |
| ๐Ÿ‡ณ๐Ÿ‡ฑ Safaripark Beekse Bergen | ๐Ÿฆ | False | True | False | False | False |
| ๐Ÿ‡ณ๐Ÿ‡ฑ Speelland Beekse Bergen | ๐ŸŽก | True | False | False | False | False |
| ๐Ÿ‡ต๐Ÿ‡ฑ Energylandia | ๐ŸŽก | True | False | True | False | False |
| ๐Ÿ‡ธ๐Ÿ‡ช Liseberg | ๐ŸŽก | True | True | False | True | False |
| ๐Ÿ‡ธ๐Ÿ‡ช Grona Lund | ๐ŸŽก | True | False | False | False | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Dollywood | ๐ŸŽก | True | False | False | False | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Silver Dollar City | ๐ŸŽก | True | False | False | False | False |
| ๐Ÿ‡บ๐Ÿ‡ธ San Diego Zoo | ๐Ÿฆ | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Hersheypark | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Six Flags Over Texas | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Six Flags Over Georgia | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Six Flags St. Louis | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Six Flags Great Adventure | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Six Flags Magic Mountain | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Six Flags Great America | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Six Flags Fiesta Texas | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Six Flags Hurricane Harbor, Arlington | ๐ŸŒŠ | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Six Flags Hurricane Harbor, Los Angeles | ๐ŸŒŠ | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Six Flags Hurricane Harbor, Chicago | ๐ŸŒŠ | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Six Flags America | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Six Flags Discovery Kingdom | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Six Flags New England | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Six Flags Hurricane Harbor, Jackson | ๐ŸŒŠ | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ The Great Escape | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Six Flags White Water, Atlanta | ๐ŸŒŠ | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Six Flags Mรฉxico | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Six Flags Hurricane Harbor, Oaxtepec | ๐ŸŒŠ | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Six Flags Hurricane Harbor, Concord | ๐ŸŒŠ | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Six Flags Frontier City | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Six Flags Hurricane Harbor, Oklahoma City | ๐ŸŒŠ | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Six Flags Darien Lake | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Six Flags Hurricane Harbor, Phoenix | ๐ŸŒŠ | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Six Flags Hurricane Harbor, SplashTown | ๐ŸŒŠ | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Six Flags Hurricane Harbor, Rockford | ๐ŸŒŠ | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Six Flags Wild Safari, Jackson | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Canada's Wonderland | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Carowinds | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Cedar Point | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Dorney Park | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ California's Great Adventure | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ King's Dominion | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Kings Island | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Knotts Berry Farm | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Michigans Adventure | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Valley Fair | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Worlds of Fun | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Seaworld San Antonio | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Seaworld San Diego | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Seaworld Orlando | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Bush Gardens Tampa Bay | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Bush Gardens Williamsburg | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Sesame Place Philadelphia | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Sesame Place San Diego | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Universal Studios Orlando | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Islands of Adventure | ๐ŸŽก | True | True | True | True | False |
| ๐Ÿ‡บ๐Ÿ‡ธ Universal Studios Hollywood | ๐ŸŽก | True | True | True | True | False |

## Parks on the planning

UK: Pleasure Beach, LegoLand Windsor, Drayton Manor
IT: Cincetitta World, **Mirabilandia**
ES: Puy de Fou Espana
DE: Europapark, Rulantica, Heidi Park
OO: Familypark
FR: Puy de Fou
DM: Legoland Billund, Djurs Sommerland, Farup Sommerland

## Description

This API was build using the [Nest](https://github.com/nestjs/nest) framework. Find the docs at the [NestJS Documentation](https://docs.nestjs.com/)

## Running the app

```bash
# development
npm run start

# watch mode
npm run start:dev

# production mode
npm run start:prod
```

## Adding a new park
If you have access to an API of a theme park/resort that is not yet included, you can include it yourself and create a pull request, or create an issue with all details needed to integrate the park (API Keys, URLs, ...)

### Structure
To keep the code easy to understand, there is a structure to the files. This is used for all parks. If the park you're adding is part of a resort, the contents is placed within a folder named after the resort (for example `disney`)
```text
...
src
+-- _dtos # The dto files for API documentation
+-- ...
+-- _interfaces # The global interface and enum files
+-- ...
+-- _services # The global services
+-- ...
+-- controllers # All HTTP controllers
+-- database # All models and repositories for the database connection
+-- parks
+-- {PARK_NAME} # The folder in which all files will be located
+-- interfaces # All interfaces for this park
+-- ...
+-- {PARK_NAME}-transfer # A service which is used to translate park-provided objects to the POI interface structure
+-- {PARK_NAME}-transfer.service.spec.ts
+-- {PARK_NAME}-transfer.service.ts
+-- data # A folder which contains static assets if no API is available for this data
+-- ...
+-- {PARK_NAME}.service.spec.ts # All tests for this park
+-- {PARK_NAME}.service.ts # The service for this park, which extends theme-park.service.ts
+-- schedules # All cron-jobs
...
```

After the right files have been added, the park has to be added to the constructor of `parks.service.ts` so Nest knows the park exists and is ready to be included with the other parks.

### Using other services
Some parks use a single API URL to return all data. For these parks, the `through-pois-theme-park.service.ts` file was created. This service can be usefull if a park returns data from for example `restaurants`, `rides` and `shows` in a single response. This way, you don't have to create all the methods by hand, but just implement the `getPois()` method.

Some parks use services provided by [themeparks.io](https://attractions.io). For these parks, a specific service was created called `themeparks-io-theme-park.service.ts`. This service can easily implement new themeparks.io parks by providing some basic information, since all data is returned in a standardized format.

### Attractions IO
Some parks use a service provided by attractions io. For these parks, a special `AioThemeparkService` was created. You need a few details from the app, including API key and build details, and you can include the park in the API.

## Formats
The API returns parks, restaurants, rides and others points of interest (POIs) in a standardized way, these are detailed below.
### Park Format
```typescript
export interface ThemePark {
id: string;
name: string;
description: string;
image: string;
countryCode: string;
supports?: ThemeParkSupports;
}
```

### Poi Format
```typescript
export interface Poi {
id: string;
category: PoiCategory;
rideCategory?: RideCategory;
original_category?: string;
title: string;
subTitle?: string;
description?: string;
area?: string;
createdAt?: string;
location?: {
lat: number,
lng: number
},
entrance?: {
id?: string,
world?: {
lat: number,
lng: number
},
map?: {
lat: number,
lng: number
}
};
exit?: {
id?: string,
world?: {
lat: number,
lng: number
},
map?: {
lat: number,
lng: number
}
};
maxAge?: string;
maxSize?: string;
minAge?: number;
minSize?: number;
minSizeEscort?: number;
tags?: string[];
image_url?: string;
website_url?: string;
fastpass?: boolean;
singlerider?: boolean;
featured?: boolean;
photoPoint?: boolean;

images?: string[];

waitingTimes?: WaitingTimes;

showTimes?: ShowTimes;

openingTimes?: PoiOpeningTime[];

original: any;
}

```

### Api URLs
Since the data of themeparks is copyrighted, API url's aren't included in this documentation. These can be retrieved by doing some research on your own and filling out the `.env` file.