Synology-Forum.nl

Packages => 3rd party Packages => NZBGet => Topic gestart door: Chris12 op 27 december 2014, 15:26:32

Titel: extra script in NZBget toevoegen
Bericht door: Chris12 op 27 december 2014, 15:26:32
Hallo,

Ik zou graag files willen renamen wanneer de naam reversed is (zoals bv bij QoQ series releases).
Hiervoor het ik onderstaande script gevonden:
https://github.com/clinton-hall/nzbToMedia/issues/385 (https://github.com/clinton-hall/nzbToMedia/issues/385)

Dit script met winscp uploaded naar de script directory van NZBget:  /usr/local/nzbget/share/nzbget/scripts
In die diectory zie ik ook de email/delete scripts etc staan.

Echter na uploaden en herstarte NZBget en zelfs herstarten compleet NAS zie ik het nieuwe "reverse_name.py" script niet staan wanneer ik deze bij Extension Scripts -> Postscripts in NZBget wil toevoegen.

Moet ik nog wat handelingen uitvoeren om het script kenbaar te maken die ik nu nog vergeten ben?

Ik heb wel gelezen dat het reversen van file names al in NZBget zou zitten, echter werkt dit niet vandaar dat ik met dit losse script aan de gang wil gaan.


Titel: Re: extra script in NZBget toevoegen
Bericht door: Birdy op 27 december 2014, 15:48:47
Staan de rechten wel goed, enz.....:

[attachimg=1]

Als je iets gewijzigd hebt dan een reload doen in NZBGet en dan weer kijken.
Titel: Re: extra script in NZBget toevoegen
Bericht door: Chris12 op 27 december 2014, 15:51:55
aha, die staan anders (root/root) . Straks even aanpassen en nzbget reloaden (die is nu druk bezig met DL)
Titel: Re: extra script in NZBget toevoegen
Bericht door: Chris12 op 27 december 2014, 19:42:59
Rechten goed gezet, nzbget reloaded, ds415 herstart.
Maar helaas nog steeds komt het script niet in de lijst voor.
Titel: Re: extra script in NZBget toevoegen
Bericht door: GeddyLee op 28 december 2014, 11:12:45
Staan je ScriptDir en PostScript goed?


Ben trouwens benieuwd hoe dat reverse script werkt, ik lees er gemixte verhalen over..
Titel: Re: extra script in NZBget toevoegen
Bericht door: GeddyLee op 28 december 2014, 11:53:34
Ik heb 'm ertussen staan maar ik heb niet het idee dat er veel gebeurd, getest met een filmpie van hannes3 maar deze beste man gebruikt altijd een aantal submappen en deze worden niet opgeruimd en de film wordt niet hernoemd. Deletesamples werkt wel maar niet met submappen, Flatten werkt ook niet omdat de submappen niet leeg zijn.


Reverse name werkt ook niet maar waarschijnlijk door dezelfde submappen ..
Titel: Re: extra script in NZBget toevoegen
Bericht door: Chris12 op 28 december 2014, 12:15:50
ScriptDir: /usr/local/nzbget/share/nzbget/scripts
Hierin het reverse name script gezet

PostDir: nzbToMedia/DeleteSamples.py, EMail.py
Hier staat het reverse name script niet tussen (als je op 'Choose' button drukt)

Titel: Re: extra script in NZBget toevoegen
Bericht door: GeddyLee op 28 december 2014, 12:31:28
Klopt je scriptdir? Moet dit niet zijn /usr/local/nzbget/share/nzbget/scripts/nzbToMedia

ipv /usr/local/nzbget/share/nzbget/scripts

Bij mij staan in de scripts map niet in de script/nzbToMedia .. dus is het pad voor mij /usr/local/nzbget/share/nzbget/scripts als jij ze in de map nzbToMedia hebt staan moet het pad /usr/local/nzbget/share/nzbget/scripts/nzbToMedia zijn.
Titel: Re: extra script in NZBget toevoegen
Bericht door: Chris12 op 28 december 2014, 13:07:29
Net de script dir aangepast, maar dat haalt ook niks uit het reverse name script staat er dan nog steeds niet tussen.
Titel: Re: extra script in NZBget toevoegen
Bericht door: GeddyLee op 28 december 2014, 13:26:31
Even een wild guess .. Heb je dat script met een Windows machine binnen gehaald en toen in de bewuste map gezet met winscp (of zoiets)?

Dat schijnt iets met een script file te doen waardoor Linux 'm niet kan lezen, ik ben absoluut geen Linux kenner dus ik kan het ook mis hebben.


Overigens, ik heb niet het idee dat flatten en reverse_name veel doen bij mij. Ik zie ze ook niet aangeroepen worden. DeleteSamples zie ik wel aangeroepen worden.

Post-process-script DeleteSamples.py for ....... successful
DeleteSamples: Script triggered from NZBGet Version 14.1
Executing post-process-script DeleteSamples.py for
Titel: Re: extra script in NZBget toevoegen
Bericht door: Birdy op 28 december 2014, 14:09:58
ScriptDir: /usr/local/nzbget/share/nzbget/scripts
Hierin het reverse name script gezet

PostDir: nzbToMedia/DeleteSamples.py, EMail.py
Hier staat het reverse name script niet tussen (als je op 'Choose' button drukt)

ScriptDir = goed, ik heb ook: [attachimg=1]

Let op: Als je een script toevoegt dan komt deze geheel onderin het lijstje:

[attachimg=2]

Als je daar nog steeds niet "reverse_name.py" ziet, dan staat de rechten nog steeds niet goed.

Dus nogmaals:

[attachimg=3]

Let op:
File extensie moet wel .py zijn: reverse_name.py
Groep: root
Eigenaar: nzbget
Octaal: 0755
Titel: Re: extra script in NZBget toevoegen
Bericht door: GeddyLee op 28 december 2014, 14:46:27
Allemaal nagekeken en staan goed Birdy. Dankjewel!


Heb jij reverse_name uitgeprobeerd? reverse doet in ieder geval bij mij niets.
Titel: Re: extra script in NZBget toevoegen
Bericht door: Birdy op 28 december 2014, 14:50:21
Ik doe niets met reverse_name, heb alleen maar een beetje zitten testen voor je m.b.t. het plaatsen en zien van het script in NZBGet  ;)
Titel: Re: extra script in NZBget toevoegen
Bericht door: Birdy op 28 december 2014, 14:51:42
Voeg anders ook even de printscreens toe zoals ik gedaan heb, waarschijnlijk zie je toch iets over het hoofd.
Titel: Re: extra script in NZBget toevoegen
Bericht door: GeddyLee op 28 december 2014, 15:20:37
Ik zie niets anders .. Ik krijg ook geen foutmeldingen binnen het log, lijkt wel of het script gewoon genegeerd wordt.
Titel: Re: extra script in NZBget toevoegen
Bericht door: Birdy op 28 december 2014, 15:27:53
Oh.....dacht dat je nog steeds aan het stoeien was met het script toe te voegen aan NZBGet  :lol:
En, dat je het script handmatig had uitgevoerd  ;)
Kan je verder niet helpen, sorry.
Titel: Re: extra script in NZBget toevoegen
Bericht door: GeddyLee op 28 december 2014, 15:58:38
Geeft niet .. Ik laat het los tot ik weer zin krijg om uit te zoeken wat er mis is  ;)
Titel: Re: extra script in NZBget toevoegen
Bericht door: Chris12 op 28 december 2014, 21:44:16
Ik heb de volgende settings (screenshots):

file reverse_name.py
(https://www.synology-forum.nl/proxy.php?request=http%3A%2F%2Fi57.tinypic.com%2Ffktwew.jpg&hash=c4e827b13c7ce2dfe5a209af05409a4f5560925e) (http://i57.tinypic.com/fktwew.jpg)

Ik zie wel dat de file een stuk groter is.
Ik heb de file hier vandaan:
https://github.com/Prinz23/nzbget-pp-reverse (https://github.com/Prinz23/nzbget-pp-reverse)

ScriptDir:
(https://www.synology-forum.nl/proxy.php?request=http%3A%2F%2Fi57.tinypic.com%2Fztwvlt.jpg&hash=9e2c5439255f25668e0210f7816b20d0a7c3fb72) (http://i57.tinypic.com/ztwvlt.jpg)


Lijst met scripts bij PostScripts:
(https://www.synology-forum.nl/proxy.php?request=http%3A%2F%2Fi60.tinypic.com%2F2a5db4l.jpg&hash=3afef5994335010069f47709d0d9d1c17b2a23ec) (http://i60.tinypic.com/2a5db4l.jpg)

Geen reverse_name script daartussen.
Titel: Re: extra script in NZBget toevoegen
Bericht door: Birdy op 28 december 2014, 22:34:31
Kijk eens in die reverse_name.py file want dit klopt helemaal niet: [attachimg=1]
Misschien dat het script niet "herkend" wordt ?

Het volgende zou er in moeten staan:

#!/usr/bin/env python
#
##############################################################################
### NZBGET POST-PROCESSING SCRIPT                                          ###

# Reverse filenames.
#
# NOTE: This script requires Python to be installed on your system.

##############################################################################
### OPTIONS                                                                ###

### NZBGET POST-PROCESSING SCRIPT                                          ###
##############################################################################

import os
import sys
import re

reverse_list = [r"\.\d{2}e\d{2}s\.", r"\.p0612\.", r"\.[pi]0801\.", r"\.p027\.", r"\.[pi]675\.", r"\.[pi]084\.", r"\.p063\.", r"\b[45]62[xh]\.", r"\.yarulb\.", r"\.vtd[hp]\.",
                r"\.ld[.-]?bew\.", r"\.pir.?(shv|dov|dvd|bew|db|rb)\.", r"\brdvd\.", r"\.vts\.", r"\.reneercs\.", r"\.dcv\.", r"\b(pir|mac)dh\b", r"\.reporp\.", r"\.kcaper\.",
                r"\.lanretni\.", r"\b3ca\b", r"\bcaa\b", r"\b3pm\b", r"\.cstn\.", r"\.5r\.", r"\brcs\b"]
reverse_pattern = re.compile('|'.join(reverse_list), flags=re.IGNORECASE)
season_pattern = re.compile(r"(.*\.\d{2}e\d{2}s\.)(.*)", flags=re.IGNORECASE)
word_pattern = re.compile(r"([^A-Z0-9]*[A-Z0-9]+)")
char_replace = [[r"(\w)1\.(\w)",r"\1i\2"]
]
garbage_name = re.compile(r"^[a-zA-Z0-9]{5,}$")
media_list = [r"\.s\d{2}e\d{2}\.", r"\.2160p\.", r"\.1080[pi]\.", r"\.720p\.", r"\.576[pi]\.", r"\.480[pi]\.", r"\.360p\.", r"\.[xh]26[45]\b", r"\.bluray\.", r"\.[hp]dtv\.",
              r"\.web[.-]?dl\.", r"\.(vhs|vod|dvd|web|bd|br).?rip\.", r"\.dvdr\b", r"\.stv\.", r"\.screener\.", r"\.vcd\.", r"\bhd(cam|rip)\b", r"\.proper\.", r"\.repack\.",
              r"\.internal\.", r"\bac3\b", r"\baac\b", r"\bmp3\b", r"\.ntsc\.", r"\.pal\.", r"\.secam\.", r"\bdivx\b", r"\bxvid\b", r"\.r5\.", r"\.scr\."]
media_pattern = re.compile('|'.join(media_list), flags=re.IGNORECASE)
media_extentions = [".mkv", ".mp4", ".avi", ".wmv", ".divx", ".xvid"]

# NZBGet V11+
# Check if the script is called from nzbget 11.0 or later
if os.environ.has_key('NZBOP_SCRIPTDIR') and not os.environ['NZBOP_VERSION'][0:5] < '11.0':
    print "[INFO] Script triggered from NZBGet (11.0 or later)."

    # NZBGet argv: all passed as environment variables.
    clientAgent = "nzbget"
    # Exit codes used by NZBGet
    POSTPROCESS_PARCHECK=92
    POSTPROCESS_SUCCESS=93
    POSTPROCESS_ERROR=94
    POSTPROCESS_NONE=95

    # Check nzbget.conf options
    status = 0

    if os.environ['NZBOP_UNPACK'] != 'yes':
        print "[INFO] Please enable option \"Unpack\" in nzbget configuration file, exiting"
        sys.exit(POSTPROCESS_NONE)

    # Check par status
    if os.environ['NZBPP_PARSTATUS'] == '3':
        print "[INFO] Par-check successful, but Par-repair disabled, exiting"
        sys.exit(POSTPROCESS_NONE)

    if os.environ['NZBPP_PARSTATUS'] == '1':
        print "[INFO] Par-check failed, setting status \"failed\""
        status = 1
        sys.exit(POSTPROCESS_NONE)

    # Check unpack status
    if os.environ['NZBPP_UNPACKSTATUS'] == '1':
        print "[INFO] Unpack failed, setting status \"failed\""
        status = 1
        sys.exit(POSTPROCESS_NONE)

    if os.environ['NZBPP_UNPACKSTATUS'] == '0' and os.environ['NZBPP_PARSTATUS'] != '2':
        # Unpack is disabled or was skipped due to nzb-file properties or due to errors during par-check

        for dirpath, dirnames, filenames in os.walk(os.environ['NZBPP_DIRECTORY']):
            for file in filenames:
                fileExtension = os.path.splitext(file)[1]

                if fileExtension in ['.par2']:
                    print "[INFO] Post-Process: Unpack skipped and par-check skipped (although par2-files exist), setting status \"failed\"g"
                    status = 1
                    break

        if os.path.isfile(os.path.join(os.environ['NZBPP_DIRECTORY'], "_brokenlog.txt")) and not status == 1:
            print "[INFO] Post-Process: _brokenlog.txt exists, download is probably damaged, exiting"
            status = 1

        if not status == 1:
            print "[INFO] Neither par2-files found, _brokenlog.txt doesn't exist, considering download successful"

    # Check if destination directory exists (important for reprocessing of history items)
    if not os.path.isdir(os.environ['NZBPP_DIRECTORY']):
        print "[INFO] Post-Process: Nothing to post-process: destination directory ", os.environ['NZBPP_DIRECTORY'], "doesn't exist"
        status = 1

    # All checks done, now launching the script.

    rd = False
    videos = 0
    old_name = None
    new_name = None
    for dirpath, dirnames, filenames in os.walk(os.environ['NZBPP_DIRECTORY']):
        for file in filenames:

            filePath = os.path.join(dirpath, file)
            fileName, fileExtension = os.path.splitext(file)
            dirname = os.path.dirname(filePath)

            if reverse_pattern.search(fileName) is not None:
                na_parts = season_pattern.search(fileName)
                if na_parts is not None:
                    word_p = word_pattern.findall(na_parts.group(2))
                    new_words = ""
                    for wp in word_p:
                        if wp[0] == ".":
                            new_words += "."
                        new_words += re.sub(r"\W","",wp)
                    for cr in char_replace:
                        new_words = re.sub(cr[0],cr[1],new_words)
                    new_filename = new_words[::-1] + na_parts.group(1)[::-1]
                else:
                    new_filename = fileName[::-1]
                print "[INFO] reversing filename from: ", fileName, " to ", new_filename
                try:
                    os.rename(filePath, os.path.join(dirpath, new_filename + fileExtension))
                    rd = True
                except Exception,e:
                    print "[INFO] " + str(e)
                    print "[INFO] Error: unable to rename file ", file
                    pass
            elif (fileExtension.lower() in media_extentions) and (garbage_name.search(fileName) is not None) and (media_pattern.search(os.path.basename(dirname)) is not None):
                videos += 1
                old_name = filePath
                new_name = os.path.join(dirname, os.path.basename(dirname) + fileExtension)

    if not rd and videos == 1 and old_name is not None and new_name is not None:
        print "[INFO] renaming the File " + os.path.basename(old_name) + " to the Dirname " + os.path.basename(os.path.dirname(new_name))
        try:
            os.rename(old_name, new_name)
            rd = True
        except Exception,e:
            print "[INFO] " + str(e)
            print "[INFO] Error unable to rename file ", old_name
            pass

    if rd:
        sys.exit(POSTPROCESS_SUCCESS)
    else:
        sys.exit(POSTPROCESS_NONE)

else:
    print "[ERROR] This script can only be called from NZBGet (11.0 or later)."
    sys.exit(0)
Titel: Re: extra script in NZBget toevoegen
Bericht door: Chris12 op 28 december 2014, 22:59:24
Ik heb het script nu in zn geheel gekopieerd als txt en deze in een new txt bestand geplakt, en de file opgeslagen als .py

Na uploaden en restarten van NZBget, config aanpassen bij PostScript, staat het nieuwe script er tussen!!
(https://www.synology-forum.nl/proxy.php?request=http%3A%2F%2Fi62.tinypic.com%2F246jkih.jpg&hash=a2d4c633e229094ea04442fcfbfb08c8842f8661) (http://i62.tinypic.com/246jkih.jpg)

De oude verkeerde file bevatte allemaal html/css jibba-jabba... vandaar de 80kb grootte.


Nu maar eens kijken of het script inderdaad werkt.


Titel: Re: extra script in NZBget toevoegen
Bericht door: Birdy op 29 december 2014, 00:03:28
mooi zo, we zien het wel dan.......
Titel: Re: extra script in NZBget toevoegen
Bericht door: GeddyLee op 29 december 2014, 09:09:37
Ik ben heel benieuwd Chris, bij mij doettie niets ..
Titel: Re: extra script in NZBget toevoegen
Bericht door: Ben(V) op 29 december 2014, 09:41:56
Het probleem zit hem in de eerste regel van je script.
Daar wordt aangegeven waar de python executable staat.
Als je python van de SynoCommunity gebruikt moet je die eerste vervangen door:
Code: (python) [Selecteer]
#!/volume1/@appstore/python/bin/python2

Mits je python op volume1(standaard) hebt geinstalleerd.
Titel: Re: extra script in NZBget toevoegen
Bericht door: GeddyLee op 29 december 2014, 11:35:08
Als ik dat verander in #!/volume2/@appstore/python/bin/python2 (hier staat python in mijn geval) dan krijg ik een melding dat deletesamples.py niet bestaat. Als ik het terug verander naar #!/usr/bin/env python2 (origineel) dan werkt deletesamples.

Flatten en Reverse_name doen nog steeds helemaal niets, niet met #!/volume2/@appstore/python/bin/python2 en ook niet met #!/usr/bin/env python2

Ik weet het niet meer  :o
Titel: Re: extra script in NZBget toevoegen
Bericht door: Birdy op 29 december 2014, 12:04:49
Het probleem zit hem in de eerste regel van je script.
Daar wordt aangegeven waar de python executable staat.
Als je python van de SynoCommunity gebruikt moet je die eerste vervangen door:
Code: (python) [Selecteer]
#!/volume1/@appstore/python/bin/python2

Mits je python op volume1(standaard) hebt geinstalleerd.

Let op: Ik weet niet waarom het script niet werkt maar wat ik wel vermoedt is dat de 1e regel ok is:
#!/usr/bin/env python
!/usr/bin/env = deze verwijst naar busybox
DS111> cd /usr/bin
DS111> ls -l env
lrwxrwxrwx    1 root     root            17 Dec 16 20:56 env -> ../../bin/busybox


DS111> /usr/bin/env
SSH_CLIENT=192.168.1.7 52512 22
MAIL=/var/mail/root
USER=root
OLDPWD=/root
TERMINFO=/usr/share/terminfo
HOME=/root
SSH_TTY=/dev/pts/1
PAGER=more
LOGNAME=root
TERM=xterm
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin
LANG=en_US.utf8
SHELL=/bin/ash
LC_ALL=en_US.utf8
PWD=/
SSH_CONNECTION=192.168.1.7 52512 192.168.1.22 22
PGDATA=/var/services/pgsql
TZ=CET-1CEST,M3.5.0,M10.5.0/3

python wordt verwezen naar de juiste versie:
DS111> python
Python 2.7.9 (default, Dec 12 2014, 07:14:32)
[GCC 4.6.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
Titel: Re: extra script in NZBget toevoegen
Bericht door: Ben(V) op 29 december 2014, 12:31:34
Code: (python) [Selecteer]
#!/usr/bin/env python

Werkt alleen maar als je daar een enviroment variable gedefinieerd hebt die dan ook daadwerkelijk naar de python van de SynoCommunity verwijst.
De installatie van de SynoCommunity doet dat niet, dus bij jou zal hij dan vermoeddelijk naar de python van Synology zelf verwijzen of je hebt op een andere manier daar een enviroment variable gedefinieerd.

Doe in de directory /usr/bin eens een ls -l python
dan zie je naar welke locatie die verwijst.

De meeste scripts werken niet met de Python versie van Synology zelf, die mist allerlei libraries.
Titel: Re: extra script in NZBget toevoegen
Bericht door: GeddyLee op 29 december 2014, 15:33:23
Zie bijlage .. zegt mij even niets  :o
Titel: Re: extra script in NZBget toevoegen
Bericht door: Ben(V) op 29 december 2014, 16:52:38
Dat is dus een vertaling van python naar python2.
En wat geeft ls -l python2
Titel: Re: extra script in NZBget toevoegen
Bericht door: GeddyLee op 29 december 2014, 19:32:25

/usr/bin$ ls -l python2
lrwxrwxrwx    1 root     root             9 Dec 16 21:41 python2 -> python2.7


zegt mij wederom niets, moet ik iets veranderen aan het flatten en rename script?
Titel: Re: extra script in NZBget toevoegen
Bericht door: Ben(V) op 29 december 2014, 19:46:53
Ja de eerste regel zoals ik al schreef
Titel: Re: extra script in NZBget toevoegen
Bericht door: GeddyLee op 29 december 2014, 20:07:33
Nu ben ik je even kwijt .. naar deze?  #!/volume2/@appstore/python/bin/python2  Dan werken de scripts niet, of bedoel je? #!/usr/bin/env python
Titel: Re: extra script in NZBget toevoegen
Bericht door: Ben(V) op 29 december 2014, 20:14:10
Die eerste, maar dan moet je wel python van de synocommunity hebben.
Die tweede werkt volgens mij met de python van Synology.
Titel: Re: extra script in NZBget toevoegen
Bericht door: GeddyLee op 29 december 2014, 20:46:23
Die heb ik erin staan: #!/volume2/@appstore/python/bin/python2


Python van Synocommunity heb ik, maar werken doen de scripts niet.
Titel: Re: extra script in NZBget toevoegen
Bericht door: Ben(V) op 29 december 2014, 21:00:15
Misschien zit het in het formaat van de file
Download Notepad++ eens.

http://notepad-plus-plus.org/download/v6.7.2.html

Je moet daarmee het script inlezen.
Kies de pulldown "Edit" en selecteer EOL conversion.
Als je dat gedaan hebt moet er bij de pulldown "Encoding" kiezen voor utf-8 without BOM

Als alles goed is zie je nu onderin de info balk "Unix" en "UTF-8 w/o Bom" staan.
Daarna kun je het script saven op je share.

Je kun ook even een klein test scriptje maken met Notepad++

Iets van:
Code: (python) [Selecteer]
#!/volume1/@appstore/python/bin/python2
print "Dit is een Test"

Als je dat saved op bijvoorbeeld de shar "video" op volume1 met de naam Test.py,
dan zou je die moeten kunnen aanroepen met:
Citaat
/volume1/video/Test.py



Titel: Re: extra script in NZBget toevoegen
Bericht door: GeddyLee op 29 december 2014, 21:33:57
Ook gedaan, het mag allemaal niet baten .. Om gek van te worden  :o
Titel: Re: extra script in NZBget toevoegen
Bericht door: Ben(V) op 29 december 2014, 21:37:38
Tja dan weet ik het ook even niet meer.
Kan het zelf niet uitproberen want ik gebruik geen nzb's.
Titel: Re: extra script in NZBget toevoegen
Bericht door: GeddyLee op 29 december 2014, 21:50:46
Test.py werkt wel .. Om het nog aparter te maken :)
Titel: Re: extra script in NZBget toevoegen
Bericht door: Ben(V) op 29 december 2014, 22:01:59
Ik zag in je flatten.py staan dat je volume2 gebruikt.
Heb je python van de SynoCommunity dan op volume2 geinstalleerd?

Plaats het hele script eens in een "code" venster of geef de locatie waar je hem vandaan hebt.
Kan ik er even naar kijken.

Je kunt dat flatten.py natuurlijk ook zo aanroepen om te zien of je script wel werkt.
Titel: Re: extra script in NZBget toevoegen
Bericht door: GeddyLee op 29 december 2014, 22:11:21
Ja, op volume2 installeer ik alles .. Dan heb ik het apart van mijn mediabestanden, vraag mij niet waarom  :)


Ik heb alle mogelijke paden naar python gehad, geen errors of wat dan ook is er langs gekomen. Ik zie ook niet terug dat flatten of reverse worden aangeroepen, deletesamples wordt aangeroepen en gooit eventuele samples keurig uit de download.



Code: (python) [Selecteer]
#!/usr/bin/env python
#
##############################################################################
### NZBGET POST-PROCESSING SCRIPT                                          ###


# Flatten all downloaded files into the root download directory.
#
# This removes all of the sub-folders created by the unpack process.
# This should run before other scripts.
#
# NOTE: This script requires Python to be installed on your system.
##############################################################################
### OPTIONS                                                                ###


# Destination Directory.
#
# Set the directory where you want all files to be moved to.
# Use this if you want all downloaded files in a single "root" directory.
# If left blank, files will all be "flattened" into the individual download's sub-directory.
#DestinationDirectory=


# Append Categories (yes, no).
#
# If using the Destination Directory above, then this option will append the download category.
#AppendCategories=no




### NZBGET POST-PROCESSING SCRIPT                                          ###
##############################################################################
import os
import sys
import shutil


# NZBGet Exit Codes
NZBGET_POSTPROCESS_PARCHECK = 92
NZBGET_POSTPROCESS_SUCCESS = 93
NZBGET_POSTPROCESS_ERROR = 94
NZBGET_POSTPROCESS_NONE = 95


if not os.environ.has_key('NZBOP_SCRIPTDIR'):
    print "This script can only be called from NZBGet (11.0 or later)."
    sys.exit(0)


if os.environ['NZBOP_VERSION'][0:5] < '11.0':
    print "[ERROR] NZBGet Version %s is not supported. Please update NZBGet." % (str(os.environ['NZBOP_VERSION']))
    sys.exit(0)


print "Script triggered from NZBGet Version %s." % (str(os.environ['NZBOP_VERSION']))
status = 0
if os.environ.has_key('NZBPP_TOTALSTATUS'):
    if not os.environ['NZBPP_TOTALSTATUS'] == 'SUCCESS':
        print "[ERROR] Download failed with status %s." % (os.environ['NZBPP_STATUS'])
        status = 1


else:
    # Check par status
    if os.environ['NZBPP_PARSTATUS'] == '1' or os.environ['NZBPP_PARSTATUS'] == '4':
        print "[ERROR] Par-repair failed, setting status \"failed\"."
        status = 1


    # Check unpack status
    if os.environ['NZBPP_UNPACKSTATUS'] == '1':
        print "[ERROR] Unpack failed, setting status \"failed\"."
        status = 1


    if os.environ['NZBPP_UNPACKSTATUS'] == '0' and os.environ['NZBPP_PARSTATUS'] == '0':
        # Unpack was skipped due to nzb-file properties or due to errors during par-check


        if os.environ['NZBPP_HEALTH'] < 1000:
            print "[ERROR] Download health is compromised and Par-check/repair disabled or no .par2 files found. Setting status \"failed\"."
            print "[ERROR] Please check your Par-check/repair settings for future downloads."
            status = 1


        else:
            print "[ERROR] Par-check/repair disabled or no .par2 files found, and Unpack not required. Health is ok so handle as though download successful."
            print "[WARNING] Please check your Par-check/repair settings for future downloads."


# Check if destination directory exists (important for reprocessing of history items)
if not os.path.isdir(os.environ['NZBPP_DIRECTORY']):
    print "[ERROR] Nothing to post-process: destination directory", os.environ['NZBPP_DIRECTORY'], "doesn't exist. Setting status \"failed\"."
    status = 1


# All checks done, now launching the script.
if status == 1:
    sys.exit(NZBGET_POSTPROCESS_NONE)


def removeEmptyFolders(path, removeRoot=True):
    #Function to remove empty folders
    if not os.path.isdir(path):
        return


    # remove empty subfolders
    print "[INFO] Checking for empty folders in:%s" % path
    files = os.listdir(path)
    if len(files):
        for f in files:
            fullpath = os.path.join(path, f)
            if os.path.isdir(fullpath):
                removeEmptyFolders(fullpath)


    # if folder empty, delete it
    files = os.listdir(path)
    if len(files) == 0 and removeRoot:
        print "[INFO] Removing empty folder:%s" % path
        os.rmdir(path)


directory = os.path.normpath(os.environ['NZBPP_DIRECTORY'])
if os.environ['NZBPO_DESTINATIONDIRECTORY'] and os.path.isdir(os.environ['NZBPO_DESTINATIONDIRECTORY']):
    destination = os.environ['NZBPO_DESTINATIONDIRECTORY']
    if os.environ['NZBPO_APPENDCATEGORIES'] == 'yes':
        destination = os.path.join(destination, os.environ['NZBPP_CATEGORY'])
else:
    destination = directory
print "Flattening directory: %s" % (directory)
for dirpath, dirnames, filenames in os.walk(directory):
    for fileName in filenames:
        outputFile = os.path.join(dirpath, fileName)
        if dirpath == directory:
            continue
        target = os.path.join(destination, fileName)
        try:
            shutil.move(outputFile, target)
        except:
            print "[ERROR] Could not flatten %s" % outputFile
removeEmptyFolders(directory)  # Cleanup empty directories
sys.exit(NZBGET_POSTPROCESS_SUCCESS)
Titel: Re: extra script in NZBget toevoegen
Bericht door: Ben(V) op 29 december 2014, 22:16:10
Zal er morgen even naar kijken.
Moet nu even wat anders doen.
Titel: Re: extra script in NZBget toevoegen
Bericht door: GeddyLee op 29 december 2014, 22:19:01
Beter?


Als ik flatten aanroep krijg ik: /usr/local/nzbget/share/nzbget/scripts/nzbToMedia$ /usr/local/nzbget/share/nzbget/scripts/nzbToMedia/flatten.py
This script can only be called from NZBGet (11.0 or later).
Titel: Re: extra script in NZBget toevoegen
Bericht door: Ben(V) op 30 december 2014, 09:41:48
Dat bewijst in ieder geval dat het script gewoon wil draaien.
Dat is namelijk de eerste test die hij doet.

Ik zal nu eens even naar dat script kijken en eventueel aanpassen zodat al die meldingen die naar het scherm gaan eens naar een logfile geschreven woirdt, dan kun je tenminste zien wat er gebeurd.
Titel: Re: extra script in NZBget toevoegen
Bericht door: Ben(V) op 30 december 2014, 12:38:02
Inmiddels weer wat te weten gekomen.

Het NZBet package bevat ook een python distributie en wel python 2.7.9
Dus die eerste regel in het python script (#!/usr/bin/env python) zal goed werken.
Hij gebruikt dan de distributie versie die met NZBget meekomt.

Die eerste regel is geen python code maar onder Linux wordt zo'n .py bestandje behandelt alsof het een script is en die eerste regel start dan python op en python voert dan de python code uit.

Wel is het van belang om het bestand met Notepad++ te saven als utf-8 w/o BOM en EOL conversion UNIX/OSX format.
Voor Python maakt dat niet uit maar voor Linux wel want die snapt dan niets van het script.

Verder kan ik niets verkeerts vinden in dat flatten.py script.

Ik heb misschien wel je probleem gevonden.
In NZBget zelf moet je in "Settings"  ook nog per catagorie aangeven welk postprocess script je voor die catagorie aanroept. Als je dat niet gedaan hebt wordt het script nooit aangeroepen.
Titel: Re: extra script in NZBget toevoegen
Bericht door: darryl12123 op 31 december 2014, 08:32:31
Misschien een domme vraag, maar kan het nergens vinden, maar hoe komen jullie in die ScriptDir map? Jullie gebruiken daarvoor zeker een programmaatje? Welke is dat?


Thanks!
Titel: Re: extra script in NZBget toevoegen
Bericht door: GeddyLee op 31 december 2014, 09:54:23
@darryl12123 Nee hoor, is geen domme vraag. Ik gebruik winscp.


http://winscp.net/eng/docs/lang:nl  Inloggen met root en je DS wachtwoord als winscp verbinding maakt met je DS.


@Ben, dat was het! Werkt!  :P  tot op zekere hoogte, kun jij DeleteSamples zodanig aanpassen dat alle bestanden van een bepaalde grootte worden verwijdert? Dat gebeurt nu alleen als het om onderstaande bestanden gaat maar ik wil dat alles verwijdert wordt:
.mkv,.avi,.divx,.xvid,.mov,.wmv,.mp4,.mpg,.mpeg,.vob,.iso


NZBGet heeft zelf ook een "cleanup" functie, maar die doet niets met submappen, helaas ..
Titel: Re: extra script in NZBget toevoegen
Bericht door: Ben(V) op 31 december 2014, 11:12:54
Volgens mij kun je dit bereiken door ".*" op te geven als extensie die verwijdert moet worden.
Kun je volgens mij alle andere weggooien.
Titel: Re: extra script in NZBget toevoegen
Bericht door: GeddyLee op 31 december 2014, 11:20:45
Bedoel je onder MediaExtensions? of ergens in het script zelf?


Titel: Re: extra script in NZBget toevoegen
Bericht door: Ben(V) op 31 december 2014, 11:25:41
Gewoon onder media extensions in NZBget.
Wildcard(.* of anders *.*) doet volgens mij alles.
Als het niet zo werkt zal ik nog wel even in het script duiken, maar aan de code te zien moet het gewoon zo werken.
Titel: Re: extra script in NZBget toevoegen
Bericht door: GeddyLee op 31 december 2014, 11:41:40
.* of *.* doen niets, mediaextensions kijkt (imho) of het woord sample in de opgegeven extensie zit:


Media Extensions This is a list of media extensions that may be deleted if a Sample_id is in the filename.


Binnen het script herken in niet waar je dit zou kunnen veranderen zodat alles gedelete wordt behalve bestanden groter dan (bijvoorbeeld) 200MB, het is geheimtaal voor mij  :o
Titel: Re: extra script in NZBget toevoegen
Bericht door: Ben(V) op 31 december 2014, 12:05:29
Je moet in het veld SampleIds alleen het woord "SizeOnly" invullen.
Titel: Re: extra script in NZBget toevoegen
Bericht door: GeddyLee op 31 december 2014, 12:11:09
Heb ik ook ..
Titel: Re: extra script in NZBget toevoegen
Bericht door: Ben(V) op 31 december 2014, 12:22:14
Sorry zie het al, gaat niet met een wildcard.

Je moet even een stukje code veranderen.
Dit stukje:
Code: (python) [Selecteer]
for dirpath, dirnames, filenames in os.walk(os.environ['NZBPP_DIRECTORY']):
    for file in filenames:
        filePath = os.path.join(dirpath, file)
        fileName, fileExtension = os.path.splitext(file)
        if fileExtension in mediaContainer:  # If the file is a video file
            if is_sample(filePath, os.environ['NZBPP_NZBNAME'], os.environ['NZBPO_MAXSAMPLESIZE'], SampleIDs):  # Ignore samples
                print "Deleting sample file: ", filePath
                try:
                    os.unlink(filePath)
                except:
                    print "Error: unable to delete file", filePath
                    sys.exit(NZBGET_POSTPROCESS_ERROR)

Moet je vervangen door:

Code: (python) [Selecteer]
for dirpath, dirnames, filenames in os.walk(os.environ['NZBPP_DIRECTORY']):
    for file in filenames:
        filePath = os.path.join(dirpath, file)
        fileName, fileExtension = os.path.splitext(file)
        if is_sample(filePath, os.environ['NZBPP_NZBNAME'], os.environ['NZBPO_MAXSAMPLESIZE'], SampleIDs):  # Ignore samples
            print "Deleting sample file: ", filePath
            try:
                os.unlink(filePath)
            except:
                print "Error: unable to delete file", filePath
                sys.exit(NZBGET_POSTPROCESS_ERROR)

Eigenlijk haal je de regel eruit die op die extensions checked zijnde:
Code: (python) [Selecteer]
if fileExtension in mediaContainer:  # If the file is a video file


Als alternatief zou je die regel kunnen veranderen in:
Code: (python) [Selecteer]
if fileExtension in mediaContainer or ".*" in mediaContainer :  # If the file is a video file

In het eerste geval kijkt hij nooit meer naar de extensie van het bestand en in het tweede geval kijkt hij er niet meer naar als er .* in NZBget is opgegeven.
Titel: Re: extra script in NZBget toevoegen
Bericht door: GeddyLee op 31 december 2014, 14:16:47
Werkt! Heel hartelijk dank!


Krijg wel een error maar het werkt zoals ik voor ogen had:
Post-process-script DeleteSamples.py for ........... S05E02 XViD DD51 NLSubs -Q o Q 16- failed (terminated with unknown status)
Titel: Re: extra script in NZBget toevoegen
Bericht door: Ben(V) op 31 december 2014, 15:18:09
Blij dat het werkt.
Je hebt vermoeddelijk de laatste regel van het script ook weggelaten.
Die had eigenlijk moeten blijven staan.
Deze dus.

Code: (python) [Selecteer]
sys.exit(NZBGET_POSTPROCESS_SUCCESS)
Titel: Re: extra script in NZBget toevoegen
Bericht door: GeddyLee op 31 december 2014, 15:45:09
Klopt! dus aangepast en nu krijg ik onderstaande te zien:


Post-process-script DeleteSamples.py for .. S05E02 XViD DD51 NLSubs -Q o Q 20- failed (terminated with unknown status)
[/size]DeleteSamples: NameError: name 'NZBGET_POSTPROCESS_SUCCESS' is not defined[/color]
[/size]DeleteSamples: sys.exit(NZBGET_POSTPROCESS_SUCCESS)[/color]
[/size]DeleteSamples: File "/usr/local/nzbget/share/nzbget/scripts/nzbToMedia/DeleteSamples.py", line 110, in <module>[/color]
[/size]DeleteSamples: Traceback (most recent call last):[/color]
Titel: Re: extra script in NZBget toevoegen
Bericht door: Ben(V) op 31 december 2014, 16:52:15
Je zult wel een foutje met het editen gemaakt hebben.
Hier heb je het hele script inclusief de aanpassing.
Deze verlangt wel dat je .* opgeeft.

Code: (python) [Selecteer]
#!/usr/bin/env python
#
##############################################################################
### NZBGET POST-PROCESSING SCRIPT                                          ###

# Delete ".sample" files.
#
# This script removed sample files from the download directory.
#
# NOTE: This script requires Python to be installed on your system.

##############################################################################
### OPTIONS                                                                ###

# Media Extensions
#
# This is a list of media extensions that may be deleted if a Sample_id is in the filename.
#mediaExtensions=.mkv,.avi,.divx,.xvid,.mov,.wmv,.mp4,.mpg,.mpeg,.vob,.iso

# maxSampleSize
#
# This is the maximum size (in MiB) to be be considered as sample file.
#maxSampleSize=200

# SampleIDs
#
# This is a list of identifiers used for samples. e.g sample,-s. Use 'SizeOnly' to delete all media files less than maxSampleSize.
#SampleIDs=sample,-s.

### NZBGET POST-PROCESSING SCRIPT                                          ###
##############################################################################
import os
import sys

# NZBGet Exit Codes
NZBGET_POSTPROCESS_PARCHECK = 92
NZBGET_POSTPROCESS_SUCCESS = 93
NZBGET_POSTPROCESS_ERROR = 94
NZBGET_POSTPROCESS_NONE = 95

def is_sample(filePath, inputName, maxSampleSize, SampleIDs):
    # 200 MB in bytes
    SIZE_CUTOFF = int(maxSampleSize) * 1024 * 1024
    if os.path.getsize(filePath) < SIZE_CUTOFF:
        if 'SizeOnly' in SampleIDs:
            return True
        # Ignore 'sample' in files unless 'sample' in Torrent Name
        for ident in SampleIDs:
            if ident.lower() in filePath.lower() and not ident.lower() in inputName.lower():
                return True
    # Return False if none of these were met.
    return False
 
if not os.environ.has_key('NZBOP_SCRIPTDIR'):
    print "This script can only be called from NZBGet (11.0 or later)."
    sys.exit(0)

if os.environ['NZBOP_VERSION'][0:5] < '11.0':
    print "NZBGet Version %s is not supported. Please update NZBGet." % (str(os.environ['NZBOP_VERSION']))
    sys.exit(0)

print "Script triggered from NZBGet Version %s." % (str(os.environ['NZBOP_VERSION']))
status = 0
if os.environ.has_key('NZBPP_TOTALSTATUS'):
    if not os.environ['NZBPP_TOTALSTATUS'] == 'SUCCESS':
        print "Download failed with status %s." % (os.environ['NZBPP_STATUS'])
        status = 1

else:
    # Check par status
    if os.environ['NZBPP_PARSTATUS'] == '1' or os.environ['NZBPP_PARSTATUS'] == '4':
        print "Par-repair failed, setting status \"failed\"."
        status = 1

    # Check unpack status
    if os.environ['NZBPP_UNPACKSTATUS'] == '1':
        print "Unpack failed, setting status \"failed\"."
        status = 1

    if os.environ['NZBPP_UNPACKSTATUS'] == '0' and os.environ['NZBPP_PARSTATUS'] == '0':
        # Unpack was skipped due to nzb-file properties or due to errors during par-check

        if os.environ['NZBPP_HEALTH'] < 1000:
            print "Download health is compromised and Par-check/repair disabled or no .par2 files found. Setting status \"failed\"."
            print "Please check your Par-check/repair settings for future downloads."
            status = 1

        else:
            print "Par-check/repair disabled or no .par2 files found, and Unpack not required. Health is ok so handle as though download successful."
            print "Please check your Par-check/repair settings for future downloads."

# Check if destination directory exists (important for reprocessing of history items)
if not os.path.isdir(os.environ['NZBPP_DIRECTORY']):
    print "Nothing to post-process: destination directory", os.environ['NZBPP_DIRECTORY'], "doesn't exist. Setting status \"failed\"."
    status = 1

# All checks done, now launching the script.
if status == 1:
    sys.exit(NZBGET_POSTPROCESS_NONE)

mediaContainer = os.environ['NZBPO_MEDIAEXTENSIONS'].split(',')
SampleIDs = os.environ['NZBPO_SAMPLEIDS'].split(',')
for dirpath, dirnames, filenames in os.walk(os.environ['NZBPP_DIRECTORY']):
    for file in filenames:
        filePath = os.path.join(dirpath, file)
        fileName, fileExtension = os.path.splitext(file)
        if fileExtension in mediaContainer or ".*" in mediaContainer :  # If the file is a video file
            if is_sample(filePath, os.environ['NZBPP_NZBNAME'], os.environ['NZBPO_MAXSAMPLESIZE'], SampleIDs):  # Ignore samples
                print "Deleting sample file: ", filePath
                try:
                    os.unlink(filePath)
                except:
                    print "Error: unable to delete file", filePath
                    sys.exit(NZBGET_POSTPROCESS_ERROR)
sys.exit(NZBGET_POSTPROCESS_SUCCESS)
Titel: Re: extra script in NZBget toevoegen
Bericht door: GeddyLee op 01 januari 2015, 08:10:44
Ja inderdaad, het werkt nu zonder enige foutmelding. Nogmaals heel erg bedankt!
Titel: Re: extra script in NZBget toevoegen
Bericht door: Moppersmurf op 13 maart 2018, 17:34:16
Misschien toch wel handig het hier te vermelden, ook als is dit topic oud.
Het is me gelukt om reverse_name.py aan de praat te krijgen:

   Tue Mar 13 2018 16:51:43   Collection 99UrrRENNVM2WXtY added to history
INFO   Tue Mar 13 2018 16:51:43   Post-process-script reverse_name.py for 99UrrRENNVM2WXtY successful
INFO   Tue Mar 13 2018 16:51:43   reverse_name: reversing filename from: buS-LN.LIATER.462.H.1.5PDD.LD-BEW.NZMA.p0801.gniS.daehniP.teL.71E30S.reficuL to Lucifer.S03E17.Let.Pinhead.Sing.1080p.AMZN.WEB-DL.DDP5.1.H.264.RETAIL.NL-Sub
INFO   Tue Mar 13 2018 16:51:43   reverse_name: Script triggered from NZBGet (11.0 or later).
INFO   Tue Mar 13 2018 16:51:42   Executing post-process-script reverse_name.py for 99UrrRENNVM2WXtY
INFO   Tue Mar 13 2018 16:51:42   Move for 99UrrRENNVM2WXtY successful
INFO   Tue Mar 13 2018 16:51:42   Moving completed files for 99UrrRENNVM2WXtY
INFO   Tue Mar 13 2018 16:51:42   Cleanup for 99UrrRENNVM2WXtY successful
INFO   Tue Mar 13 2018 16:51:42   Deleting file 99UrrRENNVM2WXtY.vol001+001.par2
INFO   Tue Mar 13 2018 16:51:42   Cleaning up 99UrrRENNVM2WXtY

Had bovenstaande tips uitgevoerd: verplaatsen scripts. 755 rechten, aanpassen 1e regel script vanwege synocommunity, script toevoegen aan extension scripts en categories.
Vervolgens werkte het maar niet.
Nu bij scripts en categories GetScripts/flatten.py, reverse_name.py gezet en het werkt perfect.
Ben er blij mee, scheelt weer hoop werk met reverse filenamen.