これは、新しい recreation.gov サイトと API で動作するように更新されました。
このスクリプトは、https://recreation.gov Web サイトをスクレイピングしてキャンプ場の空き状況を確認します。
注:このスクリプトを悪用しないでください。ほとんどの人は Web サイトに対してスクレイパーを実行する方法を知らないため、これを使用すると不当に有利になります。
$ 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 月の 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」引数を使用すると、特定の 1 つのキャンプ場だけで空き状況を検索できます。これは、よく利用したいお気に入りのキャンプ場がある場合、または特定のキャンプ場を予約しており、既存の予約の前後に日数を追加したい場合に便利です。この検索は、一度に 1 つのキャンプ場/キャンプ場の組み合わせに対してのみ機能します。
$ 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)
このサイトを試してみることもできます。パストゥダンに感謝します!
特定のキャンプサイト (グループ サイトなど) を除外するには、1 行に 1 つのキャンプサイト 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 経由でキャンプサイトの空き状況に関する通知を受け取りたい場合 (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 に感謝します。