ski-resort-lift-status
Introduction
ski-resort-lift-status is an aggregator of ski resort APIs, providing a common interface for reporting lift closures, hours of operation, types, and wait times where available. While many resorts offer APIs for this purpose, each API is formatted differently, requiring unique handlers for each mountain of interest. Many mountains do not offer APIs at all, and require custom HTML element parsing to determine status. This library provides a best-effort attempt to abstract these differences away.
Disclaimers
The usage of public APIs is always subject to change, and changes to ownership structures, API features, web page layout, etc. may cause incompatibilities with this library.
This library does not perform throttling, it is up to the user to avoid hammering the web servers. Libraries such as ratelimit can help avoid making the webadmins unhappy.
Not all mountains will fill in every field in the Lift object. Each mountain's implementation will perform a best-effort attempt to determine the current information, however the details may slightly differ between mountains and the time of the year. For example:
- Some mountains include all lifts in their lift report regardless of status, while others omit lifts that are out of season, restricted, etc.
- Some mountains report all lifts during the offseason, while others report no lifts.
- Some mountains report scheduled opening times while others just have open/closed.
- Some mountains mark status as scheduled if lifts have a delayed opening time, while others report expected lifts as open at all times.
Usage
import liftstatus
# For other mountains, see list in README
mountain = liftstatus.mountains.colorado.Vail()
for lift in mountain.get_lift_status():
print(f"{lift.name} - {lift.type} - {lift.status}")
Each entry in the lift status report is an instance of the following data class:
class Lift:
name: str
type: LiftType
status: LiftStatus # One of CLOSED, OPEN, HOLD, DELAYED, SCHEDULED, RESTRICTED, UNKNOWN
updated_at: datetime.datetime | None
open_time: datetime.time | None
closed_time: datetime.time | None
wait_time: datetime.timedelta | None
The following ski resorts are available for use. Pull requests are always appreciated for implementing more mountains.
British Columbia
California
| Mountain |
Class Name |
| Bear Mountain |
liftstatus.mountains.california.BearMountain() |
| Boreal |
liftstatus.mountains.california.Boreal() |
| Heavenly |
liftstatus.mountains.california.Heavenly() |
| June Mountain |
liftstatus.mountains.california.JuneMountain() |
| Kirkwood |
liftstatus.mountains.california.Kirkwood() |
| Mammoth Mountain |
liftstatus.mountains.california.MammothMountain() |
| Northstar |
liftstatus.mountains.california.Northstar() |
| Palisades Tahoe |
liftstatus.mountains.california.PalisadesTahoe() |
| Snow Summit |
liftstatus.mountains.california.SnowSummit() |
| Snow Valley |
liftstatus.mountains.california.SnowValley() |
| Soda Springs |
liftstatus.mountains.california.SodaSprings() |
Colorado
| Mountain |
Class Name |
| Arapahoe Basin |
liftstatus.mountains.colorado.ArapahoeBasin() |
| Aspen Highlands |
liftstatus.mountains.colorado.AspenHighlands() |
| Aspen Mountain |
liftstatus.mountains.colorado.AspenMountain() |
| Beaver Creek |
liftstatus.mountains.colorado.BeaverCreek() |
| Breckenridge |
liftstatus.mountains.colorado.Breckenridge() |
| Buttermilk |
liftstatus.mountains.colorado.Buttermilk() |
| Copper Mountain |
liftstatus.mountains.colorado.Copper() |
| Crested Butte |
liftstatus.mountains.colorado.CrestedButte() |
| Eldora |
liftstatus.mountains.colorado.Eldora() |
| Keystone |
liftstatus.mountains.colorado.Keystone() |
| Loveland |
liftstatus.mountains.colorado.Loveland() |
| Snowmass |
liftstatus.mountains.colorado.Snowmass() |
| Steamboat |
liftstatus.mountains.colorado.Steamboat() |
| Vail |
liftstatus.mountains.colorado.Vail() |
| Winter Park |
liftstatus.mountains.colorado.WinterPark() |
Idaho
| Mountain |
Class Name |
| Schweitzer |
liftstatus.mountains.idaho.Schweitzer() |
Indiana
| Mountain |
Class Name |
| Paoli Peaks |
liftstatus.mountains.indiana.PaoliPeaks() |
Maine
Michigan
Minnesota
| Mountain |
Class Name |
| Afton Alps |
liftstatus.mountains.minnesota.AftonAlps() |
Missouri
| Mountain |
Class Name |
| Hidden Valley |
liftstatus.mountains.missouri.HiddenValley() |
| Snow Creek |
liftstatus.mountains.missouri.SnowCreek() |
New Hampshire
| Mountain |
Class Name |
| Attitash |
liftstatus.mountains.newhampshire.Attitash() |
| Crotched Mountain |
liftstatus.mountains.newhampshire.CrotchedMountain() |
| Loon Mountain |
liftstatus.mountains.newhampshire.LoonMountain() |
| Mount Sunapee |
liftstatus.mountains.newhampshire.MountSunapee() |
| Wildcat |
liftstatus.mountains.newhampshire.Wildcat() |
New York
| Mountain |
Class Name |
| Hunter Mountain |
liftstatus.mountains.newyork.HunterMountain() |
Ohio
Ontario
| Mountain |
Class Name |
| Blue Mountain |
liftstatus.mountains.ontario.BlueMountain() |
Oregon
| Mountain |
Class Name |
| Mt. Bachelor |
liftstatus.mountains.oregon.MountBachelor() |
Pennsylvania
Quebec
| Mountain |
Class Name |
| Mont Tremblant |
liftstatus.mountains.quebec.Tremblant() |
Utah
| Mountain |
Class Name |
| Brighton |
liftstatus.mountains.utah.DeerValley() |
| Deer Valley |
liftstatus.mountains.utah.Brighton() |
| Park City |
liftstatus.mountains.utah.ParkCity() |
| Snowbird |
liftstatus.mountains.utah.Snowbird() |
| Solitude |
liftstatus.mountains.utah.Solitude() |
Vermont
| Mountain |
Class Name |
| Mount Snow |
liftstatus.mountains.vermont.MountSnow() |
| Okemo |
liftstatus.mountains.vermont.Okemo() |
| Stowe |
liftstatus.mountains.vermont.Stowe() |
| Stratton |
liftstatus.mountains.vermont.Stratton() |
| Sugarbush |
liftstatus.mountains.vermont.Sugarbush() |
Washington
West Virginia
| Mountain |
Class Name |
| Snowshoe |
liftstatus.mountains.westvirginia.Snowshoe() |
Wisconsin
| Mountain |
Class Name |
| Wilmot Mountain |
liftstatus.mountains.wisconsin.WilmotMountain() |
Wyoming
| Mountain |
Class Name |
| Jackson Hole |
liftstatus.mountains.wyoming.JacksonHole() |
Development
-
Clone the project repository:
cd /path/to/projects
git clone https://github.com/NietoSkunk/ski-resort-lift-status.git
cd ski-resort-lift-status
-
Install required packages:
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt -r requirements-dev.txt
-
Install package as an editable library:
pip install -e .
-
Run tests:
pytest
-
Build wheel:
python3 -m build
Contributing
If you have code to contribute to the project, open a pull request and describe clearly the changes and what they are intended to do (enhancement, bug fixes etc).
Alternatively, you may raise bugs or suggestions by opening an issue.