From f2b227f4b6e765b288b764c5eb363d60e48751b8 Mon Sep 17 00:00:00 2001 From: Kumi Date: Thu, 15 Sep 2022 13:12:50 +0000 Subject: [PATCH] =?UTF-8?q?Base=20implementation=20=E2=80=93=20requests,?= =?UTF-8?q?=20classes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 + LICENSE | 19 + README.md | 0 doc/example_vessel.json | 2126 ++++++++++++++++++++++++ pyproject.toml | 23 + src/pycruisemapper/__init__.py | 0 src/pycruisemapper/classes/__init__.py | 1 + src/pycruisemapper/classes/api.py | 48 + src/pycruisemapper/classes/http.py | 12 + src/pycruisemapper/classes/vessel.py | 60 + src/pycruisemapper/const.py | 5 + 11 files changed, 2297 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 doc/example_vessel.json create mode 100644 pyproject.toml create mode 100644 src/pycruisemapper/__init__.py create mode 100644 src/pycruisemapper/classes/__init__.py create mode 100644 src/pycruisemapper/classes/api.py create mode 100644 src/pycruisemapper/classes/http.py create mode 100644 src/pycruisemapper/classes/vessel.py create mode 100644 src/pycruisemapper/const.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..99253ef --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +__pycache__/ +*.pyc +venv/ \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..083f900 --- /dev/null +++ b/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2022 Kumi Mitterer + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/doc/example_vessel.json b/doc/example_vessel.json new file mode 100644 index 0000000..8c11fa2 --- /dev/null +++ b/doc/example_vessel.json @@ -0,0 +1,2126 @@ +{ + "id": "743", + "name": "Mein Schiff 1", + "url": "https://www.cruisemapper.com/ships/Mein-Schiff-1-743", + "url_deckplans": "https://www.cruisemapper.com/deckplans/Mein-Schiff-1-743", + "url_staterooms": "https://www.cruisemapper.com/cabins/Mein-Schiff-1-743", + "line": { + "id": "32", + "title": "TUI Cruises", + "url": "https://www.cruisemapper.com/cruise-lines/TUI-Cruises-32" + }, + "image": "/images/ships/743-29e082088bd9.jpg", + "lastReport": "", + "destination": "Quebec City", + "eta": "September 15, 03:30", + "spec_length": "316 m / 1036 ft", + "spec_passengers": 2894, + "flag": { + "code": "mt", + "name": "Malta" + }, + "year_of_built": 2018, + "weather": { + "temperature": "\"min: 49°F
9.2°C", + "wind": "\"Wind:\"Wind:Gentle breeze
4.5 m/s ", + "wave": "\"Min 61 °F / 16 °C
44 °F / 7 °C", + "localtime": "2022-09-15 07:13" + }, + "track": [ + { + "lat": 40.66565, + "lon": -74.07203, + "label": "" + }, + { + "lat": 40.66565, + "lon": -74.07203, + "label": "" + }, + { + "lat": 40.66566, + "lon": -74.07203, + "label": "" + }, + { + "lat": 40.66565, + "lon": -74.07203, + "label": "" + }, + { + "lat": 40.66566, + "lon": -74.07203, + "label": "" + }, + { + "lat": 40.66565, + "lon": -74.07203, + "label": "" + }, + { + "lat": 40.66566, + "lon": -74.07203, + "label": "" + }, + { + "lat": 40.66565, + "lon": -74.07201, + "label": "" + }, + { + "lat": 40.66566, + "lon": -74.07203, + "label": "" + }, + { + "lat": 40.66565, + "lon": -74.07201, + "label": "" + }, + { + "lat": 40.66566, + "lon": -74.07201, + "label": "" + }, + { + "lat": 40.66565, + "lon": -74.07201, + "label": "" + }, + { + "lat": 40.66566, + "lon": -74.07203, + "label": "09 Sep 01:50" + }, + { + "lat": 40.66565, + "lon": -74.07203, + "label": "" + }, + { + "lat": 40.66566, + "lon": -74.07203, + "label": "" + }, + { + "lat": 40.66565, + "lon": -74.07203, + "label": "" + }, + { + "lat": 40.66566, + "lon": -74.07203, + "label": "" + }, + { + "lat": 40.66565, + "lon": -74.07201, + "label": "" + }, + { + "lat": 40.66566, + "lon": -74.07203, + "label": "" + }, + { + "lat": 40.66565, + "lon": -74.07203, + "label": "" + }, + { + "lat": 40.66566, + "lon": -74.07203, + "label": "" + }, + { + "lat": 40.66565, + "lon": -74.07203, + "label": "" + }, + { + "lat": 40.66566, + "lon": -74.07203, + "label": "" + }, + { + "lat": 40.66565, + "lon": -74.07201, + "label": "" + }, + { + "lat": 40.66566, + "lon": -74.07203, + "label": "" + }, + { + "lat": 40.66565, + "lon": -74.07203, + "label": "" + }, + { + "lat": 40.66566, + "lon": -74.07201, + "label": "" + }, + { + "lat": 40.66565, + "lon": -74.07201, + "label": "" + }, + { + "lat": 40.66566, + "lon": -74.07201, + "label": "" + }, + { + "lat": 40.66565, + "lon": -74.07203, + "label": "" + }, + { + "lat": 40.66566, + "lon": -74.07201, + "label": "" + }, + { + "lat": 40.66565, + "lon": -74.07201, + "label": "" + }, + { + "lat": 40.66566, + "lon": -74.07201, + "label": "" + }, + { + "lat": 40.66565, + "lon": -74.07201, + "label": "" + }, + { + "lat": 40.66566, + "lon": -74.07201, + "label": "" + }, + { + "lat": 40.66565, + "lon": -74.07203, + "label": "" + }, + { + "lat": 40.66566, + "lon": -74.07201, + "label": "" + }, + { + "lat": 40.66565, + "lon": -74.07201, + "label": "" + }, + { + "lat": 40.66566, + "lon": -74.07201, + "label": "" + }, + { + "lat": 40.66565, + "lon": -74.07201, + "label": "" + }, + { + "lat": 40.66566, + "lon": -74.07201, + "label": "" + }, + { + "lat": 40.66565, + "lon": -74.07203, + "label": "" + }, + { + "lat": 40.66566, + "lon": -74.07203, + "label": "" + }, + { + "lat": 40.66565, + "lon": -74.07201, + "label": "" + }, + { + "lat": 40.66566, + "lon": -74.07201, + "label": "" + }, + { + "lat": 40.66565, + "lon": -74.07201, + "label": "" + }, + { + "lat": 40.66566, + "lon": -74.07201, + "label": "" + }, + { + "lat": 40.66565, + "lon": -74.07201, + "label": "" + }, + { + "lat": 40.66566, + "lon": -74.07201, + "label": "" + }, + { + "lat": 40.66565, + "lon": -74.07201, + "label": "" + }, + { + "lat": 40.66566, + "lon": -74.07201, + "label": "10 Sep 01:17" + }, + { + "lat": 40.66566, + "lon": -74.07173, + "label": "" + }, + { + "lat": 40.66408, + "lon": -74.06728, + "label": "" + }, + { + "lat": 40.66135, + "lon": -74.06206, + "label": "" + }, + { + "lat": 40.6583, + "lon": -74.05611, + "label": "" + }, + { + "lat": 40.65758, + "lon": -74.05286, + "label": "" + }, + { + "lat": 40.6634, + "lon": -74.04883, + "label": "" + }, + { + "lat": 40.67216, + "lon": -74.04298, + "label": "" + }, + { + "lat": 40.67853, + "lon": -74.0386, + "label": "" + }, + { + "lat": 40.68448, + "lon": -74.03491, + "label": "" + }, + { + "lat": 40.6855, + "lon": -74.03568, + "label": "" + }, + { + "lat": 40.68061, + "lon": -74.03918, + "label": "" + }, + { + "lat": 40.66615, + "lon": -74.04876, + "label": "" + }, + { + "lat": 40.64928, + "lon": -74.05628, + "label": "" + }, + { + "lat": 40.63013, + "lon": -74.05313, + "label": "" + }, + { + "lat": 40.61025, + "lon": -74.04731, + "label": "" + }, + { + "lat": 40.58853, + "lon": -74.03965, + "label": "" + }, + { + "lat": 40.56855, + "lon": -74.03266, + "label": "" + }, + { + "lat": 40.54578, + "lon": -74.02631, + "label": "" + }, + { + "lat": 40.52748, + "lon": -74.01518, + "label": "" + }, + { + "lat": 40.51775, + "lon": -73.99206, + "label": "" + }, + { + "lat": 40.50795, + "lon": -73.96731, + "label": "" + }, + { + "lat": 40.49796, + "lon": -73.94246, + "label": "" + }, + { + "lat": 40.48938, + "lon": -73.92118, + "label": "" + }, + { + "lat": 40.46345, + "lon": -73.85196, + "label": "" + }, + { + "lat": 40.4286, + "lon": -73.74391, + "label": "" + }, + { + "lat": 40.41761, + "lon": -73.61748, + "label": "" + }, + { + "lat": 40.40116, + "lon": -73.48139, + "label": "" + }, + { + "lat": 40.38653, + "lon": -73.37705, + "label": "" + }, + { + "lat": 40.38258, + "lon": -73.23685, + "label": "" + }, + { + "lat": 40.38021, + "lon": -73.109, + "label": "" + }, + { + "lat": 40.38901, + "lon": -72.99968, + "label": "" + }, + { + "lat": 40.3944, + "lon": -72.87721, + "label": "" + }, + { + "lat": 40.39348, + "lon": -72.73521, + "label": "" + }, + { + "lat": 40.3906, + "lon": -72.59476, + "label": "" + }, + { + "lat": 40.38883, + "lon": -72.49701, + "label": "" + }, + { + "lat": 40.38708, + "lon": -72.37486, + "label": "" + }, + { + "lat": 40.38603, + "lon": -72.24583, + "label": "" + }, + { + "lat": 40.38745, + "lon": -72.11553, + "label": "" + }, + { + "lat": 40.38918, + "lon": -71.9767, + "label": "" + }, + { + "lat": 40.39221, + "lon": -71.86818, + "label": "" + }, + { + "lat": 40.39308, + "lon": -71.73166, + "label": "" + }, + { + "lat": 40.39331, + "lon": -71.61738, + "label": "" + }, + { + "lat": 40.39588, + "lon": -71.48051, + "label": "" + }, + { + "lat": 40.39771, + "lon": -71.35555, + "label": "" + }, + { + "lat": 40.40236, + "lon": -71.22395, + "label": "" + }, + { + "lat": 40.40516, + "lon": -71.11473, + "label": "" + }, + { + "lat": 40.40555, + "lon": -70.99445, + "label": "" + }, + { + "lat": 40.40903, + "lon": -70.85123, + "label": "" + }, + { + "lat": 40.41268, + "lon": -70.72688, + "label": "" + }, + { + "lat": 40.415, + "lon": -70.59965, + "label": "" + }, + { + "lat": 40.42661, + "lon": -70.47546, + "label": "" + }, + { + "lat": 40.42508, + "lon": -70.34845, + "label": "" + }, + { + "lat": 40.42846, + "lon": -70.23778, + "label": "" + }, + { + "lat": 40.42633, + "lon": -70.08401, + "label": "" + }, + { + "lat": 40.42663, + "lon": -69.9815, + "label": "" + }, + { + "lat": 40.42725, + "lon": -69.8473, + "label": "" + }, + { + "lat": 40.4306, + "lon": -69.72788, + "label": "" + }, + { + "lat": 40.43316, + "lon": -69.6014, + "label": "" + }, + { + "lat": 40.43485, + "lon": -69.47803, + "label": "" + }, + { + "lat": 40.43833, + "lon": -69.33491, + "label": "" + }, + { + "lat": 40.45138, + "lon": -69.21998, + "label": "" + }, + { + "lat": 40.49643, + "lon": -69.11385, + "label": "" + }, + { + "lat": 40.54388, + "lon": -69.00996, + "label": "" + }, + { + "lat": 40.61795, + "lon": -68.95291, + "label": "" + }, + { + "lat": 40.67989, + "lon": -68.90665, + "label": "" + }, + { + "lat": 40.76188, + "lon": -68.94848, + "label": "11 Sep 00:22" + }, + { + "lat": 40.84698, + "lon": -69.00808, + "label": "" + }, + { + "lat": 40.94028, + "lon": -69.06663, + "label": "" + }, + { + "lat": 41.01901, + "lon": -69.12098, + "label": "" + }, + { + "lat": 41.1224, + "lon": -69.18746, + "label": "" + }, + { + "lat": 41.21078, + "lon": -69.24906, + "label": "" + }, + { + "lat": 41.2979, + "lon": -69.31091, + "label": "" + }, + { + "lat": 41.34945, + "lon": -69.33753, + "label": "" + }, + { + "lat": 41.45346, + "lon": -69.4076, + "label": "" + }, + { + "lat": 41.5512, + "lon": -69.47926, + "label": "" + }, + { + "lat": 41.64575, + "lon": -69.53891, + "label": "" + }, + { + "lat": 41.71205, + "lon": -69.5847, + "label": "" + }, + { + "lat": 41.79348, + "lon": -69.6436, + "label": "" + }, + { + "lat": 41.89711, + "lon": -69.71145, + "label": "" + }, + { + "lat": 41.98596, + "lon": -69.77095, + "label": "" + }, + { + "lat": 42.07146, + "lon": -69.8319, + "label": "" + }, + { + "lat": 42.14985, + "lon": -69.8881, + "label": "" + }, + { + "lat": 42.23063, + "lon": -69.9397, + "label": "" + }, + { + "lat": 42.32593, + "lon": -70.04238, + "label": "" + }, + { + "lat": 42.3305, + "lon": -70.16965, + "label": "" + }, + { + "lat": 42.33366, + "lon": -70.27973, + "label": "" + }, + { + "lat": 42.34814, + "lon": -70.43343, + "label": "" + }, + { + "lat": 42.36006, + "lon": -70.56278, + "label": "" + }, + { + "lat": 42.38538, + "lon": -70.71366, + "label": "" + }, + { + "lat": 42.39223, + "lon": -70.8678, + "label": "" + }, + { + "lat": 42.33294, + "lon": -70.98088, + "label": "" + }, + { + "lat": 42.34308, + "lon": -71.0226, + "label": "" + }, + { + "lat": 42.34326, + "lon": -71.02663, + "label": "" + }, + { + "lat": 42.34333, + "lon": -71.02666, + "label": "" + }, + { + "lat": 42.34326, + "lon": -71.02663, + "label": "" + }, + { + "lat": 42.34333, + "lon": -71.02666, + "label": "" + }, + { + "lat": 42.34326, + "lon": -71.02663, + "label": "" + }, + { + "lat": 42.34328, + "lon": -71.02663, + "label": "" + }, + { + "lat": 42.34326, + "lon": -71.02663, + "label": "12 Sep 00:03" + }, + { + "lat": 42.34325, + "lon": -71.02663, + "label": "" + }, + { + "lat": 42.34326, + "lon": -71.02663, + "label": "" + }, + { + "lat": 42.34325, + "lon": -71.02663, + "label": "" + }, + { + "lat": 42.34333, + "lon": -71.02666, + "label": "" + }, + { + "lat": 42.34326, + "lon": -71.02663, + "label": "" + }, + { + "lat": 42.34325, + "lon": -71.02663, + "label": "" + }, + { + "lat": 42.34326, + "lon": -71.02663, + "label": "" + }, + { + "lat": 42.34325, + "lon": -71.02663, + "label": "" + }, + { + "lat": 42.34326, + "lon": -71.02663, + "label": "" + }, + { + "lat": 42.3416, + "lon": -71.00958, + "label": "" + }, + { + "lat": 42.3348, + "lon": -70.96446, + "label": "" + }, + { + "lat": 42.33701, + "lon": -70.95143, + "label": "" + }, + { + "lat": 42.35686, + "lon": -70.92896, + "label": "" + }, + { + "lat": 42.3825, + "lon": -70.90265, + "label": "" + }, + { + "lat": 42.38458, + "lon": -70.90158, + "label": "" + }, + { + "lat": 42.39281, + "lon": -70.87796, + "label": "" + }, + { + "lat": 42.39703, + "lon": -70.80228, + "label": "" + }, + { + "lat": 42.40116, + "lon": -70.7751, + "label": "" + }, + { + "lat": 42.40836, + "lon": -70.73358, + "label": "" + }, + { + "lat": 42.41551, + "lon": -70.6917, + "label": "" + }, + { + "lat": 42.42288, + "lon": -70.65, + "label": "" + }, + { + "lat": 42.4341, + "lon": -70.5947, + "label": "" + }, + { + "lat": 42.45486, + "lon": -70.49743, + "label": "" + }, + { + "lat": 42.46468, + "lon": -70.4559, + "label": "" + }, + { + "lat": 42.47408, + "lon": -70.4147, + "label": "" + }, + { + "lat": 42.49051, + "lon": -70.33673, + "label": "" + }, + { + "lat": 42.50105, + "lon": -70.29208, + "label": "" + }, + { + "lat": 42.51058, + "lon": -70.25126, + "label": "" + }, + { + "lat": 42.571, + "lon": -70.00301, + "label": "" + }, + { + "lat": 42.61188, + "lon": -69.8401, + "label": "" + }, + { + "lat": 42.66625, + "lon": -69.63661, + "label": "" + }, + { + "lat": 42.72216, + "lon": -69.42291, + "label": "" + }, + { + "lat": 42.76671, + "lon": -69.2272, + "label": "" + }, + { + "lat": 42.81901, + "lon": -69.0097, + "label": "" + }, + { + "lat": 42.881, + "lon": -68.74408, + "label": "" + }, + { + "lat": 42.90415, + "lon": -68.55953, + "label": "" + }, + { + "lat": 42.92381, + "lon": -68.40043, + "label": "" + }, + { + "lat": 42.95343, + "lon": -68.17645, + "label": "" + }, + { + "lat": 42.9853, + "lon": -67.92991, + "label": "" + }, + { + "lat": 43.01398, + "lon": -67.69888, + "label": "" + }, + { + "lat": 43.05104, + "lon": -67.40036, + "label": "" + }, + { + "lat": 43.07309, + "lon": -67.2341, + "label": "" + }, + { + "lat": 43.09783, + "lon": -67.05191, + "label": "" + }, + { + "lat": 43.12086, + "lon": -66.8634, + "label": "" + }, + { + "lat": 43.14686, + "lon": -66.65315, + "label": "" + }, + { + "lat": 43.1712, + "lon": -66.45206, + "label": "" + }, + { + "lat": 43.19805, + "lon": -66.25453, + "label": "" + }, + { + "lat": 43.222, + "lon": -66.06388, + "label": "" + }, + { + "lat": 43.24551, + "lon": -65.87538, + "label": "" + }, + { + "lat": 43.26986, + "lon": -65.68375, + "label": "" + }, + { + "lat": 43.29175, + "lon": -65.50416, + "label": "" + }, + { + "lat": 43.36461, + "lon": -65.26256, + "label": "" + }, + { + "lat": 43.42136, + "lon": -65.10941, + "label": "" + }, + { + "lat": 43.49598, + "lon": -64.91473, + "label": "" + }, + { + "lat": 43.56551, + "lon": -64.7269, + "label": "" + }, + { + "lat": 43.65843, + "lon": -64.49271, + "label": "" + }, + { + "lat": 43.71538, + "lon": -64.34456, + "label": "" + }, + { + "lat": 43.78843, + "lon": -64.1547, + "label": "" + }, + { + "lat": 43.85625, + "lon": -63.97251, + "label": "" + }, + { + "lat": 43.93445, + "lon": -63.7664, + "label": "" + }, + { + "lat": 43.99785, + "lon": -63.59781, + "label": "" + }, + { + "lat": 44.08361, + "lon": -63.37136, + "label": "" + }, + { + "lat": 44.15405, + "lon": -63.18446, + "label": "13 Sep 00:27" + }, + { + "lat": 44.2246, + "lon": -63.0029, + "label": "" + }, + { + "lat": 44.29938, + "lon": -62.80818, + "label": "" + }, + { + "lat": 44.38778, + "lon": -62.5617, + "label": "" + }, + { + "lat": 44.48708, + "lon": -62.3009, + "label": "" + }, + { + "lat": 44.50818, + "lon": -62.24355, + "label": "" + }, + { + "lat": 44.57676, + "lon": -62.0606, + "label": "" + }, + { + "lat": 44.6385, + "lon": -61.8939, + "label": "" + }, + { + "lat": 44.72338, + "lon": -61.66456, + "label": "" + }, + { + "lat": 44.80641, + "lon": -61.43891, + "label": "" + }, + { + "lat": 44.87048, + "lon": -61.2606, + "label": "" + }, + { + "lat": 44.94581, + "lon": -60.9761, + "label": "" + }, + { + "lat": 45.04633, + "lon": -60.79931, + "label": "" + }, + { + "lat": 45.10268, + "lon": -60.72696, + "label": "" + }, + { + "lat": 45.20491, + "lon": -60.60301, + "label": "" + }, + { + "lat": 45.32658, + "lon": -60.45165, + "label": "" + }, + { + "lat": 45.46383, + "lon": -60.26033, + "label": "" + }, + { + "lat": 45.57936, + "lon": -60.10493, + "label": "" + }, + { + "lat": 45.64711, + "lon": -60.0083, + "label": "" + }, + { + "lat": 45.75625, + "lon": -59.85991, + "label": "" + }, + { + "lat": 45.85115, + "lon": -59.72418, + "label": "" + }, + { + "lat": 45.96858, + "lon": -59.57251, + "label": "" + }, + { + "lat": 46.10998, + "lon": -59.47976, + "label": "" + }, + { + "lat": 46.21005, + "lon": -59.50335, + "label": "" + }, + { + "lat": 46.26968, + "lon": -59.66848, + "label": "" + }, + { + "lat": 46.30833, + "lon": -59.83833, + "label": "" + }, + { + "lat": 46.30946, + "lon": -59.96976, + "label": "" + }, + { + "lat": 46.30991, + "lon": -60.00933, + "label": "" + }, + { + "lat": 46.30888, + "lon": -60.13141, + "label": "" + }, + { + "lat": 46.24175, + "lon": -60.19368, + "label": "" + }, + { + "lat": 46.15486, + "lon": -60.2095, + "label": "" + }, + { + "lat": 46.15333, + "lon": -60.21166, + "label": "" + }, + { + "lat": 46.15268, + "lon": -60.21136, + "label": "" + }, + { + "lat": 46.1528, + "lon": -60.21121, + "label": "" + }, + { + "lat": 46.15263, + "lon": -60.21141, + "label": "" + }, + { + "lat": 46.15265, + "lon": -60.21171, + "label": "" + }, + { + "lat": 46.15626, + "lon": -60.2102, + "label": "" + }, + { + "lat": 46.1965, + "lon": -60.22245, + "label": "" + }, + { + "lat": 46.27975, + "lon": -60.16383, + "label": "" + }, + { + "lat": 46.38563, + "lon": -60.08255, + "label": "" + }, + { + "lat": 46.51035, + "lon": -60.00608, + "label": "" + }, + { + "lat": 46.63871, + "lon": -59.93485, + "label": "" + }, + { + "lat": 46.79325, + "lon": -59.8594, + "label": "" + }, + { + "lat": 46.89993, + "lon": -59.82683, + "label": "" + }, + { + "lat": 47.04698, + "lon": -59.79575, + "label": "" + }, + { + "lat": 47.2186, + "lon": -59.94775, + "label": "" + }, + { + "lat": 47.3685, + "lon": -60.0774, + "label": "" + }, + { + "lat": 47.40999, + "lon": -60.11166, + "label": "" + }, + { + "lat": 47.82994, + "lon": -60.49477, + "label": "14 Sep 01:34" + }, + { + "lat": 47.84221, + "lon": -60.50594, + "label": "" + }, + { + "lat": 47.88363, + "lon": -60.54343, + "label": "" + }, + { + "lat": 47.90831, + "lon": -60.56668, + "label": "" + }, + { + "lat": 48.02615, + "lon": -60.67438, + "label": "" + }, + { + "lat": 48.11083, + "lon": -60.88986, + "label": "" + }, + { + "lat": 48.17284, + "lon": -61.04668, + "label": "" + }, + { + "lat": 48.28976, + "lon": -61.32929, + "label": "" + }, + { + "lat": 48.32708, + "lon": -61.42506, + "label": "" + }, + { + "lat": 48.41238, + "lon": -61.6337, + "label": "" + }, + { + "lat": 48.50265, + "lon": -61.95985, + "label": "" + }, + { + "lat": 48.51058, + "lon": -61.97981, + "label": "" + }, + { + "lat": 48.59308, + "lon": -62.16508, + "label": "" + }, + { + "lat": 48.70233, + "lon": -62.40083, + "label": "" + }, + { + "lat": 48.78946, + "lon": -62.5845, + "label": "" + }, + { + "lat": 48.85915, + "lon": -62.74828, + "label": "" + }, + { + "lat": 48.92476, + "lon": -62.90456, + "label": "" + }, + { + "lat": 49.00074, + "lon": -63.10681, + "label": "" + }, + { + "lat": 49.07, + "lon": -63.29428, + "label": "" + }, + { + "lat": 49.15405, + "lon": -63.52295, + "label": "" + }, + { + "lat": 49.24441, + "lon": -63.77686, + "label": "" + }, + { + "lat": 49.27814, + "lon": -63.86946, + "label": "" + }, + { + "lat": 49.335, + "lon": -64.04333, + "label": "" + }, + { + "lat": 49.38043, + "lon": -64.33795, + "label": "" + }, + { + "lat": 49.38293, + "lon": -64.38238, + "label": "" + }, + { + "lat": 49.3926, + "lon": -64.57715, + "label": "" + }, + { + "lat": 49.40098, + "lon": -64.7392, + "label": "" + }, + { + "lat": 49.4187, + "lon": -65.01765, + "label": "" + }, + { + "lat": 49.42241, + "lon": -65.09081, + "label": "" + }, + { + "lat": 49.4334, + "lon": -65.28855, + "label": "" + }, + { + "lat": 49.44126, + "lon": -65.4171, + "label": "" + }, + { + "lat": 49.45, + "lon": -65.61166, + "label": "" + }, + { + "lat": 49.45664, + "lon": -65.71701, + "label": "" + }, + { + "lat": 49.44553, + "lon": -65.95301, + "label": "" + }, + { + "lat": 49.4345, + "lon": -66.0237, + "label": "" + }, + { + "lat": 49.41253, + "lon": -66.15693, + "label": "" + }, + { + "lat": 49.38358, + "lon": -66.33726, + "label": "" + }, + { + "lat": 49.36593, + "lon": -66.44946, + "label": "" + }, + { + "lat": 49.33793, + "lon": -66.62486, + "label": "" + }, + { + "lat": 49.30616, + "lon": -66.81373, + "label": "" + }, + { + "lat": 49.29326, + "lon": -66.88575, + "label": "" + }, + { + "lat": 49.25276, + "lon": -67.1349, + "label": "" + }, + { + "lat": 49.24628, + "lon": -67.17796, + "label": "" + }, + { + "lat": 49.22633, + "lon": -67.32915, + "label": "" + }, + { + "lat": 49.18876, + "lon": -67.4743, + "label": "" + }, + { + "lat": 49.13061, + "lon": -67.61538, + "label": "" + }, + { + "lat": 49.08168, + "lon": -67.72275, + "label": "" + }, + { + "lat": 48.99748, + "lon": -67.91778, + "label": "15 Sep 00:11" + }, + { + "lat": 48.96851, + "lon": -67.98506, + "label": "" + }, + { + "lat": 48.91541, + "lon": -68.11346, + "label": "" + }, + { + "lat": 48.82018, + "lon": -68.32328, + "label": "" + }, + { + "lat": 48.81128, + "lon": -68.34271, + "label": "" + }, + { + "lat": 48.73317, + "lon": -68.51288, + "label": "" + }, + { + "lat": 48.69325, + "lon": -68.61125, + "label": "" + }, + { + "lat": 48.65545, + "lon": -68.6996, + "label": "" + }, + { + "lat": 48.5963, + "lon": -68.83306, + "label": "" + }, + { + "lat": 48.54281, + "lon": -68.95581, + "label": "" + }, + { + "lat": 48.48371, + "lon": -69.07675, + "label": "" + }, + { + "lat": 48.4028, + "lon": -69.21846, + "label": "" + }, + { + "lat": 48.34833, + "lon": -69.31, + "label": "" + }, + { + "lat": 48.26618, + "lon": -69.4203, + "label": "" + }, + { + "lat": 48.15699, + "lon": -69.54486, + "label": "" + }, + { + "lat": 48.04006, + "lon": -69.63648, + "label": "" + }, + { + "lat": 48.02813, + "lon": -69.64885, + "label": "" + }, + { + "lat": 47.91945, + "lon": -69.75364, + "label": "" + }, + { + "lat": 47.74904, + "lon": -69.89775, + "label": "" + }, + { + "lat": 47.6442, + "lon": -70.01878, + "label": "" + }, + { + "lat": 47.53683, + "lon": -70.14195, + "label": "" + }, + { + "lat": 47.45194, + "lon": -70.31161, + "label": "" + }, + { + "lat": 47.40763, + "lon": -70.45031, + "label": "" + }, + { + "lat": 47.25948, + "lon": -70.55158, + "label": "" + }, + { + "lat": 47.13928, + "lon": -70.67801, + "label": "" + }, + { + "lat": 47.02951, + "lon": -70.76936, + "label": "" + }, + { + "lat": 46.90778, + "lon": -70.8852, + "label": "" + }, + { + "lat": 46.85395, + "lon": -71.007, + "label": "" + }, + { + "lat": 46.84101, + "lon": -71.12636, + "label": "" + } + ], + "track_count": 336, + "cruise": { + "name": "Round-trip Neuengland Mit Kanada I", + "url": "https://www.cruisemapper.com/ships/Mein-Schiff-1-743#ship-itinerary-1407318-2022", + "start_date": "08 Sep, 2022", + "end_date": "22 Sep, 2022", + "days": "14 days", + "itinerary": { + "1": { + "port": "   New York", + "date": "
 08 Sep
" + }, + "2": { + "port": "   Quebec City", + "date": "
 13 Sep 08:00 - 19:00
" + }, + "3": { + "port": "   Saguenay", + "date": "
 14 Sep 08:00 - 18:00
" + }, + "4": { + "port": "   Halifax", + "date": "
 17 Sep 08:30 - 18:30
" + }, + "5": { + "port": "   Boston", + "date": "
 19 Sep 07:30 - 23:00
" + }, + "6": { + "port": "   New York", + "date": "
 22 Sep
" + } + }, + "path": { + "distance": 2886, + "extent": [ + 40.45093, + -74.06207, + 49.422852, + -60.701403 + ], + "points": [ + [ + -74.04922, + 40.67126 + ], + [ + -74.06207, + 40.657786 + ], + [ + -74.009486, + 40.53453 + ], + [ + -73.768613, + 40.45093 + ], + [ + -72.798065, + 40.704831 + ], + [ + -67.77493, + 41.684158 + ], + [ + -60.701403, + 45.249951 + ], + [ + -60.717585, + 45.391549 + ], + [ + -61.089864, + 45.441875 + ], + [ + -61.247106, + 45.528425 + ], + [ + -61.337797, + 45.562235 + ], + [ + -61.37228, + 45.594094 + ], + [ + -61.388487, + 45.629311 + ], + [ + -61.421246, + 45.651251 + ], + [ + -61.476074, + 45.705941 + ], + [ + -61.717292, + 46.043083 + ], + [ + -62.082975, + 47.187938 + ], + [ + -64.358853, + 49.167383 + ], + [ + -65.622311, + 49.422852 + ], + [ + -67.716119, + 48.910589 + ], + [ + -69.375307, + 48.252871 + ], + [ + -69.858307, + 47.7984 + ], + [ + -70.238541, + 47.470331 + ], + [ + -70.422235, + 47.420812 + ], + [ + -70.550692, + 47.262389 + ], + [ + -70.705484, + 47.118789 + ], + [ + -70.865413, + 46.928326 + ], + [ + -70.921935, + 46.890152 + ], + [ + -71.048465, + 46.84624 + ], + [ + -71.173069, + 46.833499 + ], + [ + -71.19587, + 46.816799 + ], + [ + -71.20071, + 46.81547 + ], + [ + -71.20071, + 46.81547 + ], + [ + -71.19587, + 46.816799 + ], + [ + -71.173069, + 46.833499 + ], + [ + -71.048465, + 46.84624 + ], + [ + -70.921935, + 46.890152 + ], + [ + -70.865413, + 46.928326 + ], + [ + -70.705484, + 47.118789 + ], + [ + -70.550692, + 47.262389 + ], + [ + -70.422235, + 47.420812 + ], + [ + -70.238541, + 47.470331 + ], + [ + -69.858307, + 47.7984 + ], + [ + -69.723771, + 47.957277 + ], + [ + -71.06386, + 48.43022 + ], + [ + -71.06386, + 48.43022 + ], + [ + -69.723771, + 47.957277 + ], + [ + -69.375307, + 48.252871 + ], + [ + -67.716119, + 48.910589 + ], + [ + -65.622311, + 49.422852 + ], + [ + -64.358853, + 49.167383 + ], + [ + -62.082975, + 47.187938 + ], + [ + -61.717292, + 46.043083 + ], + [ + -61.476074, + 45.705941 + ], + [ + -61.421246, + 45.651251 + ], + [ + -61.388487, + 45.629311 + ], + [ + -61.37228, + 45.594094 + ], + [ + -61.337797, + 45.562235 + ], + [ + -61.247106, + 45.528425 + ], + [ + -61.089864, + 45.441875 + ], + [ + -60.717585, + 45.391549 + ], + [ + -60.701403, + 45.249951 + ], + [ + -63.116162, + 44.495628 + ], + [ + -63.5206, + 44.5851 + ], + [ + -63.57004, + 44.65103 + ], + [ + -63.57004, + 44.65103 + ], + [ + -63.5206, + 44.5851 + ], + [ + -63.461384, + 44.355663 + ], + [ + -64.960945, + 43.528396 + ], + [ + -65.532719, + 43.238295 + ], + [ + -70.962781, + 42.323786 + ], + [ + -71.04403, + 42.36054 + ], + [ + -71.04403, + 42.36054 + ], + [ + -70.962781, + 42.323786 + ], + [ + -70.789271, + 42.329768 + ], + [ + -70.055673, + 42.278239 + ], + [ + -69.487495, + 41.435904 + ], + [ + -72.798065, + 40.704831 + ], + [ + -73.768613, + 40.45093 + ], + [ + -74.009486, + 40.53453 + ], + [ + -74.06207, + 40.657786 + ], + [ + -74.04922, + 40.67126 + ] + ], + "ports": [ + { + "dep_datetime": "2022-09-13 19:00:00", + "poi": "662", + "lat": "46.81547", + "lon": "-71.20071", + "day": "6", + "icon": "" + }, + { + "dep_datetime": "2022-09-14 18:00:00", + "poi": "693", + "lat": "48.43022", + "lon": "-71.06386", + "day": "7", + "icon": "" + }, + { + "dep_datetime": "2022-09-17 18:30:00", + "poi": "97", + "lat": "44.65103", + "lon": "-63.57004", + "day": "10", + "icon": "" + }, + { + "dep_datetime": "2022-09-19 23:00:00", + "poi": "101", + "lat": "42.36054", + "lon": "-71.04403", + "day": "12", + "icon": "" + }, + { + "dep_datetime": null, + "poi": "98", + "lat": "40.67126", + "lon": "-74.04922", + "day": "15", + "icon": "round" + } + ] + } + } +} \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..46567ae --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,23 @@ +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[project] +name = "pycruisemapper" +version = "0.0.1" +authors = [ + { name="Kumi Mitterer", email="pycruisemapper@kumi.email" }, +] +description = "Simple Python script to fetch data from CruiseMapper" +readme = "README.md" +license = { file="LICENSE" } +requires-python = ">=3.8" +classifiers = [ + "Programming Language :: Python :: 3", + "License :: OSI Approved :: MIT License", + "Operating System :: OS Independent", +] + +[project.urls] +"Homepage" = "https://kumig.it/kumitterer/pycruisemapper" +"Bug Tracker" = "https://kumig.it/kumitterer/" \ No newline at end of file diff --git a/src/pycruisemapper/__init__.py b/src/pycruisemapper/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/pycruisemapper/classes/__init__.py b/src/pycruisemapper/classes/__init__.py new file mode 100644 index 0000000..95c4b91 --- /dev/null +++ b/src/pycruisemapper/classes/__init__.py @@ -0,0 +1 @@ +from .api import CruiseMapper \ No newline at end of file diff --git a/src/pycruisemapper/classes/api.py b/src/pycruisemapper/classes/api.py new file mode 100644 index 0000000..b62e4e6 --- /dev/null +++ b/src/pycruisemapper/classes/api.py @@ -0,0 +1,48 @@ +from .http import HTTPRequest +from .vessel import Vessel, Cruise, ShipLine, Flag +from ..const import SHIPS_URL, SHIP_URL + +from urllib.parse import urlencode +from datetime import datetime +from typing import List, Dict + +import json + + +class CruiseMapper: + def request_vessels(self, **kwargs) -> List[Dict]: + payload = { + "minLat": kwargs.get("min_lat", -90), + "maxLat": kwargs.get("max_lat", 90), + "minLon": kwargs.get("min_lon", -180), + "maxLon": kwargs.get("max_lon", 180), + "filter": ",".join(kwargs.get("filter", [str(i) for i in range(100)])), + "zoom": "", + "imo": kwargs.get("imo", ""), + "mmsi": kwargs.get("mmsi", ""), + "t": int(kwargs.get("timestamp", datetime.now().timestamp())) + } + + request = HTTPRequest(f"{SHIPS_URL}?{urlencode(payload)}") + + return json.loads(request.open().read()) + + def request_vessel(self, **kwargs) -> Dict: + payload = { + "imo": kwargs.get("imo", ""), + "mmsi": kwargs.get("mmsi", ""), + "zoom": "" + } + + request = HTTPRequest(f"{SHIP_URL}?{urlencode(payload)}") + + return json.loads(request.open().read()) + + def get_vessels(self, **kwargs) -> List[Vessel]: + pass + + def get_vessel(self, **kwargs) -> Vessel: + pass + + def fill_vessel(self, vessel: Vessel): + pass \ No newline at end of file diff --git a/src/pycruisemapper/classes/http.py b/src/pycruisemapper/classes/http.py new file mode 100644 index 0000000..acc9c68 --- /dev/null +++ b/src/pycruisemapper/classes/http.py @@ -0,0 +1,12 @@ +from urllib.request import Request, urlopen + +from ..const import REQUIRED_HEADERS + + +class HTTPRequest(Request): + def __init__(self, url, *args, **kwargs): + super().__init__(url, *args, **kwargs) + self.headers.update(REQUIRED_HEADERS) + + def open(self): + return urlopen(self) \ No newline at end of file diff --git a/src/pycruisemapper/classes/vessel.py b/src/pycruisemapper/classes/vessel.py new file mode 100644 index 0000000..0e82ba2 --- /dev/null +++ b/src/pycruisemapper/classes/vessel.py @@ -0,0 +1,60 @@ +from datetime import datetime, timedelta +from typing import Optional, List, Tuple + + +class Cruise: + name: Optional[str] + url: Optional[str] + start_date: Optional[datetime] + end_date: Optional[datetime] + itinerary: Optional[List[Optional[Tuple[str, str]]]] + + @property + def days(self) -> Optional[int]: + if self.end_date and self.start_date: + return (self.end_date - self.start_date).days + +class Flag: + code: str + name: str + +class ShipLine: + title: str + id: int + url: Optional[str] + +class Vessel: + id: Optional[int] + name: Optional[str] + url: Optional[str] + url_deckplans: Optional[str] + url_staterooms: Optional[str] + image: Optional[str] + flag: Flag + line: Optional[ShipLine] + spec_length: Optional[int] # stored in meters + spec_passengers: Optional[int] + year_built: Optional[int] + last_report: Optional[str] + imo: int + mmsi: int + latitude: float + longitude: float + cog: int # Course over Ground + sog: int # Speed over Ground + heading: int + timestamp: datetime + icon: int + hover: str + cruise: Optional[Cruise] + path: Optional[List[Optional[Tuple[float, float]]]] + ports: Optional[List[Optional[Tuple[datetime, float, float]]]] + destination: str + eta: Optional[datetime] + current_temperature: Optional[float] # Celsius + minimum_temperature: Optional[float] # Celsius + maximum_temperature: Optional[float] # Celsius + wind_degrees: Optional[float] + wind_speed: Optional[float] # m/s + wind_gust: Optional[float] # m/s + utc_offset: Optional[timedelta] \ No newline at end of file diff --git a/src/pycruisemapper/const.py b/src/pycruisemapper/const.py new file mode 100644 index 0000000..73f24d8 --- /dev/null +++ b/src/pycruisemapper/const.py @@ -0,0 +1,5 @@ +SHIPS_URL = "https://www.cruisemapper.com/map/ships.json" +SHIP_URL = "https://www.cruisemapper.com/map/ships.json" + +REQUIRED_HEADERS = {"X-Requested-With": "XMLHttpRequest", + "User-Agent": "Mozilla/5.0 (compatible: pyCruiseMapper; https://kumig.it/kumitterer/pycruisemapper)"}