mirror of
https://github.com/kmein/niveum
synced 2026-03-16 10:11:08 +01:00
82 lines
2.0 KiB
Bash
82 lines
2.0 KiB
Bash
#!/bin/sh
|
|
set -efu
|
|
|
|
if echo "$1" | grep -Eq '[[:digit:]]{5}'; then
|
|
PLZ="$1"
|
|
else
|
|
echo >&2 "Usage: $0 PLZ"
|
|
exit 1
|
|
fi
|
|
|
|
lieferando_dir=/tmp/lieferando
|
|
mkdir -p "$lieferando_dir/$PLZ"
|
|
|
|
fetch_restaurants() {
|
|
cache_path="$lieferando_dir/$PLZ.json"
|
|
|
|
if [ -r "$cache_path" ]; then
|
|
cat "$cache_path"
|
|
else
|
|
w3m -dump_source "http://www.lieferando.de/$PLZ" \
|
|
| gunzip \
|
|
| sed -n '/var restaurants/,/];$/p' \
|
|
| sed 's/var restaurants =//;$s/;$//' \
|
|
| prettier --parser=json \
|
|
| jq '
|
|
map({
|
|
name: .[30] | .name,
|
|
category: .[30] |.categories | split(", "),
|
|
url: "http://lieferando.de\(.[30] | .url)",
|
|
minutes: .[19],
|
|
minimum: .[10],
|
|
delivery: .[14]
|
|
})' \
|
|
| tee "$cache_path"
|
|
fi
|
|
}
|
|
|
|
fetch_menu() {
|
|
[ $# -eq 1 ] || exit 1
|
|
|
|
slug="$(echo "$1" | sed 's!.*/!!')"
|
|
cache_path="$lieferando_dir/$PLZ/$slug.json"
|
|
|
|
if [ -r "$cache_path" ]; then
|
|
cat "$cache_path"
|
|
else
|
|
w3m -dump_source "$1" \
|
|
| gunzip \
|
|
| sed -n '/var MenucardProducts/,/\];/p' \
|
|
| sed 's/var MenucardProducts =//;s/;$//' \
|
|
| jq -r '
|
|
unique_by(.productId)
|
|
| group_by(.categoryId)
|
|
| flatten
|
|
' \
|
|
| tee "$cache_path"
|
|
fi
|
|
}
|
|
|
|
data="$(fetch_restaurants)"
|
|
|
|
# echo "$data" | jq -c '.[]' | while read -r restaurant; do
|
|
# fetch_menu "$(echo "$restaurant" | jq -r .url)"
|
|
# done
|
|
|
|
selected_categories="$(echo "$data" | jq -r 'map(.category) | flatten | unique | .[]' | fzf -m)"
|
|
|
|
selected_restaurant_url="$(echo "$selected_categories" | jq --argjson restaurants "$data" -sRr '
|
|
split("\n")[:-1] as $categories
|
|
| $restaurants[]
|
|
| select(.category - $categories != .category)
|
|
| "\(.name) [🚴\(.minutes)min 💰\(.minimum)€ + \(.delivery)€] (\(.url))"
|
|
' \
|
|
| fzf \
|
|
| sed 's/.*(//;s/)$//'
|
|
)"
|
|
|
|
fetch_menu "$selected_restaurant_url" \
|
|
| jq -r '.[] | "\(.price)\t\(.name)"' \
|
|
| fzf -m \
|
|
| awk '{print $0; sum += $1} END {print "-----"; print sum}'
|