Page 1 of 1
RSS feeds with old content reposted
Posted: January 16th, 2009, 11:09 pm
by uradox
Hi,
I am quite new to all this automated nzb stuff and have been quite impressed. Had a problem overnight where I downloaded 21gb of old tv episodes but I think thats my fault.
I use some RSS feeds from newzbin where I have done all the filtering etc..
I have a concern however with TV episodes. What happens if someone reposts a old episode? It passes my filter and I am not sure how I can stop this from downloading. I have the episode in question as I got it via another method. Is there anything in place I can use to prevent a double up from occuring?
Re: RSS feeds with old content reposted
Posted: January 17th, 2009, 9:29 am
by shypike
Only if the report titles are 100% identical.
The RSS feature already checks this and you can also let SABnzbd use
the NZB backup folder for an extra check.
If someone decides to upload an old show under a slightly different name
your are out of luck.
Making SABnzbd guess at equality is not feasible.
Re: RSS feeds with old content reposted
Posted: May 26th, 2012, 5:20 pm
by RonnieG
So, bringing this post back from the dead to see if it can be re-addressed. Below is a BASH script that parses filenames and has been thoroughly tested for detecting season and episode numbers. Could this code be ported into sabnzbd, and included as an optional filter for RSS via a checkbox? It would probably be best if the option was on each individual feed, vs globally applied to all.
It leaves SEASON and EPISODE variables in the format of 01-NN. If we could somehow store these with the RSS feed identifier, we could track which episodes were already received. Btw, I'm a seasoned developer, happy to help out in implementing this.
Thoughts?
Thanks!
Code: Select all
# TV path formats supported. Filenames will be searched in
# this order, and case insensitively.
# */<title>.s##e##.*
# */<title> - ##x##.*
# */<title> - s##e##.*
# */<title> - s##e##_*
# */<title> - s##e## *
# */<title>_s##e##_*
# */<title>.s##e#.*
# */<title>_s##e#_*
# */<title>.s#e##.*
# */<title>_s#e##_*
# */<title>.s#e#.*
# */<title>_s#e#_*
# */<title>.s##.e##.*
# */<title>_s##_e##_*
# */<title>.s##.e#.*
# */<title>_s##_e#_*
# */<title>.s#.e##.*
# */<title>_s#_e##_*
# */<title>.s#.e#.*
# */<title>_s#_e#_*
# */<title>.###.*
# */<title>_###_*
# */<title>.####.*
# */<title>_####_*
# */<title>.##.##.*
# */<title>_##_##_*
# */<title>.##x##.*
# */<title>_##x##_*
# */<title>.#x##.*
# */<title>_#x##_*
# */<title>.##x#.*
# */<title>_##x#_*
# */<title>.#x#.*
# */<title>_#x#_*
TITLE="";
SEASON="";
EPISODE="";
FILEPATH=`echo "$1" |sed 's/%20/ /g'`
FILENAME=${FILEPATH##*/}
NOTFOUND=true
# Time to find the season and episode numbers
# *.s##e##.*
if $NOTFOUND; then
if [[ "$FILENAME" =~ [\.\_][sS][0-9][0-9][eE][0-9][0-9][\.\_] ]]; then
TITLE=`echo "${FILENAME%${BASH_REMATCH[0]}*}" |sed 's/[\.\_]/ /g'`
[[ "$FILENAME" =~ [sS][0-9][0-9] ]]
[[ "${BASH_REMATCH[0]}" =~ [0-9][0-9] ]]
SEASON="${BASH_REMATCH[0]}"
[[ "$FILENAME" =~ [eE][0-9][0-9] ]]
[[ "${BASH_REMATCH[0]}" =~ [0-9][0-9] ]]
EPISODE="${BASH_REMATCH[0]}"
NOTFOUND=false;
fi;
fi;
# * - ##x##.*
if $NOTFOUND; then
if [[ "$FILENAME" =~ [\ ][\-][\ ][0-9][0-9][xX][0-9][0-9][\.\_\ ] ]]; then
TITLE=`echo "${FILENAME%${BASH_REMATCH[0]}*}" |sed 's/[\.\_]/ /g'`
[[ "$FILENAME" =~ [0-9][0-9][xX] ]]
[[ "${BASH_REMATCH[0]}" =~ [0-9][0-9] ]]
SEASON="${BASH_REMATCH[0]}"
[[ "$FILENAME" =~ [xX][0-9][0-9] ]]
[[ "${BASH_REMATCH[0]}" =~ [0-9][0-9] ]]
EPISODE="${BASH_REMATCH[0]}"
NOTFOUND=false;
fi;
fi;
# * - s##e##.*
if $NOTFOUND; then
if [[ "$FILENAME" =~ [\ ][\-][\ ][sS][0-9][0-9][eE][0-9][0-9][\.\_\ ] ]]; then
TITLE=`echo "${FILENAME%${BASH_REMATCH[0]}*}" |sed 's/[\.\_]/ /g'`
[[ "$FILENAME" =~ [sS][0-9][0-9] ]]
[[ "${BASH_REMATCH[0]}" =~ [0-9][0-9] ]]
SEASON="${BASH_REMATCH[0]}"
[[ "$FILENAME" =~ [eE][0-9][0-9] ]]
[[ "${BASH_REMATCH[0]}" =~ [0-9][0-9] ]]
EPISODE="${BASH_REMATCH[0]}"
NOTFOUND=false;
fi;
fi;
# *.s##e#.*
if $NOTFOUND; then
if [[ "$FILENAME" =~ [\.\_][sS][0-9][0-9][eE][0-9][\.\_] ]]; then
TITLE=`echo "${FILENAME%${BASH_REMATCH[0]}*}" |sed 's/[\.\_]/ /g'`
[[ "$FILENAME" =~ [sS][0-9][0-9] ]]
[[ "${BASH_REMATCH[0]}" =~ [0-9][0-9] ]]
SEASON="${BASH_REMATCH[0]}"
[[ "$FILENAME" =~ [eE][0-9] ]]
[[ "${BASH_REMATCH[0]}" =~ [0-9] ]]
EPISODE="0${BASH_REMATCH[0]}"
NOTFOUND=false;
fi;
fi;
# *.s#e##.*
if $NOTFOUND; then
if [[ "$FILENAME" =~ [\.\_][sS][0-9][eE][0-9][0-9][\.\_] ]]; then
TITLE=`echo "${FILENAME%${BASH_REMATCH[0]}*}" |sed 's/[\.\_]/ /g'`
[[ "$FILENAME" =~ [sS][0-9] ]]
[[ "${BASH_REMATCH[0]}" =~ [0-9] ]]
SEASON="0${BASH_REMATCH[0]}"
[[ "$FILENAME" =~ [eE][0-9][0-9] ]]
[[ "${BASH_REMATCH[0]}" =~ [0-9][0-9] ]]
EPISODE="${BASH_REMATCH[0]}"
NOTFOUND=false;
fi;
fi;
# *.s#e#.*
if $NOTFOUND; then
if [[ "$FILENAME" =~ [\.\_][sS][0-9][eE][0-9][\.\_] ]]; then
TITLE=`echo "${FILENAME%${BASH_REMATCH[0]}*}" |sed 's/[\.\_]/ /g'`
[[ "$FILENAME" =~ [sS][0-9] ]]
[[ "${BASH_REMATCH[0]}" =~ [0-9] ]]
SEASON="0${BASH_REMATCH[0]}"
[[ "$FILENAME" =~ [eE][0-9] ]]
[[ "${BASH_REMATCH[0]}" =~ [0-9] ]]
EPISODE="0${BASH_REMATCH[0]}"
NOTFOUND=false;
fi;
fi;
# *.s##.e##.*
if $NOTFOUND; then
if [[ "$FILENAME" =~ [\.\_][sS][0-9][0-9][\.\_][eE][0-9][0-9][\.\_] ]]; then
TITLE=`echo "${FILENAME%${BASH_REMATCH[0]}*}" |sed 's/[\.\_]/ /g'`
[[ "$FILENAME" =~ [sS][0-9][0-9] ]]
[[ "${BASH_REMATCH[0]}" =~ [0-9][0-9] ]]
SEASON="${BASH_REMATCH[0]}"
[[ "$FILENAME" =~ [eE][0-9][0-9] ]]
[[ "${BASH_REMATCH[0]}" =~ [0-9][0-9] ]]
EPISODE="${BASH_REMATCH[0]}"
NOTFOUND=false;
fi;
fi;
# *.s##.e#.*
if $NOTFOUND; then
if [[ "$FILENAME" =~ [\.\_][sS][0-9][0-9].[eE][0-9][\.\_] ]]; then
TITLE=`echo "${FILENAME%${BASH_REMATCH[0]}*}" |sed 's/[\.\_]/ /g'`
[[ "$FILENAME" =~ [sS][0-9][0-9] ]]
[[ "${BASH_REMATCH[0]}" =~ [0-9][0-9] ]]
SEASON="${BASH_REMATCH[0]}"
[[ "$FILENAME" =~ [eE][0-9] ]]
[[ "${BASH_REMATCH[0]}" =~ [0-9] ]]
EPISODE="0${BASH_REMATCH[0]}"
NOTFOUND=false;
fi;
fi;
# *.s#.e##.*
if $NOTFOUND; then
if [[ "$FILENAME" =~ [\.\_][sS][0-9][\.\_][eE][0-9][0-9][\.\_] ]]; then
TITLE=`echo "${FILENAME%${BASH_REMATCH[0]}*}" |sed 's/[\.\_]/ /g'`
[[ "$FILENAME" =~ [sS][0-9] ]]
[[ "${BASH_REMATCH[0]}" =~ [0-9] ]]
SEASON="0${BASH_REMATCH[0]}"
[[ "$FILENAME" =~ [eE][0-9][0-9] ]]
[[ "${BASH_REMATCH[0]}" =~ [0-9][0-9] ]]
EPISODE="${BASH_REMATCH[0]}"
NOTFOUND=false;
fi;
fi;
# *.s#.e#.*
if $NOTFOUND; then
if [[ "$FILENAME" =~ [\.\_][sS][0-9][\.\_][eE][0-9][\.\_] ]]; then
TITLE=`echo "${FILENAME%${BASH_REMATCH[0]}*}" |sed 's/[\.\_]/ /g'`
[[ "$FILENAME" =~ [sS][0-9] ]]
[[ "${BASH_REMATCH[0]}" =~ [0-9] ]]
SEASON="0${BASH_REMATCH[0]}"
[[ "$FILENAME" =~ [eE][0-9] ]]
[[ "${BASH_REMATCH[0]}" =~ [0-9] ]]
EPISODE="0${BASH_REMATCH[0]}"
NOTFOUND=false;
fi;
fi;
# *.###.*
if $NOTFOUND; then
if [[ "$FILENAME" =~ [\.\_][0-9][0-9][0-9][\.\_] ]]; then
TITLE=`echo "${FILENAME%${BASH_REMATCH[0]}*}" |sed 's/[\.\_]/ /g'`
[[ "$FILENAME" =~ [\.\_][0-9] ]]
[[ "${BASH_REMATCH[0]}" =~ [0-9] ]]
SEASON="0${BASH_REMATCH[0]}"
[[ "$FILENAME" =~ [0-9][0-9][\.\_] ]]
[[ "${BASH_REMATCH[0]}" =~ [0-9][0-9] ]]
EPISODE="${BASH_REMATCH[0]}"
NOTFOUND=false;
fi;
fi;
# *.####.*
if $NOTFOUND; then
if [[ "$FILENAME" =~ [\.\_][0-9][0-9][0-9][0-9][\.\_] ]]; then
TITLE=`echo "${FILENAME%${BASH_REMATCH[0]}*}" |sed 's/[\.\_]/ /g'`
[[ "$FILENAME" =~ [\.\_][0-9][0-9] ]]
[[ "${BASH_REMATCH[0]}" =~ [0-9][0-9] ]]
SEASON="${BASH_REMATCH[0]}"
[[ "$FILENAME" =~ [0-9][0-9][\.\_] ]]
[[ "${BASH_REMATCH[0]}" =~ [0-9][0-9] ]]
EPISODE="${BASH_REMATCH[0]}"
NOTFOUND=false;
fi;
fi;
# *.##.##.*
if $NOTFOUND; then
if [[ "$FILENAME" =~ [\.\_][0-9][0-9][\.\_][0-9][0-9][\.\_] ]]; then
TITLE=`echo "${FILENAME%${BASH_REMATCH[0]}*}" |sed 's/[\.\_]/ /g'`
[[ "$FILENAME" =~ [\.\_][0-9][0-9][\.\_][0-9] ]]
[[ "${BASH_REMATCH[0]}" =~ [0-9][0-9] ]]
SEASON="${BASH_REMATCH[0]}"
[[ "$FILENAME" =~ [0-9][\.\_][0-9][0-9][\.\_] ]]
[[ "${BASH_REMATCH[0]}" =~ [0-9][0-9] ]]
EPISODE="${BASH_REMATCH[0]}"
NOTFOUND=false;
fi;
fi;
# *.##x##.*
if $NOTFOUND; then
if [[ "$FILENAME" =~ [\.\_][0-9][0-9][x][0-9][0-9][\.\_] ]]; then
TITLE=`echo "${FILENAME%${BASH_REMATCH[0]}*}" |sed 's/[\.\_]/ /g'`
[[ "$FILENAME" =~ [\.\_][0-9][0-9][x][0-9] ]]
[[ "${BASH_REMATCH[0]}" =~ [0-9][0-9] ]]
SEASON="${BASH_REMATCH[0]}"
[[ "$FILENAME" =~ [0-9][x][0-9][0-9][\.\_] ]]
[[ "${BASH_REMATCH[0]}" =~ [0-9][0-9] ]]
EPISODE="${BASH_REMATCH[0]}"
NOTFOUND=false;
fi;
fi;
# *.#x##.*
if $NOTFOUND; then
if [[ "$FILENAME" =~ [\.\_][0-9][x][0-9][0-9][\.\_] ]]; then
TITLE=`echo "${FILENAME%${BASH_REMATCH[0]}*}" |sed 's/[\.\_]/ /g'`
[[ "$FILENAME" =~ [\.\_][0-9][x][0-9][0-9] ]]
[[ "${BASH_REMATCH[0]}" =~ [0-9] ]]
SEASON="0${BASH_REMATCH[0]}"
[[ "$FILENAME" =~ [0-9][x][0-9][0-9][\.\_] ]]
[[ "${BASH_REMATCH[0]}" =~ [0-9][0-9] ]]
EPISODE="${BASH_REMATCH[0]}"
NOTFOUND=false;
fi;
fi;
# *.##x#.*
if $NOTFOUND; then
if [[ "$FILENAME" =~ [\.\_][0-9][0-9][x][0-9][\.\_] ]]; then
TITLE=`echo "${FILENAME%${BASH_REMATCH[0]}*}" |sed 's/[\.\_]/ /g'`
[[ "$FILENAME" =~ [\.\_][0-9][0-9][x][0-9] ]]
[[ "${BASH_REMATCH[0]}" =~ [0-9][0-9] ]]
SEASON="${BASH_REMATCH[0]}"
[[ "$FILENAME" =~ [x][0-9][\.\_] ]]
[[ "${BASH_REMATCH[0]}" =~ [0-9] ]]
EPISODE="0${BASH_REMATCH[0]}"
NOTFOUND=false;
fi;
fi;
# *.#x#.*
if $NOTFOUND; then
if [[ "$FILENAME" =~ [\.\_][0-9][x][0-9][\.\_] ]]; then
TITLE=`echo "${FILENAME%${BASH_REMATCH[0]}*}" |sed 's/[\.\_]/ /g'`
[[ "$FILENAME" =~ [\.\_][0-9][x] ]]
[[ "${BASH_REMATCH[0]}" =~ [0-9] ]]
SEASON="0${BASH_REMATCH[0]}"
[[ "$FILENAME" =~ [x][0-9][\.\_] ]]
[[ "${BASH_REMATCH[0]}" =~ [0-9] ]]
EPISODE="0${BASH_REMATCH[0]}"
NOTFOUND=false;
fi;
fi;
Re: RSS feeds with old content reposted
Posted: May 27th, 2012, 4:57 am
by shypike
The problem is not in determining seasons and episodes, SABnzbd already does that for SeasonSort.
So far the RSS module does not use titles, seasons, episodes for remembering RSS content.
It may do so in a future release.
Other than that, we're not trying to compete with a extensive front-end like SickBeard,
which does a much better job at scouting and keeping track of series material.
Re: RSS feeds with old content reposted
Posted: May 27th, 2012, 9:05 am
by RonnieG
shypike wrote:The problem is not in determining seasons and episodes, SABnzbd already does that for SeasonSort.
So far the RSS module does not use titles, seasons, episodes for remembering RSS content.
It may do so in a future release.
Other than that, we're not trying to compete with a extensive front-end like SickBeard,
which does a much better job at scouting and keeping track of series material.
Ahh, I had actually never heard of SickBeard. Thanks for pointing me in that direction.
Thanks again.