Skip to content

Instantly share code, notes, and snippets.

@bitofhope
Last active April 25, 2017 02:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bitofhope/73772befa7b40a113a257b850afa2cbe to your computer and use it in GitHub Desktop.
Save bitofhope/73772befa7b40a113a257b850afa2cbe to your computer and use it in GitHub Desktop.
Danbooru-avustin à la Hieda
#!/bin/bash
savedir=$HOME/kuvat/danbooru
help()
{
printf \
"Käyttö: %s [options...] [URL:t tai Danbooru-ID:t]
\t-h\tNäytä tämä viesti
\t-q\tÄlä näytä curl-latauspalkkia
Jos komentorivillä ei ole yhtään ID:tä, luetaan ne standardisyötteestä.\n" "$0" >&2
}
parseid()
{
printf "%s\n" "$1" |
grep -Eo '^(https?://([a-z]+.)?donmai.us/posts/)?[0-9]+' |
grep -Eo '[0-9]+$'
# Sanity check
if [[ $? -ne 0 ]]
then
printf "ID tai URL ei kelpaa: %s\n" "$1" >&2
return 1
fi
}
getbooru()
{
baseurl='https://danbooru.donmai.us/'
id="$1.json"
posturl="$baseurl/posts/$id"
json="$(mktemp -p /tmp/ mykyy.XXXXXXXXXX.json)"
# Hae tiedot
curl -sH "Accept: application/json" "$posturl" > "$json"
if [[ $? -ne 0 ]]
then
printf "Tietojen lataus epäonnistui!\n" >&2
return 1
fi
# Pieni sanity check
success="$(jq -r .sucess "$json")"
if [ "$success" = "false" ]
then
printf "Kelpaamaton ID.\n" >&2
return 1
fi
artist="$(jq -r .tag_string_artist "$json" |
tr ' ' '\n' |
# AWK-velhoutta, lyhennä sulkeet
awk '
function abbrev(s) {
ret = ""
split(s, words, "_");
for (i in words)
{
if (words[i] == "no")
{
ret = ret "n";
continue;
}
add = substr(toupper(words[i]), 1, 1);
ret = ret add;
}
return ret;
}
!/\(/ { print $0 }
/\(/{
split($0, artist, "[()]");
paren = abbrev(artist[2]);
print artist[1] paren;
} ' |
sed '2,$s/^/_/' |
tr -d '\n' |
sed -r 's/(^|[( _])([A-Za-z0-9])/\1\u\2/g')" # isot alkukirjaimet
characters="$(jq -r .tag_string_character "$json" |
sed -r 's/(^|[^A-Za-z0-9])([A-Za-z0-9])/\1\u\2/g' | # isot alkukirjaimet
sed 's/_No_/_no_/g' | # "no" pienellä
sed -r 's/ \S+$/ ja&/' | # "ja" kahden viimeisen väliin
tr ' ' '_')" # sanavälit alaviivoiksi
ext="$(jq -r .file_ext "$json")"
pic_url="$(jq -r .file_url "$json")"
if [ "$pic_url" = 'null' ]
then
printf "Kuvatietojen haku epäonnistui.\n" >&2
return 1
fi
savefile="${savedir}/Db${1}_-_${artist}_-_${characters}.${ext}"
curl $sflag "https://danbooru.donmai.us""$pic_url" > "$savefile"
rm "$json"
}
sflag=""
while getopts ":hq" opt; do
case $opt in
h)
help
exit 0
;;
q)
sflag="-s"
;;
\?)
printf "Tuntematon komento: -%s\n" "$OPTARG" >&2
help
exit -1
;;
esac
done
shift $((OPTIND-1))
mkdir -p "$savedir"
if [ -z "$1" ]
then
while read -r id
do
parsed="$(parseid "$id")" || exit 1
getbooru "$parsed"
done
else
for id in "$@"
do
parsed="$(parseid "$id")" || exit 1
getbooru "$parsed"
done
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment