Isso foi atualizado para funcionar com o novo site e API recreação.gov!!!
Este script vasculha o site https://recreation.gov em busca de disponibilidade de acampamentos.
Nota: Por favor, não abuse deste script. A maioria das pessoas não sabe como executar scrapers em sites, então você tem uma vantagem injusta ao usar isso.
$ 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)
Você também pode ler em stdin. Defina um arquivo (por exemplo, parks.txt
) com IDs de parque como este:
232447
232449
232450
232448
e então use assim:
$ python camping.py --start-date 2018-07-20 --end-date 2018-07-23 --stdin < parks.txt
Para o PowerShell, tente isto:
PS > Get-Content parks.txt | python camping.py --start-date 2021-09-24 --end-date 2022-09-24 --stdin
Se você quiser ver mais informações sobre quais campings estão disponíveis, passe --show-campsite-info
junto com --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
Se você deseja resultados apenas para determinados IDs de acampamento, passe --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
Você desejará colocar esse script em um crontab de 5 minutos. Você também pode usar o grep na saída para o emoji de sucesso (?) e então fazer algo em resposta, como notificá-lo de que há um acampamento disponível. Consulte a seção "Notificação do Twitter" abaixo.
Se você for flexível nas datas de viagem, poderá pesquisar um número específico de noites contíguas em uma ampla variedade de datas. Isso é útil para acampamentos em áreas de alta demanda (como o Vale de Yosemite) ou durante a alta temporada, quando as vagas são raras. Basta especificar o argumento --nights
. Por exemplo, para pesquisar uma reserva de 5 dias no mês de junho de 2020 na Bacia de Chisos:
$ 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)
O que você vai querer fazer é acessar https://recreation.gov e procurar o acampamento desejado. Clique nele na barra lateral de pesquisa. Isso deve levá-lo a uma página desse acampamento, o URL será semelhante a https://www.recreation.gov/camping/campgrounds/<number>
. Esse número é o ID do parque.
Vá para https://recreation.gov e primeiro pesquise o acampamento desejado e, em seguida, selecione o acampamento específico dentro desse acampamento. O URL do acampamento deve ser semelhante https://www.recreation.gov/camping/campsites/<number>
. Esse número é o ID do acampamento.
Você pode pesquisar a disponibilidade em apenas um acampamento específico usando o argumento '--campsite-ids'. Isso pode ser útil se você tiver um acampamento favorito que gostaria de usar ou se tiver uma reserva em um acampamento específico ao qual deseja adicionar dias antes ou depois da reserva existente. Esta pesquisa só funciona para uma combinação de acampamento/acampamento por 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)
Você também pode dar uma olhada neste site. Obrigado ao pastudan!
Você pode excluir acampamentos específicos, por exemplo, sites de grupo, definindo um arquivo (por exemplo, excluded.txt
) com um ID de acampamento por linha e usando o 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
Eu escrevi isso em Python 3.7, mas testei-o como funcionando com 3.5 e 3.6 também. É melhor 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 é formatado usando preto e isort:
black -l 80 --py36 camping.py
isort camping.py
Nota: black
realmente suporta apenas 3.6+, então cuidado!
Sinta-se à vontade para enviar solicitações pull ou consulte o original: https://github.com/bri-bri/yosemite-camping
Todos os testes devem ser aprovados antes que uma solicitação pull seja mesclada. Para executar todos os testes, entre no diretório do projeto e execute:
python -m unittest
Se quiser ser notificado sobre a disponibilidade de acampamentos via Twitter (eles são a única API que é realmente fácil de usar), você pode fazer o seguinte:
twitter_credentials.json
para corresponder aos valores-chave.notifier.py
. Veja abaixo um exemplo. python camping.py --start-date 2018-07-20 --end-date 2018-07-23 --parks 70926 70928 | python notifier.py @banool1
Você vai querer fazer o aplicativo em outra conta (como uma conta de bot), não na sua, para ser notificado quando o tweet for publicado.
Deixei minhas chaves de API aqui, mas não as explore, obrigado.
Obrigado a https://github.com/bri-bri/yosemite-camping por me levar até lá para a versão antiga.