Dies wurde aktualisiert, um mit der neuen Website und API von „recreation.gov“ zu funktionieren!!!
Dieses Skript durchsucht die Website https://recreation.gov nach Verfügbarkeiten von Campingplätzen.
Hinweis: Bitte missbrauchen Sie dieses Skript nicht. Die meisten Leute da draußen wissen nicht, wie man Scraper gegen Websites ausführt, Sie haben also einen unfairen Vorteil, wenn Sie dies verwenden.
$ 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)
Sie können auch von stdin lesen. Definieren Sie eine Datei (z. B. parks.txt
) mit Park-IDs wie folgt:
232447
232449
232450
232448
und dann verwenden Sie es so:
$ python camping.py --start-date 2018-07-20 --end-date 2018-07-23 --stdin < parks.txt
Versuchen Sie Folgendes für Powershell:
PS > Get-Content parks.txt | python camping.py --start-date 2021-09-24 --end-date 2022-09-24 --stdin
Wenn Sie weitere Informationen darüber sehen möchten, welche Campingplätze verfügbar sind, übergeben Sie --show-campsite-info
zusammen mit --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
Wenn Sie nur Ergebnisse für bestimmte Campingplatz-IDs wünschen, übergeben Sie --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
Sie möchten dieses Skript in eine 5-Minuten-Crontab einfügen. Sie könnten die Ausgabe auch nach dem Erfolgs-Emoji (?) durchsuchen und dann etwas als Reaktion darauf tun, z. B. Sie benachrichtigen, dass ein Campingplatz verfügbar ist. Siehe den Abschnitt „Twitter-Benachrichtigung“ unten.
Wenn Sie hinsichtlich der Reisedaten flexibel sind, können Sie innerhalb eines breiten Datumsbereichs nach einer bestimmten Anzahl an zusammenhängenden Nächten suchen. Dies ist nützlich für Campingplätze in Gebieten mit hoher Nachfrage (wie Yosemite Valley) oder während der Hochsaison, wenn die Öffnungszeiten selten sind. Geben Sie einfach das Argument --nights
an. So suchen Sie beispielsweise im Chisos Basin nach einer 5-Tages-Reservierung im Monat Juni 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)
Gehen Sie zu https://recreation.gov und suchen Sie nach dem gewünschten Campingplatz. Klicken Sie in der Suchseitenleiste darauf. Dies sollte Sie zu einer Seite für diesen Campingplatz führen. Die URL sieht wie folgt aus https://www.recreation.gov/camping/campgrounds/<number>
. Diese Nummer ist die Park-ID.
Gehen Sie zu https://recreation.gov und suchen Sie zunächst nach dem gewünschten Campingplatz und wählen Sie dann den spezifischen Campingplatz auf diesem Campingplatz aus. Die URL für den Campingplatz sollte wie folgt aussehen: https://www.recreation.gov/camping/campsites/<number>
. Diese Nummer ist die Campingplatz-ID.
Mit dem Argument „--campsite-ids“ können Sie nach Verfügbarkeit auf nur einem bestimmten Campingplatz suchen. Dies kann nützlich sein, wenn Sie einen Lieblingscampingplatz haben, den Sie gerne nutzen, oder wenn Sie eine Reservierung auf einem bestimmten Campingplatz haben, zu der Sie Tage vor oder nach Ihrer bestehenden Reservierung hinzufügen möchten. Diese Suche funktioniert jeweils nur für eine Campingplatz-/Campingplatz-Kombination.
$ 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)
Sie können diese Seite auch einmal ausprobieren. Danke an pastudan!
Sie können bestimmte Campingplätze, zum Beispiel Gruppenstandorte, ausschließen, indem Sie eine Datei (z. B. „ excluded.txt
) mit einer Campingplatz-ID pro Zeile definieren und das Argument --exclusion-file
wie folgt verwenden:
$ python camping.py --start-date 2018-07-20 --end-date 2018-07-23 --parks 232448 232450 232447 232770 --exclusion-file excluded.txt
Ich habe dies in Python 3.7 geschrieben, aber ich habe getestet, dass es auch mit 3.5 und 3.6 funktioniert. Am besten verwenden Sie 3.9+
python3 -m venv myvenv
source myvenv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
# You're good to go!
Dieser Code ist mit Schwarz und Isort formatiert:
black -l 80 --py36 camping.py
isort camping.py
Hinweis: black
unterstützt wirklich nur 3.6+, also aufgepasst!
Senden Sie gerne Pull-Requests oder schauen Sie sich das Original an: https://github.com/bri-bri/yosemite-camping
Alle Tests sollten bestanden werden, bevor eine Pull-Anfrage zusammengeführt wird. Um alle Tests auszuführen, wechseln Sie in das Projektverzeichnis und führen Sie Folgendes aus:
python -m unittest
Wenn Sie über Twitter über die Verfügbarkeit von Campingplätzen informiert werden möchten (dies ist die einzige API, die tatsächlich einfach zu verwenden ist), können Sie Folgendes tun:
twitter_credentials.json
so, dass sie Ihren Schlüsselwerten entsprechen.notifier.py
weiter. Ein Beispiel finden Sie weiter unten. python camping.py --start-date 2018-07-20 --end-date 2018-07-23 --parks 70926 70928 | python notifier.py @banool1
Sie möchten die App auf einem anderen Konto (z. B. einem Bot-Konto) erstellen, nicht auf Ihrem eigenen, damit Sie benachrichtigt werden, wenn der Tweet veröffentlicht wird.
Ich habe meine API-Schlüssel hier gelassen, nutze sie aber nicht aus, danke.
Vielen Dank an https://github.com/bri-bri/yosemite-camping, der mich für die alte Version den größten Teil des Weges dorthin gebracht hat.