Он был обновлен для работы с новым сайтом и APIrecreation.gov!!!
Этот скрипт сканирует веб-сайт https://recreation.gov на предмет наличия мест для кемпинга.
Примечание. Пожалуйста, не злоупотребляйте этим сценарием. Большинство людей не знают, как запускать парсеры на веб-сайтах, поэтому, используя это, вы получаете несправедливое преимущество.
$ 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)
Вы также можете прочитать из стандартного ввода. Определите файл (например, parks.txt
) с идентификаторами парков следующим образом:
232447
232449
232450
232448
а затем используйте его следующим образом:
$ python camping.py --start-date 2018-07-20 --end-date 2018-07-23 --stdin < parks.txt
Для PowerShell попробуйте следующее:
PS > Get-Content parks.txt | python camping.py --start-date 2021-09-24 --end-date 2022-09-24 --stdin
Если вы хотите просмотреть дополнительную информацию о доступных кемпингах, передайте --show-campsite-info
вместе с --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
Если вам нужны результаты только для определенных идентификаторов кемпингов, передайте --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
Вам нужно поместить этот скрипт в 5-минутный crontab. Вы также можете получить выходные данные смайлика успеха (?), а затем сделать что-нибудь в ответ, например, уведомить вас о наличии доступного лагеря. См. раздел «Уведомления Twitter» ниже.
Если у вас гибкий выбор дат поездки, вы можете найти определенное количество последовательных ночей в широком диапазоне дат. Это полезно для палаточных лагерей в районах с повышенным спросом (например, в долине Йосемити) или в пик сезона, когда места открываются редко. Просто укажите аргумент --nights
. Например, чтобы найти 5-дневное бронирование в июне 2020 года в бассейне Чисос:
$ 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)
Вам нужно зайти на https://recreation.gov и найти нужный вам палаточный лагерь. Нажмите на него на боковой панели поиска. Вы должны перейти на страницу этого палаточного лагеря, URL-адрес будет выглядеть так: https://www.recreation.gov/camping/campgrounds/<number>
. Этот номер является идентификатором парка.
Перейдите на https://recreation.gov и сначала найдите нужный вам палаточный лагерь, а затем выберите конкретный кемпинг в этом палаточном лагере. URL-адрес кемпинга должен выглядеть так: https://www.recreation.gov/camping/campsites/<number>
. Это число является идентификатором кемпинга.
Вы можете выполнить поиск доступности только в одном конкретном кемпинге, используя аргумент --campsite-ids. Это может быть полезно, если у вас есть любимый кемпинг, который вы хотели бы использовать, или если у вас есть бронирование в определенном кемпинге, к которому вы хотите добавить дни до или после существующего бронирования. Этот поиск работает только для одной комбинации палаточного лагеря и кемпинга одновременно.
$ 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)
Вы также можете попробовать этот сайт. Спасибо пастудану!
Вы можете исключить определенные кемпинги, например групповые, определив файл (например, excluded.txt
) с одним идентификатором кемпинга в каждой строке и используя аргумент --exclusion-file
следующим образом:
$ python camping.py --start-date 2018-07-20 --end-date 2018-07-23 --parks 232448 232450 232447 232770 --exclusion-file excluded.txt
Я написал это на Python 3.7, но проверил, работает ли он также с версиями 3.5 и 3.6. Лучше всего использовать 3.9+
python3 -m venv myvenv
source myvenv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
# You're good to go!
Этот код отформатирован с использованием черного цвета и isort:
black -l 80 --py36 camping.py
isort camping.py
Примечание: black
действительно поддерживает только версию 3.6+, так что будьте осторожны!
Не стесняйтесь отправлять запросы на включение или посмотрите оригинал: https://github.com/bri-bri/yosemite-camping.
Все тесты должны пройти до того, как запрос на включение будет объединен. Чтобы запустить все тесты, перейдите в каталог проекта и запустите:
python -m unittest
Если вы хотите получать уведомления о доступности кемпингов через Twitter (это единственный API, который действительно прост в использовании), вы можете сделать это:
twitter_credentials.json
, чтобы они соответствовали значениям вашего ключа.notifier.py
. См. пример ниже. python camping.py --start-date 2018-07-20 --end-date 2018-07-23 --parks 70926 70928 | python notifier.py @banool1
Вы захотите создать приложение для другой учетной записи (например, учетной записи бота), а не для своей собственной, чтобы вы получали уведомление, когда выходит твит.
Я оставил здесь свои ключи API, но не злоупотребляйте ими, спасибо.
Спасибо https://github.com/bri-bri/yosemite-camping за то, что помогли мне пройти большую часть пути к старой версии.