i do too much before my first commit
This commit is contained in:
commit
c291e986b7
4
config.sh
Normal file
4
config.sh
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
watch Commie 'Yuyushiki - \d\d' 'Aiura - \d\d'
|
||||||
|
watch rori 'Hentai Ouji to Warawanai Neko - '
|
||||||
|
watch FFF 'DATE A LIVE - \d\d(?!v0)'
|
||||||
|
#watch 'Nimei-Raws' '.'
|
84
nyaa.sh
Normal file
84
nyaa.sh
Normal file
|
@ -0,0 +1,84 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
SEP=$'\1'
|
||||||
|
|
||||||
|
die() {
|
||||||
|
echo -E "$@" 1>&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
nullcheck() {
|
||||||
|
[[ -n "$1" ]] || die "Null group name";
|
||||||
|
}
|
||||||
|
|
||||||
|
sanitize() {
|
||||||
|
sed -e 's/[^0-9a-zA-Z_]/_/g'
|
||||||
|
}
|
||||||
|
|
||||||
|
splittags() {
|
||||||
|
awk -v tag="$1" -f splittags.awk
|
||||||
|
}
|
||||||
|
|
||||||
|
scrape() {
|
||||||
|
TZ=UTC0 awk -v g="$1" -v timestamp="${2:-0}" -v sep="$SEP" -f scrape.awk
|
||||||
|
}
|
||||||
|
|
||||||
|
declare -A groupinsane # unsanitized group names
|
||||||
|
declare -A groupshows # regexes
|
||||||
|
watch() { # {group name} [regex...]
|
||||||
|
nullcheck "$1"
|
||||||
|
local gs="$(sanitize<<<"$1")"
|
||||||
|
groupinsane[$gs]="$1"
|
||||||
|
shift
|
||||||
|
while (( "$#" )); do
|
||||||
|
groupshows[$gs]+="|($1)"
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
declare -A grouptimes # last times timestamp
|
||||||
|
touchgroup() { # {group name} {unix time}
|
||||||
|
nullcheck "$1"
|
||||||
|
local gs="$(sanitize<<<"$1")"
|
||||||
|
grouptimes[$gs]="$2"
|
||||||
|
}
|
||||||
|
|
||||||
|
groupreleases() { # groupname [timestamp]
|
||||||
|
nullcheck "$1"
|
||||||
|
# TODO: escapeurl $1
|
||||||
|
local URL="http://www.nyaa.eu/?page=search&term=%5B$1%5D&page=rss"
|
||||||
|
curl -LsS "$URL" > "$1.xml" || die "Failed to retrieve releases for $1"
|
||||||
|
tr -d '\r\n'"$SEP" < "$1.xml" | splittags item | scrape "$1" "${2:-}"
|
||||||
|
}
|
||||||
|
|
||||||
|
groupfilter() { # groupname regex [timestamp]
|
||||||
|
groupreleases "$1" "${3:-}" | while IFS=$SEP read -r title torrent; do
|
||||||
|
grep -P "$2" <<< "$title" 1>/dev/null && echo "$title$SEP$torrent"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
cleanup() {
|
||||||
|
for gs in "${!grouptimes[@]}"; do
|
||||||
|
local v="${grouptimes[$gs]}"
|
||||||
|
echo "touchgroup $gs $v" >> times.sh
|
||||||
|
[ -e "$gs.xml" ] && rm "$gs.xml"
|
||||||
|
done
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# TODO: optionally buffer lists so interrupting and restarting wont give the same output
|
||||||
|
|
||||||
|
runall() {
|
||||||
|
trap cleanup INT
|
||||||
|
|
||||||
|
local insane regex timestamp now
|
||||||
|
for gs in "${!groupshows[@]}"; do
|
||||||
|
insane="${groupinsane[$gs]}"
|
||||||
|
regex="${groupshows[$gs]:1}"
|
||||||
|
timestamp="${grouptimes[$gs]}"
|
||||||
|
now="$(date -u '+%s')"
|
||||||
|
groupfilter "$insane" "$regex" "$timestamp"
|
||||||
|
touchgroup "$gs" "$now"
|
||||||
|
done
|
||||||
|
|
||||||
|
cleanup
|
||||||
|
}
|
11
run
Executable file
11
run
Executable file
|
@ -0,0 +1,11 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
prettify() {
|
||||||
|
while IFS=$SEP read -r title torrent time; do
|
||||||
|
echo "$title"$'\n'"dl:"$'\t'"$torrent"$'\n'"at:"$'\t'"$(date -d @"$time")"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
. nyaa.sh
|
||||||
|
. config.sh
|
||||||
|
[ -e times.sh ] && { . times.sh; mv times.sh times.sh.old; }
|
||||||
|
runall | prettify
|
39
scrape.awk
Normal file
39
scrape.awk
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
function opentag(str, tag) {
|
||||||
|
topen="<"tag">"
|
||||||
|
tclose="</"tag">"
|
||||||
|
len=length(tag)
|
||||||
|
begin=index(str, topen)
|
||||||
|
end=index(str, tclose)
|
||||||
|
return (begin && end) ? substr(str, begin+len+2, end-begin-len-2) : ""
|
||||||
|
}
|
||||||
|
|
||||||
|
function unescape(str) {
|
||||||
|
while (match(str, /&#([0-9]+);/, b))
|
||||||
|
str=substr(str, 1, RSTART-1) sprintf("%c",b[1]) substr(str, RSTART+RLENGTH)
|
||||||
|
return str
|
||||||
|
}
|
||||||
|
|
||||||
|
function hotdate(str) {
|
||||||
|
split(str, d, "[ :]")
|
||||||
|
return mktime(d[4]" "months[d[3]]" "d[2]" "d[5]" "d[6]" "d[7])
|
||||||
|
}
|
||||||
|
|
||||||
|
BEGIN{
|
||||||
|
# http://stackoverflow.com/a/2123002
|
||||||
|
m=split("Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec",d,"|")
|
||||||
|
for(o=1;o<=m;o++) months[d[o]]=sprintf("%02d",o)
|
||||||
|
glen=length(g)
|
||||||
|
}
|
||||||
|
|
||||||
|
function run(str) {
|
||||||
|
title=unescape(opentag(str, "title"))
|
||||||
|
if (substr(title,1,glen+2) != "["g"]") return
|
||||||
|
pub=unescape(opentag($0, "pubDate"))
|
||||||
|
# "date -d \""pub "\" +%s" | getline pubunix
|
||||||
|
pubunix=hotdate(pub)
|
||||||
|
if (pubunix <= timestamp) return
|
||||||
|
torrent=unescape(opentag(str, "link"))
|
||||||
|
print title sep torrent sep pubunix
|
||||||
|
}
|
||||||
|
|
||||||
|
{run($0)}
|
13
splittags.awk
Normal file
13
splittags.awk
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
str=$0
|
||||||
|
topen="<"tag">"
|
||||||
|
tclose="</"tag">"
|
||||||
|
len=length(tag)
|
||||||
|
for (;;) {
|
||||||
|
begin=index(str, topen)
|
||||||
|
end=index(str,tclose)
|
||||||
|
if (!(begin || end)) break
|
||||||
|
print substr(str, begin+len+2, end-begin-len-2)
|
||||||
|
str=substr(str, end+len+3)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user