Add googlemaps for geoloc

This commit is contained in:
2024-01-01 11:35:50 +01:00
parent ba43805d6f
commit 8cea379347

View File

@@ -25,7 +25,8 @@ flickr=true # "Bécasseau variable" "Le Teich" Bird
ccpx=true # Bécasseau variable, Le Teich, Bird ccpx=true # Bécasseau variable, Le Teich, Bird
gps=0 gps=0
opt_gps=true opt_gps=true # insert gps data (false: gps data will be deleted in file)
opt_copyright=true # insert copyright, artist, creator (false: data will be deleted in file)
# Default: all tags # Default: all tags
opt_others=false opt_others=false
@@ -36,6 +37,17 @@ opt_nature=false
opt_wildlife=false opt_wildlife=false
opt_all=true # default opt_all=true # default
# Google maps static
zoom=10
color=blue
label="S"
type=hybrid
map_size="450x450"
prefix=${map_size%%x*} # find x position in map_size string
x=${#prefix}
gm_width=${map_size:0:$x}
echo $gm_width
long_path=`pwd`"/"`basename "$0"` # /Users/bruno/Documents/Scripts/kymsu2/keywords2insta.sh long_path=`pwd`"/"`basename "$0"` # /Users/bruno/Documents/Scripts/kymsu2/keywords2insta.sh
# long: /Users/bruno/Documents/GitHub/GooFuzz/keywords2insta.sh # long: /Users/bruno/Documents/GitHub/GooFuzz/keywords2insta.sh
#long_path=$(realpath "$0") # vide #long_path=$(realpath "$0") # vide
@@ -44,7 +56,7 @@ dir=$(dirname "$0") # /Users/bruno/Documents/Scripts/keywords2insta
dotenv () { dotenv () {
set -a set -a
[ -f .env ] && . .env [ -f .env ] && . .env || echo -e "${red}\nNo .env file found ! Googlemaps reverse geocode not working.${reset}"
set +a set +a
} }
@@ -88,17 +100,20 @@ showHelp() {
echo echo
echo -e "${yellow}USAGE:${reset}" echo -e "${yellow}USAGE:${reset}"
echo -e "${green}keyword2insta [-Options...] -f <file>${reset}" echo -e "${green}keyword2insta [-Options...] -f <file>${reset}"
echo -e "If no option is chosen, all tags are added (default)." echo -e "If no option (except gps and copyright) is chosen, all tags are added (default)."
echo -e "Keywords taken from exifs are automatically added." echo -e "Keywords taken from exifs are automatically added."
echo -e "You can add keywords permanently by adding them to the ${underline}others array${reset} at the start of the script. (See others=())" echo -e "You can add keywords permanently by adding them to the ${underline}others array${reset} at the start of the script. (See others=())"
echo -e "The images files are not modified." echo -e "The images files are not modified."
echo echo
echo -e "If the gps and coypright options are selected, the images files will be modified."
echo
echo -e "${yellow}OPTIONS:${reset}" echo -e "${yellow}OPTIONS:${reset}"
echo -e " ${green}-f${reset}, ${green}--file <file>${reset} Image file" echo -e " ${green}-f${reset}, ${green}--file <file>${reset} Image file"
echo -e " ${green}-l${reset}, ${green}--lens${reset} Add lens exif" echo -e " ${green}-l${reset}, ${green}--lens${reset} Add lens exif"
echo -e " ${green}-m${reset}, ${green}--model${reset} Add APN model exif" echo -e " ${green}-m${reset}, ${green}--model${reset} Add APN model exif"
echo -e " ${green}-n${reset}, ${green}--nature${reset} Add nature related keywords" echo -e " ${green}-n${reset}, ${green}--nature${reset} Add nature related keywords"
echo -e " ${green}-r${reset}, ${green}--region${reset} Add region related keywords" echo -e " ${green}-r${reset}, ${green}--region${reset} Add region related keywords"
echo -e " ${green}-c${reset}, ${green}--copyright${reset} Delete artist and copyright in file"
echo -e " ${green}-t${reset} <keywords> Add some additionnals keywords" echo -e " ${green}-t${reset} <keywords> Add some additionnals keywords"
echo -e " ${green}-w${reset}, ${green}--wildlife${reset} Add wildlife related keywords" echo -e " ${green}-w${reset}, ${green}--wildlife${reset} Add wildlife related keywords"
echo -e " ${green}-h${reset}, ${green}--help${reset} Display this help" echo -e " ${green}-h${reset}, ${green}--help${reset} Display this help"
@@ -128,13 +143,15 @@ showHelp() {
echo -e "${yellow}Changelog:${reset}" echo -e "${yellow}Changelog:${reset}"
echo -e " v3.0: support 500px" echo -e " v3.0: support 500px"
echo -e " v3.1: display thumb" echo -e " v3.1: display thumb"
echo -e " v3.2: suppress copyright and artist infos"
echo -e " v3.3: add a static Google maps for geoloc"
} }
# https://stackoverflow.com/questions/402377/using-getopts-to-process-long-and-short-command-line-options # https://stackoverflow.com/questions/402377/using-getopts-to-process-long-and-short-command-line-options
# le 1er : de $optspec supprime le message d'erreur # le 1er : de $optspec supprime le message d'erreur
unset -v tags unset -v tags
#OPTIND=1 #OPTIND=1
optspec=":wnrf:t:mlh-:" optspec=":wnrcf:t:mlh-:"
while getopts "$optspec" opt while getopts "$optspec" opt
do do
case $opt in case $opt in
@@ -153,6 +170,7 @@ do
;; ;;
model) opt_model=true;; model) opt_model=true;;
lens) opt_lens=true;; lens) opt_lens=true;;
copyright) opt_copyright=false;;
*) *)
if [ "$OPTERR" = 1 ] && [ "${optspec:0:1}" = ":" ]; then if [ "$OPTERR" = 1 ] && [ "${optspec:0:1}" = ":" ]; then
echo "Unknown option --${OPTARG}" >&2 echo "Unknown option --${OPTARG}" >&2
@@ -163,6 +181,7 @@ do
w) opt_wildlife=true;; w) opt_wildlife=true;;
n) opt_nature=true;; n) opt_nature=true;;
r) opt_region=true;; r) opt_region=true;;
c) opt_copyright=false;;
f) file="${OPTARG}";; f) file="${OPTARG}";;
t) tags=("$OPTARG") t) tags=("$OPTARG")
until [[ $(eval "echo \${$OPTIND}") =~ ^-.* ]] || [ -z $(eval "echo \${$OPTIND}") ]; do until [[ $(eval "echo \${$OPTIND}") =~ ^-.* ]] || [ -z $(eval "echo \${$OPTIND}") ]; do
@@ -198,7 +217,7 @@ fi
t=$(echo "${tags[@]}" | sed -r 's/[^ ]+/,&/g') t=$(echo "${tags[@]}" | sed -r 's/[^ ]+/,&/g')
# : <<'END_COMMENT'
echo "----" echo "----"
echo "others: " ${others[@]} echo "others: " ${others[@]}
echo "tags: " ${tags[@]} # t echo "tags: " ${tags[@]} # t
@@ -208,8 +227,10 @@ echo "opt_region: " $opt_region # r
echo "opt_nature: " $opt_nature # n echo "opt_nature: " $opt_nature # n
echo "opt_wildlife: " $opt_wildlife # w echo "opt_wildlife: " $opt_wildlife # w
echo "opt_others: " $opt_others echo "opt_others: " $opt_others
echo "opt_copyright: " $opt_copyright # c
echo "----" echo "----"
# END_COMMENT
if ! command -v exiftool &> /dev/null; then if ! command -v exiftool &> /dev/null; then
echo -e "${bold}exiftool${reset} could not be found !\n" echo -e "${bold}exiftool${reset} could not be found !\n"
@@ -221,7 +242,7 @@ fi
[ ! -f "$file" ] && echo -e "${bold}${red}No input file !${reset}" && exit 2 [ ! -f "$file" ] && echo -e "${bold}${red}No input file !${reset}" && exit 2
echo -e "\n${greenbold}keywords2insta${reset} v2.1" echo -e "\n${greenbold}keywords2insta${reset} v3.3"
# dico français / anglais # dico français / anglais
@@ -281,8 +302,32 @@ altitude=$(echo "$exif" | jq -j '.[] | .GPSAltitude | select( . != null )')
width=$(echo "$exif" | jq -j '.[] | .ImageWidth | select( . != null )') width=$(echo "$exif" | jq -j '.[] | .ImageWidth | select( . != null )')
height=$(echo "$exif" | jq -j '.[] | .ImageHeight | select( . != null )') height=$(echo "$exif" | jq -j '.[] | .ImageHeight | select( . != null )')
size=$(echo "$exif" | jq -j '.[] | .FileSize | select( . != null )') size=$(echo "$exif" | jq -j '.[] | .FileSize | select( . != null )')
city=$(echo "$exif" | jq -j '.[] | .City | select( . != null )')
state=$(echo "$exif" | jq -j '.[] | .State | select( . != null )')
country=$(echo "$exif" | jq -j '.[] | .Country | select( . != null )')
comment=$(echo "$exif" | jq -j '.[] | .Comment | select( . != null )')
software=$(echo "$exif" | jq -j '.[] | .Software | select( . != null )')
# EXIF:Artist | IPTC:By-line | XMP:Creator : Pesenti
# EXIF:Copyright | IPTC:CopyrightNotice | XMP:Rights: clicclac.info
art=$(echo "$exif" | jq -j '.[] | .Artist | select( . != null )')
#byline=$(echo "$exif" | jq -j '.[] | .By-line | select( . != null )')
creator=$(echo "$exif" | jq -j '.[] | .Creator | select( . != null )')
if [ -n "$art" ]; then artist="$art"
elif [ -n "$creator" ]; then artist="$creator"
fi
copy=$(echo "$exif" | jq -j '.[] | .Copyright | select( . != null )')
notice=$(echo "$exif" | jq -j '.[] | .CopyrightNotice | select( . != null )')
rights=$(echo "$exif" | jq -j '.[] | .Rights | select( . != null )')
if [ -n "$copy" ]; then copyright="$copy "
elif [ -n "$notice" ]; then copyright="$notice"
else copyright="$rights"
fi
echo "$lensID"
# Display thumb image # Display thumb image
@@ -400,40 +445,64 @@ if [[ -n $iso ]] && [[ -n $speed ]] && [[ -n $aperture ]]; then
printf " %-11s %-35s \n" "Size:" "${size}" printf " %-11s %-35s \n" "Size:" "${size}"
if [[ -n $latitude ]] && [[ -n $longitude ]]; then if [[ -n $latitude ]] && [[ -n $longitude ]]; then
gps=1
printf " %-11s %-35s \n" "Latitude:" "${latitude}" printf " %-11s %-35s \n" "Latitude:" "${latitude}"
printf " %-11s %-35s \n" "Longitude:" "${longitude}" printf " %-11s %-35s \n" "Longitude:" "${longitude}"
printf " %-11s %-35s \n" "Altitude:" "${altitude}" printf " %-11s %-35s \n" "Altitude:" "${altitude}"
gps=1 city=""
if [[ -n $city ]] && [[ -n $state ]] && [[ -n $country ]]; then
printf " %-11s %-35s \n" "City:" "${city}"
printf " %-11s %-35s \n" "State:" "${state}"
printf " %-11s %-35s \n" "Country:" "${country}"
else
coords=$(exiftool -n -gpslatitude -gpslongitude "$file")
lat=$(echo "$coords" | sed -n '1p' | awk -F":" '{print $2}' | xargs)
long=$(echo "$coords" | sed -n '$p' | awk -F":" '{print $2}' | xargs)
coords=$(exiftool -n -gpslatitude -gpslongitude "$file") if [[ -n $GM_API_KEY ]]; then
lat=$(echo "$coords" | sed -n '1p' | awk -F":" '{print $2}' | xargs) gm=$(curl -s "https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${long}&sensor=false&key=$GM_API_KEY" | jq -r '.results[0].address_components')
long=$(echo "$coords" | sed -n '$p' | awk -F":" '{print $2}' | xargs) city=$(echo "$gm" | jq '. | map( select( .types | contains(["locality"]) ) ) | .[].long_name')
code=$(echo "$gm" | jq '. | map( select( .types | contains(["postal_code"]) ) ) | .[].long_name')
if [[ -n $GM_API_KEY ]]; then state=$(echo "$gm" | jq '. | map( select( .types | contains(["administrative_area_level_2"]) ) ) | .[].long_name')
gm=$(curl -s "https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${long}&sensor=false&key=$GM_API_KEY" | jq -r '.results[0].address_components') region=$(echo "$gm" | jq '. | map( select( .types | contains(["administrative_area_level_1"]) ) ) | .[].long_name')
city=$(echo "$gm" | jq '. | map( select( .types | contains(["locality"]) ) ) | .[].long_name') country=$(echo "$gm" | jq '. | map( select( .types | contains(["country"]) ) ) | .[].long_name')
code=$(echo "$gm" | jq '. | map( select( .types | contains(["postal_code"]) ) ) | .[].long_name')
state=$(echo "$gm" | jq '. | map( select( .types | contains(["administrative_area_level_2"]) ) ) | .[].long_name') printf " %-11s %-35s \n" "CP / City:" "${code//\"/} ${city//\"/}"
region=$(echo "$gm" | jq '. | map( select( .types | contains(["administrative_area_level_1"]) ) ) | .[].long_name') printf " %-11s %-35s \n" "State:" "${state//\"/}"
country=$(echo "$gm" | jq '. | map( select( .types | contains(["country"]) ) ) | .[].long_name') printf " %-11s %-35s \n" "Region:" "${region//\"/}"
printf " %-11s %-35s \n" "Country:" "${country//\"/}"
printf " %-11s %-35s \n" "CP / Ville:" "${code//\"/} ${city//\"/}"
printf " %-11s %-35s \n" "Région:" "${state//\"/}" #url="https://maps.googleapis.com/maps/api/staticmap?center=$lat,$long&zoom=14&size=400x400&key=$GM_API_KEY"
printf " %-11s %-35s \n" "Pays:" "${country//\"/}" url="https://maps.googleapis.com/maps/api/staticmap?center=$lat,$long&zoom=$zoom&markers=color:$color%7Clabel:$label%7C$lat,$long&maptype=$type&size=$map_size&key=$GM_API_KEY"
#curl "https://maps.googleapis.com/maps/api/staticmap?center=47.1275353416667,4.78201903333333&zoom=14&size=400x400&key=AIzaSyD94L2Q4K9_ErGSarTBN4FrUxDSspGzNhY" --output /tmp/gm.png
gm_path=/tmp/k2i/gm.png
curl -s "$url" --output $gm_path
if [ -f "$gm_path" ]; then
printf "\n\t\033]1337;File=;width=$((gm_width * 2)) px;inline=1:`cat $gm_path | base64`\a\n"
fi
fi
fi fi
fi fi
printf " %-11s %-35s \n" "Comment:" "${comment}"
printf " %-11s %-35s \n" "Artist:" "${artist}"
printf " %-11s %-35s \n" "Copyright:" "${copyright}"
echo echo
fi fi
# gps # gps
if [ $opt_gps = true ]; then if [ $opt_gps = true ]; then
if [ $gps -eq 1 ]; then if [ $gps -eq 1 ]; then
echo -e "${red}GPS data available !${reset}" echo -e "${red}GPS data available !${reset}"
a=$(echo -e "Do you want to ${bold}erase GPS data${reset} ? (k)eep or (e)rase ") d=$(echo -e "Do you want to ${bold}erase GPS data${reset} ? (k)eep or (e)rase ")
read -p "$a" choice read -p "$d" choice
if [ "$choice" == "e" ] || [ "$choice" == "E" ]; then if [ "$choice" == "e" ] || [ "$choice" == "E" ]; then
echo "Erasing GPS data..." echo "Erasing GPS data..."
@@ -447,6 +516,20 @@ else
fi fi
# copyright
if [ $opt_copyright = false ]; then
b=$(echo -e "Do you want to ${bold}erase Artist and Copyright data${reset} ? (k)eep or (e)rase ")
read -p "$b" choice
if [ "$choice" == "e" ] || [ "$choice" == "E" ]; then
echo "Erasing Artist and Copyright data..."
#a="-EXIF:Artist= -IPTC:By-line= -XMP:Creator="
#c="-EXIF:Copyright= -IPTC:CopyrightNotice= -XMP:Rights="
exiftool -EXIF:Artist= -IPTC:By-line= -XMP:Creator= -EXIF:Copyright= -IPTC:CopyrightNotice= -XMP:Rights= "$file"
fi
fi
# keywords # keywords
k=$(echo "$exif" | jq --compact-output --raw-output '.[] | .Keywords[]?' | tr "\n" "," | sed 's/\,$//') k=$(echo "$exif" | jq --compact-output --raw-output '.[] | .Keywords[]?' | tr "\n" "," | sed 's/\,$//')
#k=$(echo "$exif" | sed -n '/^Keywords/p' | awk -F":" '{print $2}' | sed 's/^ *//g') #k=$(echo "$exif" | sed -n '/^Keywords/p' | awk -F":" '{print $2}' | sed 's/^ *//g')