Files
flickr/insert.sh
2025-02-05 10:37:30 +01:00

239 lines
6.7 KiB
Bash
Executable File

#!/usr/bin/env bash
#NO_COLOR=1
# Check if NO_COLOR is set to disable colorization
if [ -z "$NO_COLOR" ]; then
: "${COLOR_GREEN:=$'\e[32m'}"
: "${COLOR_GREEN_BOLD:=$'\e[1;32m'}"
: "${COLOR_RED:=$'\e[31m'}"
: "${COLOR_RED_BOLD:=$'\e[1;31m'}"
: "${COLOR_YELLOW=$'\e[33m'}"
: "${COLOR_YELLOW_BOLD:=$'\e[1;33m'}"
: "${COLOR_SILVER=$'\e[37m'}"
: "${COLOR_LIGHT_GREY=$'\e[249m'}"
: "${COLOR_BRIGHT_PURPLE=$'\e[35;1m'}"
: "${BOLD:=$'\e[1m'}"
: "${ITALIC:=$'\e[3m'}"
: "${COLOR_RESET:=$'\e[00m'}"
else
: "${BOLD:=$'\e[1m'}"
: "${COLOR_RESET:=$'\e[00m'}"
: "${ITALIC:=$'\e[3m'}"
fi
#api_key=
#user_id=
### Variables for self updating
ScriptArgs=( "$@" )
ScriptPath="$(readlink -f "$0")" # /Users/bruno/Documents/Scripts/bashbirds/bashbirds.sh
ScriptWorkDir="$(dirname "$ScriptPath")" # /Users/bruno/Documents/Scripts/bashbirds
dotenv () {
set -a
# shellcheck disable=SC1091
[ -f "$ScriptWorkDir/.env" ] && . "$ScriptWorkDir/.env" || { echo -e "${red}\nNo .env file found ! No API key for Flickr.'.${reset}"; exit 1; }
set +a
}
dotenv
###################################################
# #
# Create database flick.db #
# #
###################################################
dir=$(dirname "$0")
if [ ! -f ./flickr.db ]; then
cmd0="CREATE TABLE photos (PhotoID VARCHAR(16) PRIMARY KEY, Title VARCHAR(50), Description VARCHAR(100), Posted VARCHAR(16), Taken VARCHAR(16), View INT, Favorites INT, Comments INT, Tags VARCHAR(300), Url VARCHAR(75), AlbumID VARCHAR(100), GroupID VARCHAR(150) );"
echo "$cmd0" | sqlite3 ./flickr.db
cmd1="CREATE TABLE groups (GroupID VARCHAR(16) PRIMARY KEY, GroupTitle VARCHAR(75), GroupUrl VARCHAR(50) );"
echo "$cmd1" | sqlite3 ./flickr.db
cmd2="CREATE TABLE albums (AlbumID INT PRIMARY KEY, AlbumTitle VARCHAR(50) UNIQUE );"
echo "$cmd2" | sqlite3 ./flickr.db
if [ $? -ne 0 ]; then exit 0; fi
fi
array=()
source "$ScriptWorkDir/functions.sh"
perpage=500
pages=
# getinfo_people
username=
userid=
path_alias=
firstdatetaken=
photosurl=
profileurl=
# getinfo_photos
description=
posted=
taken=
view=
comments=
tags=
url=
# getFavorites_photos
favorites=
# getAllContexts_photos
title_alb=
id_alb=
title_gro=
id_gro=
url_gro=
###################################################
# #
# Get info about the given user. #
# #
###################################################
params_info=("$api_key" "$user_id")
getinfo_people "${params_info[@]}"
echo -e "\n${COLOR_GREEN}Get info about user ($user_id).${COLOR_RESET}"
printf "%15s %50s\n" "Name:" "$username"
printf "%15s %50s\n" "Alias:" "$path_alias"
printf "%15s %50s\n" "UserID:" "$userid"
printf "%15s %50s\n" "Joined:" "$firstdatetaken"
printf "%15s %50s\n" "Gallery:" "$photosurl"
printf "%15s %50s\n" "Profile:" "$profileurl"
###################################################
# #
# Get a list of public photos for the given user. #
# #
###################################################
#photos=$(curl "https://www.flickr.com/services/rest/?method=flickr.people.getPublicPhotos&api_key=$api_key&user_id=$user_id&per_page=500&page=2&format=json&nojsoncallback=1")
echo -e "\n${COLOR_GREEN}Get a list of public photos for the given user ($user_id).${COLOR_RESET}"
: <<'END_COMMENT2'
echo -e "One request per page..."
#for page in {1..2}
for (( page=1; page <=$pages; page++ ))
do
#echo "Page $page"
curl -s "https://www.flickr.com/services/rest/?method=flickr.people.getPublicPhotos&api_key=$api_key&user_id=$user_id&per_page=500&page=$page&format=json&nojsoncallback=1" | jq '.photos | .photo' > "page${page}.json"
done
echo -e "Concatenate all pages in liste.json"
allpages=$(ls page*.json | tr '\n' ' ')
#jq -s 'add' page1.json page2.json > liste.json
jq -s 'add' ${allpages} > liste.json
#echo -e "Display all images list..."
echo -e "Insertion des données du fichier liste.json dans la base flickr.db...\n"
END_COMMENT2
photos=$(cat page1.json)
#photos=$(cat liste.json)
ID=()
counter=1
while read -r id && read -r title; do
echo -e "${BOLD}Photo ID: ${id}\t Title: ${title}${COLOR_RESET}"
photo_id=$(echo "${id}" | sed "s/'/''/g")
photo_title=$(echo "${title}" | sed "s/'/''/g")
# Infos
params_info=("$api_key" "$id")
getinfo_photos "${params_info[@]}"
photo_description=$(echo "${description}" | sed "s/'/''/g")
photo_posted=$(echo "${posted}" | sed "s/'/''/g")
photo_taken=$(echo "${taken}" | sed "s/'/''/g")
photo_view=$(echo "${view}" | sed "s/'/''/g")
photo_comments=$(echo "${comments}" | sed "s/'/''/g")
photo_tags=$(echo "${tags}" | sed "s/'/''/g")
photo_url=$(echo "${url}" | sed "s/'/''/g")
# Favorites
params_favorites=("$api_key" "$_photo_id")
getFavorites_photos "${params_favorites[@]}"
photo_favorites=$(echo "${favorites}" | sed "s/'/''/g")
# Albums - Groups
params_context=("$api_key" "$id")
getAllContexts_photos "${params_context[@]}"
# Albums
a_t=$(echo "${title_alb}" | sed "s/'/''/g") # album_title
a_i=$(echo "${id_alb}" | sed "s/'/''/g") # album_id
IFS=';'
read -ra album_title <<< "$a_t"
read -ra album_id <<< "$a_i"
req=
for val in ${!album_id[@]}
do
echo "${album_id[$val]} - ${album_title[$val]}"
if [ -n "${album_id[$val]}" ]; then
cmd5="INSERT OR REPLACE INTO albums (AlbumID, AlbumTitle) VALUES ('${album_id[$val]}', '${album_title[$val]}');"
echo "$cmd5" | sqlite3 ./flickr.db
fi
done
: <<'END_COMMENT2'
END_COMMENT2
# Groups
g_t=$(echo "${title_gro}" | sed "s/'/''/g") # group_title
g_i=$(echo "${id_gro}" | sed "s/'/''/g") # group_id
g_u=$(echo "${url_gro}" | sed "s/'/''/g") # group_url
IFS=';'
read -ra group_title <<< "$g_t"
read -ra group_id <<< "$g_i"
read -ra group_url <<< "$g_u"
for val in ${!group_id[@]}
do
echo "${group_id[$val]} - ${group_title[$val]} - ${group_url[$val]}"
if [ -n "${group_id[$val]}" ]; then
cmd4="INSERT OR REPLACE INTO groups (GroupID, GroupTitle, GroupUrl) VALUES ('${group_id[$val]}', '${group_title[$val]}', '${group_url[$val]}');"
echo "$cmd4" | sqlite3 ./flickr.db
fi
done
#
cmd3="INSERT OR REPLACE INTO photos (PhotoID, Title, Description, Posted, Taken, View, Favorites, Comments, Tags, Url, AlbumID, GroupID) VALUES ('$photo_id','$photo_title', '$photo_description', '$photo_posted', '$photo_taken', '$photo_view', '$photo_favorites', '$photo_comments', '$photo_tags', '$photo_url', '$a_i', '$g_i');"
echo "$cmd3" | sqlite3 ./flickr.db
echo $?
ID+=(${id})
((++counter))
done < <(jq -r -c '.[] | .id, .title' <<< "$photos")
echo -e "${COLOR_GREEN}Found $counter public photos for user ($user_id) on Flickr.${COLOR_RESET}"