From 85708f5b91f3b033e4adf1f0cd81b9d39dbd1b19 Mon Sep 17 00:00:00 2001 From: CyberLeo Date: Sat, 19 May 2012 08:05:43 -0500 Subject: [PATCH] What is this I don't even... --- .gitignore | 3 ++ e621 | 1 + fetch | 69 ++++++++++++++++++++++++++++++++++++ gelbooru | 1 + lib/kvs.sh | 56 +++++++++++++++++++++++++++++ lib/taggery.sh | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 225 insertions(+) create mode 120000 e621 create mode 100755 fetch create mode 120000 gelbooru create mode 100644 lib/kvs.sh create mode 100644 lib/taggery.sh diff --git a/.gitignore b/.gitignore index e69de29..3e7eb75 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1,3 @@ +.*.kvdb +md5/* +tag/* diff --git a/e621 b/e621 new file mode 120000 index 0000000..ef77e7f --- /dev/null +++ b/e621 @@ -0,0 +1 @@ +fetch \ No newline at end of file diff --git a/fetch b/fetch new file mode 100755 index 0000000..16c5dbf --- /dev/null +++ b/fetch @@ -0,0 +1,69 @@ +#!/bin/sh -e + +pebkac() { + [ "${*}" ] && printf "%s\n\n" "${*}" + cat < + +Given an ID number from the Gelbooru site, downloads and stashes the full-size +image in the md5 directory and adds whatever tags are found into the tag area. +EOF + kill $$ + exit 1 +} + +[ "${*}" ] || pebkac +id="${1}" +[ -z "$(echo "${id}" | tr -d '[0-9]')" ] || pebkac "ID should be an integer" + +taggery_name="$(basename "${0}")" +case "${taggery_name}" in +e621) + e621_image_url_filter() { + sed -e '/Size: /!d; s/^.*.*$//; s/^.*href="\([^"]*\)".*$/\1/; /:\/\//!s/^/http:\/\/e621.net/' + } + e621_image_tags_filter() { + sed -e '/id="tag-sidebar"/,/<\/ul>/!d; /class="tag-type-/!d; s/\([^?]\)<\/a>.*$/\1/; s/^.*>//; s/ /_/g' + } + taggery_fmturl="http://e621.net/post/show/%s" + taggery_image_url_filter=e621_image_url_filter + taggery_image_tags_filter=e621_image_tags_filter + ;; +gelbooru) + gelbooru_image_url_filter() { + sed -e '/>Original imageOriginal image.*//i; s/^.*/&\n/g' | sed -e '/class="tag-type-/!d; s/\([^?]\)<\/a>.*$/\1/; s/^.*>//; s/ /_/g' + } + taggery_fmturl="http://gelbooru.com/index.php?page=post&s=view&id=%s" + taggery_image_url_filter=gelbooru_image_url_filter + taggery_image_tags_filter=gelbooru_image_tags_filter + ;; +*) pebkac "Unsupported" ;; +esac + +# Load KVS +kvs=".${taggery_name}.kvdb" +. "$(dirname "${0}")/lib/kvs.sh" + +# Load Taggery +. "$(dirname "${0}")/lib/taggery.sh" +image_url() { taggery_image_url "${@}"; } +image_tags() { taggery_image_tags "${@}"; } + +cd "$(dirname "${0}")" + +file="$(image_url "${id}")" +tags="$(image_tags "${id}")" + +[ "${file}" -a "${tags}" ] || { echo "Nothing found!"; kill $$; exit 1; } + +name="$(basename "${file}")" +wget -O "md5/${name}" "${file}" +for tag in ${tags} +do + echo ${tag} + mkdir -p "tag/${tag}" + ln -sf "../../md5/${name}" "tag/${tag}/" +done diff --git a/gelbooru b/gelbooru new file mode 120000 index 0000000..ef77e7f --- /dev/null +++ b/gelbooru @@ -0,0 +1 @@ +fetch \ No newline at end of file diff --git a/lib/kvs.sh b/lib/kvs.sh new file mode 100644 index 0000000..0c2059d --- /dev/null +++ b/lib/kvs.sh @@ -0,0 +1,56 @@ +t="$(printf '\t')" + +[ "${kvs}" ] || { + cat < "${kvs}" + +# Add or replace a value stored for a given key and id in the kvs +kvs_set() { + [ "${1}" -a "${2}" ] || return 255 + local id="${1}" + local var="${2}" + local val="${3}" + printf "%s\t%s\t%s\n" "${id}" "${var}" "${val}" >> "${kvs}" +} + +# Fetch the most recent value stored for a given key and id from the kvs +kvs_get() { + [ "${1}" -a "${2}" ] || return 255 + local id="${1}" + local var="${2}" + grep "^${id}${t}${var}${t}" "${kvs}" | tail -n 1 | cut -d"${t}" -f3- +} + +# Does the kvs have any entries for a given ID? +kvs_has_id() { + [ "${1}" ] || return 255 + local id="${1}" + grep -q "^${id}${t}" "${kvs}" +} + +# Remove a given key with a given ID from the kvs +kvs_unset() { + [ "${1}" -a "${2}" ] || return 255 + local id="${1}" + local var="${2}" + grep -v "^${id}${t}${var}${t}" "${kvs}" > "${kvs}.tmp" && mv -f "${kvs}.tmp" "${kvs}" || rm -f "${kvs}.tmp" +} + +# Remove all keys with a given ID from the kvs +kvs_unset_all() { + [ "${1}" ] || return 255 + local id="${1}" + grep -v "^${id}${t}" "${kvs}" > "${kvs}.tmp" && mv -f "${kvs}.tmp" "${kvs}" || rm -f "${kvs}.tmp" +} diff --git a/lib/taggery.sh b/lib/taggery.sh new file mode 100644 index 0000000..1801b53 --- /dev/null +++ b/lib/taggery.sh @@ -0,0 +1,95 @@ +[ "${taggery_name}" -a "${taggery_fmturl}" -a "${taggery_image_url_filter}" -a "${taggery_image_tags_filter}" ] || { + cat <