此版本已更新,可与新的creative.gov 网站和 API 配合使用!!!
该脚本会抓取 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)
您还可以从标准输入读取。定义一个带有公园 ID 的文件(例如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
如果您只想要某些露营地 ID 的结果,请传递--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 中。您还可以 grep 输出成功表情符号 (?),然后执行一些响应操作,例如通知您有可用的露营地。请参阅下面的“Twitter 通知”部分。
如果您对旅行日期比较灵活,则可以在多个日期范围内搜索特定的连续住宿晚数。这对于高需求地区(如优胜美地山谷)的露营地或在空位很少的旺季期间非常有用。只需指定--nights
参数即可。例如,要搜索 2020 年 6 月在 Chisos Basin 为期 5 天的预订:
$ 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>
。该号码就是公园 ID。
前往 https://recreation.gov,首先搜索您想要的露营地,然后选择该露营地内的特定露营地。露营地的 URL 应类似于https://www.recreation.gov/camping/campsites/<number>
。该号码就是露营地 ID。
您可以使用“--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)
您也可以尝试一下这个网站。感谢帕斯图丹!
您可以通过定义每行一个营地 ID 的文件(例如, 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!
此代码使用 black 和 isort 格式化:
black -l 80 --py36 camping.py
isort camping.py
注意: black
仅真正支持 3.6+,所以要小心!
请随意提交拉取请求,或查看原文:https://github.com/bri-bri/yosemite-camping
在合并拉取请求之前,所有测试都应该通过。要运行所有测试,请 cd 进入项目目录并运行:
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 让我了解了旧版本的大部分内容。