¡Esto se ha actualizado para que funcione con el nuevo sitio Recreation.gov y API!
Este script busca en el sitio web https://recreation.gov la disponibilidad de campamentos.
Nota: no abuse de este script. La mayoría de la gente no sabe cómo ejecutar scrapers en sitios web, por lo que tienes una ventaja injusta al usar esto.
$ python camping.py --start-date 2018-07-20 --end-date 2018-07-23 --parks 232448 232450 232447 232770
TUOLUMNE MEADOWS: 0 site(s) available out of 148 site(s)
? LOWER PINES: 11 site(s) available out of 73 site(s)
UPPER PINES: 0 site(s) available out of 235 site(s)
BASIN MONTANA CAMPGROUND: 0 site(s) available out of 30 site(s)
También puedes leer desde stdin. Defina un archivo (por ejemplo, parks.txt
) con ID de parque como este:
232447
232449
232450
232448
y luego usarlo así:
$ python camping.py --start-date 2018-07-20 --end-date 2018-07-23 --stdin < parks.txt
Para powershell, prueba esto:
PS > Get-Content parks.txt | python camping.py --start-date 2021-09-24 --end-date 2022-09-24 --stdin
Si desea ver más información sobre los campings disponibles, pase --show-campsite-info
junto con --nights <int>
:
$ python camping.py --start-date 2018-07-20 --end-date 2018-07-23 --parks 232448 232450 232447 232770 --show-campsite-info --nights 1
There are campsites available from 2018-07-20 to 2018-07-23!!!
? ELK CREEK CAMPGROUND (SAWTOOTH NF) (232042): 1 site(s) available out of 1 site(s)
* Site 69800 is available on the following dates:
* 2018-07-20 -> 2018-07-21
* 2018-07-21 -> 2018-07-22
Si solo desea resultados para ciertos ID de camping, pase --campsite-ids <int>
:
$ python camping.py --start-date 2018-07-20 --end-date 2018-07-23 --parks 232431 --show-campsite-info --nights 1 --campsite-ids 18621
Querrá poner este script en un crontab de 5 minutos. También puedes obtener el resultado del emoji de éxito (?) y luego hacer algo en respuesta, como notificarte que hay un campamento disponible. Consulte la sección "Notificación de Twitter" a continuación.
Si es flexible con las fechas de viaje, puede buscar una cantidad específica de noches contiguas dentro de una amplia gama de fechas. Esto es útil para campamentos en áreas de alta demanda (como el valle de Yosemite) o durante la temporada alta, cuando las vacantes son escasas. Simplemente especifique el argumento --nights
. Por ejemplo, para buscar una reserva de 5 días en el mes de junio de 2020 en Chisos Basin:
$ python camping.py --start-date 2020-06-01 --end-date 2020-06-30 --nights 5 234038
There are campsites available from 2020-06-01 to 2020-06-30!!!
? CHISOS BASIN (BIG BEND) (234038): 13 site(s) available out of 62 site(s)
Lo que querrás hacer es ir a https://recreation.gov y buscar el campamento que deseas. Haga clic en él en la barra lateral de búsqueda. Esto debería llevarlo a una página para ese campamento; la URL se verá así: https://www.recreation.gov/camping/campgrounds/<number>
. Ese número es la identificación del parque.
Vaya a https://recreation.gov y primero busque el campamento que desea y luego seleccione el campamento específico dentro de ese campamento. La URL del campamento debería verse como https://www.recreation.gov/camping/campsites/<number>
. Ese número es el ID del camping.
Puede buscar disponibilidad en un solo camping específico utilizando el argumento '--campsite-ids'. Esto puede ser útil si tiene un campamento favorito que le gusta usar o si tiene una reserva en un campamento específico al que desea agregar días antes o después de su reserva existente. Esta búsqueda sólo funciona para una combinación de camping/camping a la vez.
$ python camping.py --start-date 2020-06-01 --end-date 2020-06-30 --nights 5 --parks 234038 --campsite-ids 6943
There are campsites available from 2020-06-01 to 2020-06-30!!!
? CHISOS BASIN (BIG BEND) (234038): 1 site(s) available out of 62 site(s)
También puedes probar este sitio. Gracias a pastudan!
Puede excluir campings específicos, por ejemplo sitios de grupo, definiendo un archivo (por ejemplo, excluded.txt
) con un ID de camping por línea y utilizando el argumento --exclusion-file
como este:
$ python camping.py --start-date 2018-07-20 --end-date 2018-07-23 --parks 232448 232450 232447 232770 --exclusion-file excluded.txt
Escribí esto en Python 3.7 pero probé que también funciona con 3.5 y 3.6. Lo mejor es usar 3.9+
python3 -m venv myvenv
source myvenv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
# You're good to go!
Este código está formateado usando negro e isort:
black -l 80 --py36 camping.py
isort camping.py
Nota: black
solo es compatible con 3.6+, así que ¡cuidado!
No dudes en enviar solicitudes de extracción o mirar el original: https://github.com/bri-bri/yosemite-camping
Todas las pruebas deben pasar antes de que se fusione una solicitud de extracción. Para ejecutar todas las pruebas, acceda al directorio del proyecto y ejecute:
python -m unittest
Si desea recibir notificaciones sobre la disponibilidad del camping a través de Twitter (es la única API que es realmente fácil de usar), puede hacer esto:
twitter_credentials.json
para que coincidan con sus valores clave.notifier.py
. Vea a continuación un ejemplo. python camping.py --start-date 2018-07-20 --end-date 2018-07-23 --parks 70926 70928 | python notifier.py @banool1
Querrás crear la aplicación en otra cuenta (como una cuenta de bot), no en la tuya, para recibir una notificación cuando se publique el tweet.
Dejé mis claves API aquí pero no las explotes, gracias.
Gracias a https://github.com/bri-bri/yosemite-camping por ayudarme a llegar hasta la versión anterior.