summaryrefslogtreecommitdiffstats
path: root/etc
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2018-04-29 00:36:38 +0200
committerMatthias Beyer <mail@beyermatthias.de>2018-05-01 22:29:46 +0200
commit9f99783c6ebd3088189e0e0c2848e040bc4cc33c (patch)
tree598e0afaf44546761966316f792dbe4eb1c29228 /etc
parent9efa4c715f63880d26808e7006e065112a3b8141 (diff)
Add importer for ioverlander into imag-wiki
Diffstat (limited to 'etc')
-rw-r--r--etc/ioverlander-wiki-import.sh152
1 files changed, 152 insertions, 0 deletions
diff --git a/etc/ioverlander-wiki-import.sh b/etc/ioverlander-wiki-import.sh
new file mode 100644
index 00000000..7f550854
--- /dev/null
+++ b/etc/ioverlander-wiki-import.sh
@@ -0,0 +1,152 @@
+#!/usr/bin/env bash
+#
+# This script imports iOverlander data into a imag-wiki
+#
+# Requirements
+# ============
+#
+# * imag-wiki
+# * imag-gps
+# * imag-store
+# * jq
+#
+# Usage
+# =====
+#
+# Download the JSON data files from app.ioverlander.com and run them through
+# this script.
+#
+# ./this/script wiki-name ioverlander-file.json
+#
+# What it does
+# ============
+#
+# It imports each location from the JSON data into one entry at:
+#
+# <wiki_name>/<country>/<location name>_<location id>
+#
+# (The location id is added because names are sometimes reused)
+#
+# * It uses imag-gps to set the GPS data
+# * It sets the header of the entry to the data it finds from the JSON object.
+# It puts all data in the "userdata.ioverlander" namespace.
+# It strips whitespace from the keys.
+# It ignores the GPS data from the JSON object though, as this was added via
+# imag-gps.
+# * It uses the "description" field as entry content.
+#
+# Warning
+# =======
+#
+# As the ioverlander data sometimes contains "/" in the name, some entries are
+# namespaced. This has to be fixed and the linkings have to be adapted. This is
+# not yet handled by this script.
+#
+#
+
+WIKI_NAME="$1"
+IOVERLANDER_FILE_PATH="$2"
+
+[[ -z "$WIKI_NAME" ]] && echo "Wiki name missing" && exit 1
+[[ -z "$IOVERLANDER_FILE_PATH" ]] && echo "JSON file missing" && exit 1
+
+imag wiki create-wiki "$WIKI_NAME" --no-edit
+echo "Created imag wiki '$WIKI_NAME'"
+
+tobool() {
+ if [[ "$1" == "Yes" ]]; then
+ echo "true"
+ elif [[ "$1" == "No" ]]; then
+ echo "false"
+ else
+ echo "\"$1\""
+ fi
+}
+
+object_to_vars() {
+ jq -r -c 'to_entries | .[] | .key + "=\"" + (.value | tostring | gsub("\\\""; "")) + "\""'
+}
+
+
+# The comments in this function can be outcommented for debugging
+process_object() {
+ read -r json
+
+ local location_latitude
+ local location_longitude
+ local location_altitude
+ local location_horizontal_accuracy
+ local location_vertical_accuracy
+ local amenities_Open
+ local amenities_Electricity
+ local amenities_Wifi
+ local amenities_Kitchen
+ local amenities_Restaurant
+ local amenities_Showers
+ local amenities_Water
+ local amenities_Toilets
+ local amenities_Big_rig_friendly
+ local amenities_Tent_friendly
+ local amenities_Pet_friendly
+ local id
+ local name
+ local description
+ local date_verified
+ local category_icon_path
+ local category_icon_pin_path
+ local country
+ local category
+
+ #echo "----------------------------------------------------------"
+ #echo "JSON = $json"
+ #echo "-----------"
+ #echo $json | jq '.location' | object_to_vars | sed 's,^,location_,'
+ #echo $json | jq '.amenities' | object_to_vars | sed 's,^,amenities_,; s, Big,_big,; s, Rig,_rig,; s, Friendly,_friendly,'
+ #echo $json | jq 'del(.location)|del(.amenities)' | object_to_vars
+
+ eval $(echo $json | jq '.location' | object_to_vars | sed 's,^,location_,')
+ eval $(echo $json | jq '.amenities' | object_to_vars | sed 's,^,amenities_,; s, Big,_big,; s, Rig,_rig,; s, Friendly,_friendly,')
+ eval $(echo $json | jq 'del(.location)|del(.amenities)' | object_to_vars)
+
+ local ctry_slug=$(echo $country | sed 's, ,_,g')
+ local name_slug=$(echo $name | sed 's, ,_,g')
+
+ echo "create = $ctry_slug/${name_slug}_${id}"
+
+ local article=$(imag wiki --wiki "$WIKI_NAME" create "$ctry_slug/${name_slug}_${id}" --no-edit --print-id || exit 1)
+
+ echo "ARTICLE = $article"
+
+ imag gps add --lat="$location_latitude" --long="$location_longitude" "$article" || {
+ echo "GPS setting failed"
+ exit 1
+ }
+ imag store update --id "$article" \
+ --header \
+ "userdata.ioverlander.id=\"$id\"" \
+ "userdata.ioverlander.name=\"$name\"" \
+ "userdata.ioverlander.date_verified=\"$date_verified\"" \
+ "userdata.ioverlander.country=\"$country\"" \
+ "userdata.ioverlander.category=\"$category\"" \
+ "userdata.ioverlander.amenities.open=$(tobool "$amenities_Open")" \
+ "userdata.ioverlander.amenities.electricity=$(tobool "$amenities_Electricity")" \
+ "userdata.ioverlander.amenities.wifi=$(tobool "$amenities_Wifi")" \
+ "userdata.ioverlander.amenities.kitchen=$(tobool "$amenities_Kitchen")" \
+ "userdata.ioverlander.amenities.restaurant=$(tobool "$amenities_Restaurant")" \
+ "userdata.ioverlander.amenities.showers=$(tobool "$amenities_Showers")" \
+ "userdata.ioverlander.amenities.water=$(tobool "$amenities_Water")" \
+ "userdata.ioverlander.amenities.toilets=$(tobool "$amenities_Toilets")" \
+ "userdata.ioverlander.amenities.big_rig_friendly=$(tobool "$amenities_Big_rig_friendly")" \
+ "userdata.ioverlander.amenities.tent_friendly=$(tobool "$amenities_Tent_friendly")" \
+ "userdata.ioverlander.amenities.pet_friendly=$(tobool "$amenities_Pet_friendly")" \
+ --content \""$description\"" || {
+ echo "header/content setting failed";
+ exit 1
+ }
+
+}
+
+cat "$IOVERLANDER_FILE_PATH" | jq -c '.[]' | while read line; do
+ process_object
+done
+