Mittels Python-Code am XMPP-Server anmelden und eine Nachricht versenden

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
U32
User
Beiträge: 20
Registriert: Sonntag 6. Oktober 2019, 13:34

Freitag 14. Mai 2021, 19:46

Hallo liebe Python-Freunde!

Ich würde mir gerne mit Hilfe eines Python-Scriptes Statusmeldungen auf meinen XMPP-Client auf meinem Handy schicken lassen.
Dazu habe ich folgendes Script geschrieben:

Code: Alles auswählen

#!/usr/bin/python3
# -*- coding: utf-8 -*-

# Import Bibliotheken
import sys
import os
import time
import xmpp

# Variablen initialisieren
Timestamp = time.strftime("%Y-%m-%d %H:%M:%S")
Server = 'blabber.im'
Port = 5222
msg = 'Hallo Welt!'

# Authentifizierung
username = 'Sende-Account@blabber.im'
passwd = 'VollDasGeheimePasswort'

# Ziel
to='Empfangs-Account@blabber.im'

# Verbindung herstellen
xmpp.protocol.JID(username)
client = xmpp.Client(Server, Port, debug=[])

try:
    conn = client.connect()
    print ('Connecting...')
    
except:
    print ('Connection failed')
    pass

print ('Connected.')
client.sendInitPresence(0)

# Anmelden
try:
    login = client.auth(username, passwd)
    print ('Login successfull.')
    
    # Nachrichtenversand
    print (Timestamp)
    
    message = xmpp.Message(to, msg)
    message.setAttr('type', 'chat')
    print (message)
    client.send(message)

except:
    print ('Authentication failed')
    try:
        conn = client.disconnect()
        print ('Disconnected.')
        
    except:
        print ('Connection still active!')
        pass


print ('End.')
Das Script scheint auch fast zu funktionieren. Fast im Sinne von, es kommt keine Fehlermeldung. Ich bekomme folgenden Output:

Code: Alles auswählen

=================== RESTART: /home/pi/XMPP-Message V1.9.py ===================
Connecting...
Connected.
Authentication failed
Disconnected.
End.
>>>  
Leider scheine ich dabei ein Problem mit der Anmeldung zu haben.
Die Verbindung zum Server scheine ich wohl noch hinzubekommen, aber beim Login nimmt das Programm dann immer den Weg "authentication failed"
Kann mir jemand von euch sagen, was ich falsch mache? Ich finde den Fehler einfach nicht.

Vielen Dank im Voraus und beste Grüße
U32
__deets__
User
Beiträge: 10052
Registriert: Mittwoch 14. Oktober 2015, 14:29

Freitag 14. Mai 2021, 20:06

Solche nackten try/except macht man nicht, weil sie alle moeglichen Fehler verschleiern. Du *denkst* du hast ein Authentication Problem. Es koennte auch ein NameError oder IndexError sein. Weiss man nicht. Schmeiss die also mal alle raus, und dann schau mal, was *wirklich* passiert.
U32
User
Beiträge: 20
Registriert: Sonntag 6. Oktober 2019, 13:34

Freitag 14. Mai 2021, 20:18

Hallo __deets__ !

Vielen Dank für die schnelle Antwort.
Ich probiere es gleich mal aus.
U32
User
Beiträge: 20
Registriert: Sonntag 6. Oktober 2019, 13:34

Samstag 15. Mai 2021, 14:05

So... Moin!

Hab den try/except Kram also nun entfernt.
Code sieht nun so aus:

Code: Alles auswählen

#!/usr/bin/python3
# -*- coding: utf-8 -*-

# Import Bibliotheken
import sys
import os
import time
import xmpp

# Variablen initialisieren
Timestamp = time.strftime("%Y-%m-%d %H:%M:%S")
Server = 'blabber.im'
Port = 5222
msg = 'Hallo Welt!'

# Authentifizierung
username = 'Sende-Account@blabber.im'
passwd = 'VollDasGeheimePasswort'

# Ziel
to='Empfangs-Account@blabber.im'

# Verbindung herstellen
xmpp.protocol.JID(username)
client = xmpp.Client(Server, Port, debug=[])
conn = client.connect()
client.sendInitPresence(0)

# Anmelden
login = client.auth(username, passwd)

# Nachrichtenversand
print (Timestamp)
message = xmpp.Message(to, msg)
message.setAttr('type', 'chat')
print (message)
client.send(message)
conn = client.disconnect()
print ('End.')

Und dieser Code liefert dann diesen Output:

Code: Alles auswählen

================== RESTART: /home/pi/XMPP-Message V1.10.py ==================
Traceback (most recent call last):
  File "/home/pi/XMPP-Message V1.10.py", line 31, in <module>
    login = client.auth(username, passwd)
  File "/usr/local/lib/python3.7/dist-packages/xmpp/client.py", line 217, in auth
    while not self.Dispatcher.Stream._document_attrs and self.Process(1): pass
  File "/usr/local/lib/python3.7/dist-packages/xmpp/dispatcher.py", line 126, in Process
    raise _pendingException[0](_pendingException[1]).with_traceback(_pendingException[2])
  File "/usr/local/lib/python3.7/dist-packages/xmpp/dispatcher.py", line 304, in dispatch
    handler['func'](session,stanza)
  File "/usr/local/lib/python3.7/dist-packages/xmpp/dispatcher.py", line 216, in streamErrorHandler
    raise exc((name,text))
xmpp.protocol.NotAuthorized: ('not-authorized', '')
>>> 
Ich bin - zugegeben - jetzt nicht wirklich schlauer. Kannst du die Fehlermeldung genauer interpretieren?

Vielen Dank und beste Grüße
U32
Benutzeravatar
__blackjack__
User
Beiträge: 8823
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Samstag 15. Mai 2021, 14:19

@U32: Welche Bibliothek hast Du denn da installiert und was sagt die Dokumentation zu der `login()`-Methode?
Q: What is the volume of a pizza of radius z and thickness a?
A: pi·z·z·a
U32
User
Beiträge: 20
Registriert: Sonntag 6. Oktober 2019, 13:34

Samstag 15. Mai 2021, 18:51

@__blackjack__ :
Die Lib heißt XMPP und eine Dokumentation dazu habe ich leider nicht. :oops:
Benutzeravatar
__blackjack__
User
Beiträge: 8823
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Samstag 15. Mai 2021, 19:33

@U32: Wo hast Du die Bibliothek denn her?
Q: What is the volume of a pizza of radius z and thickness a?
A: pi·z·z·a
U32
User
Beiträge: 20
Registriert: Sonntag 6. Oktober 2019, 13:34

Samstag 15. Mai 2021, 21:08

@__blackjack__

sudo apt-get install xmpp
Benutzeravatar
sparrow
User
Beiträge: 2739
Registriert: Freitag 17. April 2009, 10:28

Samstag 15. Mai 2021, 21:20

@U32: Dann musst du herausfinden, welche Bibliothek sich dahinter verbirgt und deren Dokumentation lesen. Wie willst du denn sonst mit dem Modul arbeiten?
U32
User
Beiträge: 20
Registriert: Sonntag 6. Oktober 2019, 13:34

Sonntag 16. Mai 2021, 10:46

Moin!
OK, dann muss ich mich wohl auf die Suche machen...
Hat denn jemand von euch grundsätzliche Erfahrung mit dem versenden von XMPP-Nachricht aus einem Script heraus?
Ich meine könnte es sein, das Anbieter das scriptgesteuerte Versenden von Nachrichten unterbinden (es nur über über die entsprechenden Clients möglich ist) ?
Danke und Gruß
U32
__deets__
User
Beiträge: 10052
Registriert: Mittwoch 14. Oktober 2015, 14:29

Sonntag 16. Mai 2021, 11:04

Woran unterscheiden die das? Ein Skript ist auch nur ein Client.
U32
User
Beiträge: 20
Registriert: Sonntag 6. Oktober 2019, 13:34

Sonntag 16. Mai 2021, 11:46

Ähnlich wie die Übermittlung welcher Web-Browser beim Besuch einer Website verwendet wird.
U32
User
Beiträge: 20
Registriert: Sonntag 6. Oktober 2019, 13:34

Sonntag 16. Mai 2021, 11:51

Ich möchte nur ausschließen, dass ich ein grundsätzliches Problem habe.
Deshalb hatte ich gefragt, ob es hier im Forum jemanden gibt, der schon mal eine XMPP-Nachricht aus einem Script heraus an einen anderen Client gesendet hat.
rogerb
User
Beiträge: 223
Registriert: Dienstag 26. November 2019, 23:24

Sonntag 16. Mai 2021, 14:23

Hallo U32,

vorweg: Ich hab leider keine Erfahrung mit XMPP-Servern. Aber vielleicht hilft das ein wenig:

Es scheint, als würdest du das xmpppy package verwenden. - Reine Vermutung, denn dein Code sieht dem Beispielcode dort sehr ähnlich:
https://pypi.org/project/xmpppy/

Dort wird die Authentifizierung so gemacht:

Code: Alles auswählen

connection.auth(user=jid.getNode(), password=password, resource=jid.getResource())
Es scheint auch als währe das ein Raspberry Pi Projekt. Falls du das nach einem Tutorial oder sonstigen Anleitung machst, währe es hilfreich hier einen Link darauf zu posten. Dann hätte man schonmal einiges mehr an Information.

Ich gehe mal davon aus, dass es den User
'Sende-Account@blabber.im'

mit dem Passwort
'VollDasGeheimePasswort'

auf dem Server auch wirklich gibt....
Antworten