TT-RSS, Ordnerstruktur

Probleme bei der Installation?
Lyreco
User
Beiträge: 17
Registriert: Donnerstag 12. Januar 2017, 09:57

Der Cronjob scheint nicht richtig zu funktionieren, irgendwie wird die checkerfeed.xml nicht automatisch aktualisiert...
Könnte mir da nochmals jmd. helfen? :)
Lyreco
User
Beiträge: 17
Registriert: Donnerstag 12. Januar 2017, 09:57

Bei Änderungen würde ich mir gerne eine Mail schicken lassen, dazu hab ich folgendes in der config.py geändert:

sender = 'meinbenutzername@elnath.uberspace.de'
smtphost = 'elnath.uberspace.de'
useTLS = True
smtpport = 587
smtpusername = sender
smtppwd = 'meinmailpasswort'
receiver = 'meineprivatemailadresse'

ich bekomme aber folgende fehlermeldung:

Traceback (most recent call last):
File "/home/meinbenutzername/checker/mwc.py", line 347, in <module>
pollWebsites()
File "/home/meinbenutzername/checker/mwc.py", line 283, in pollWebsites
sendmail(receiver, subject, parseResult['warning'], False, None)
File "/home/meinbenutzername/checker/mwc.py", line 234, in sendmail
mailsession.sendmail(config.sender, receiver.split(','), mail.as_string())
AttributeError: 'tuple' object has no attribute 'split'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/home/meinbenutzername/checker/mwc.py", line 352, in <module>
sendmail(config.receiver, '[mwc] Something went wrong ...', msg, False, None)
File "/home/meinbenutzername/checker/mwc.py", line 234, in sendmail
mailsession.sendmail(config.sender, receiver.split(','), mail.as_string())
AttributeError: 'tuple' object has no attribute 'split'
BlackJack

@Lyreco: Entweder hast Du für die „site“ einen anderen 'receiver' definiert, und das halt falsch, weil das ein Tupel ist, oder die gezeigte ``receiver = ``-Zeile sieht anders aus.
Lyreco
User
Beiträge: 17
Registriert: Donnerstag 12. Januar 2017, 09:57

BlackJack hat geschrieben:@Lyreco: Entweder hast Du für die „site“ einen anderen 'receiver' definiert, und das halt falsch, weil das ein Tupel ist, oder die gezeigte ``receiver = ``-Zeile sieht anders aus.
gibts eine möglichkeit einen tupel zu verwenden, also mehrere mail adressen anzugeben?
BlackJack

@Lyreco: Nein, es gibt keine Möglichkeit ein Tupel anzugeben. Ja, es gibt die Möglichkeit mehrere Empfänger anzugeben. Schau doch noch mal welche Operation auf dem Tupel nicht funktioniert und überleg mal was das für eine Zeichenkette an der Stelle bedeutet.
Lyreco
User
Beiträge: 17
Registriert: Donnerstag 12. Januar 2017, 09:57

Habs mit folgendem probiert...

receiver = 'mail1@mail.de mail2@mail.de'.split()
bzw.
receiver = 'mail1@mail.de,mail2@mail.de'.split(,)

funktioniert aber beides nicht...
BlackJack

@Lyreco: Natürlich nicht. Das erste produziert eine Liste, was genau so wenig eine `split()`-Methode hat wie ein Tupel, und das zweite ist syntaktisch falsch. Du gibst da einen Wert an bei dem das *Programm* später ein ``split(',')`` anwenden wird!
Lyreco
User
Beiträge: 17
Registriert: Donnerstag 12. Januar 2017, 09:57

Okay, macht Sinn.
Ich bin blutiger "Anfänger" und benötige Python auch erstmal nur für dieses eine Vorhaben, daher wäre ich über konkrete Vorschläge sehr dankbar :wink:

Wäre super, wenn du mir sagen könntest wie es richtig funktioniert :)
Lyreco
User
Beiträge: 17
Registriert: Donnerstag 12. Januar 2017, 09:57

Wenn ich einfach schreibe

receiver = 'mail1@mail.de;mail2@mail.de'

krieg ich die benachrichtigungen auf die erste mail adresse und sehe dort auch, dass die nachricht ebenfalls an mail2@mail.de verschickt wurde. die mail trifft aber leider nicht im postfach von mail2 ein...?
BlackJack

@Lyreco: Warum jetzt plötzlich ein ';' statt eines ',' als Trenner?
Lyreco
User
Beiträge: 17
Registriert: Donnerstag 12. Januar 2017, 09:57

Habs *schähm*

Danke ;)
Lyreco
User
Beiträge: 17
Registriert: Donnerstag 12. Januar 2017, 09:57

Ich kriege bei zwei Feeds immer wieder, aber unregelmäßig folgende Meldung:

WARNING: could not open URL; maybe content was moved?

<urlopen error [Errno -3] Temporary failure in name resolution>

Die Seiten sind manuell ohne Probleme abrufbar.
Wieso, bzw. wieso unregelmäßig und wie kann ich den Fehler beheben?
BlackJack

@Lyreco: Entweder gibt es bei Dir Probleme mit der Namensauflösung oder irgendwo im Netz. Bei Dir könntest Du etwas dagegen tun in dem Du die Ursache findest und beseitigst. Im Netz eher nicht. Das ist letztendlich eine Netzwerkfrage und keine Python-Frage.
Lyreco
User
Beiträge: 17
Registriert: Donnerstag 12. Januar 2017, 09:57

Ich konnte das Problem leider nicht lösen...
Es gibt zwei Feeds bei denen unregelmäßig der Error "WARNING: could not open URL; maybe content was moved? <urlopen error [Errno -3] Temporary failure in name resolution>" erscheint.

Nervig daran ist, dass ich jedes mal eine Mail bekomme, da ich mir Updates (der Feeds) bei Mail zuschicken lasse.
Gibts vllt. eine Möglichkeit das Skript so anzupassen, dass mir nur die Updates der Feeds, die Fehlermeldungen jedoch nicht zugeschickt werden?


Hier mal ein Auszug des Skripts, https://github.com/Debianguru/MailWebsi ... ter/mwc.py

Code: Alles auswählen

# sends mail notification
def sendmail(receiver, subject, content, sendAsHtml, link):
        global mailsession

        if sendAsHtml:
                baseurl = None
                if link != None:
                        content = '<p><a href="' + link + '">' + subject + '</a></p>\n' + content
                        baseurl = urljoin(link, '/')
                mail = MIMEText('<html><head><title>' + subject + '</title>' + ('<base href="' + baseurl + '">' if baseurl else '') + '</head><body>' + content + '</body></html>', 'html', defaultEncoding)
        else:
                if link != None:
                        content = link + '\n\n' + content
                mail = MIMEText(content, 'text', defaultEncoding)

        mail['From'] = config.sender
        mail['To'] = receiver
        mail['Subject'] = Header(subject, defaultEncoding)

        # initialize session once, not each time this method gets called
        if mailsession is None:
                mailsession = smtplib.SMTP(config.smtphost, config.smtpport)
                if config.useTLS:
                        mailsession.ehlo()
                        mailsession.starttls()
                if config.smtpusername is not None:
                    mailsession.login(config.smtpusername, config.smtppwd)

        mailsession.sendmail(config.sender, receiver.split(','), mail.as_string())
Die Fehlermeldung müsste doch der else Zweig sein

Code: Alles auswählen

        else:
                if link != None:
                        content = link + '\n\n' + content
                mail = MIMEText(content, 'text', defaultEncoding)
oder?

EDIT: Oder auch nicht:

Code: Alles auswählen

        # start polling sites
        for site in config.sites:

                print('polling site [' + site['shortname'] + '] ...')
                parseResult = parseSite(site)
                receiver = site.get('receiver', config.receiver)

                # if something went wrong, notify the user
                if parseResult['warning']:
                        subject = '[' + site['shortname'] + '] WARNING'
                        print('WARNING: ' + parseResult['warning'])
                        if config.enableMailNotifications:
                                sendmail(receiver, subject, parseResult['warning'], False, None)
                        if config.enableRSSFeed:
                                feedXML.xpath('//channel')[0].append(genFeedItem(subject, parseResult['warning'], site['uri'], 0))
                                
                                
                else:
                        # otherwise, check which parts of the site were updated
                        changes = 0
                        fileContents = getFileContents(site['shortname'])
                        i = 0
                        for content in parseResult['contents']:
                                if content not in fileContents:
                                        changes += 1

                                        subject = '[' + site['shortname'] + '] ' + parseResult['titles'][i]
                                        print('    ' + subject)
                                        if config.enableMailNotifications and len(fileContents) > 0:
                                                sendmail(receiver, subject, content, (site.get('type', 'html') == 'html'), site['uri'])

                                        if config.enableRSSFeed:
                                                feedXML.xpath('//channel')[0].append(genFeedItem(subject, content, site['uri'], changes))
                                i += 1


                        if changes > 0:
                                storeFileContents(site['shortname'], parseResult)
                                print('        ' + str(changes) + ' updates')
Wäre es möglich in die config.py eine zeile mit bspw. receivererror = admin@mail.de hinzuzufügen und die Zeile

Code: Alles auswählen

if config.enableMailNotifications and len(fileContents) > 0:
                                                sendmail(receiver, subject, content, (site.get('type', 'html') == 'html'), site['uri'])
in der mwc.py auf

Code: Alles auswählen

...sendmail(receivererror, subject...
abzuändern?

Dann würden nämlich alle normalen Benutzer die FeedUpdates per Mail erhalten und die Error Messages nur der Admin.
Ginge das?
Lyreco
User
Beiträge: 17
Registriert: Donnerstag 12. Januar 2017, 09:57

Es hat natürlich nicht geklappt, da ich 'receivererror' nicht definiert habe (NameError: name 'receivererror' is not defined), was natürlich klar ist.
Ich weiß aber nicht so genau an welcher Stelle ich receivererror defnieren kann und ob das so einfach möglich ist?!

EDIT:
Reicht die Ergänzung?
receivererror = site.get('receivererror', config.receivererror)
Antworten