Beiträge von mbod77

    Hallo Zusammen,


    Telegram mit Python
    Das Tolle am open Source ist das er offenen ist.
    Darum jetzt eine up-to-date Version, mit der neuen telegram-cli, zu finden unter http://flutterb.at/pytg2:

    Das Verfahren ist im groben ganzen das selbe wie vorher, nur müssen URLs und Pfade angepasst werden.

    hat sich denn mit dem genannten Paket schon jemand auseinander gesetzt?
    Leider scheint das noch etwas buggy zu sein.

    Nach einigem hin und her habe ich es zum laufen bekommen. Leider sind da meiner Meinung nach teilweise Fehler im Code.

    z.B. __init__.py:
    die whoami Methode ist nicht eingerückt und somit tut auch schon mal das pingpong Beispiel-Script nicht.

    Die Funktion load_photo benötigt im Code 2 Parameter def load_photo(self, peer, msg_id): Wenn man die Funktion aber direkt im telegram-cli aufruft wird nur die msg_id benötigt.
    Nach dem ich die Funktion in

    Code
    # load_photo <msg-id>     Downloads file to downloads dirs. Prints file name after download end
    def load_photo(self, peer, msg_id):
    		"""
    		Downloads file to downloads dirs.
    		"""
    		self.tgin.write(' '.join(['load_photo',  msg_id,'\n']))
    		self.tgin.flush()

    geändert habe, kann ich auch gesendete Bilder auf dem Raspi speichern.
    Leider wir nicht wie im Kommentar beschrieben der filename ausgegeben.

    Die Dateien werden unter ~/.telegram-cli/downloads mit recht kryptischen Namen und ohne Dateierweiterung abgelegt.

    Vielleicht hat ja noch jemand etwas damit rum gespielt und hat weitere Erkenntnisse.

    Jetzt läuft mal ein Script im Hintergrund um mal zu sehen ob das ganze einigermaßen stabiel läuft.

    Gruß Jochen

    Kann mir das jemand nochmal für Anfänger erklären :s Ich weiß nicht wie und wo ich die Befehle anwenden muss.. Ich habe eine test.wav und will mir die per pi auf mein handy schicken.

    Hallo Keano,

    ganz so einfach wie Alex das da geschrieben hat ist es nun leider doch nicht. Wenn Du ein paar Beiträge weiter oben schaust hab ich mal den ganzen Ablauf für einen Bild-Upload beschrieben. Das ganze sollte genauso für Wave-Dateien funktionieren. Man müsste dann eben beim message_send den mtype auf vermutlich "audio" ändern, dann sollte es aber auch schon tun.

    Gruß Jochen

    Hallo,

    hier ein paar Code Schnippsel für den Reconnect

    Die login-Function muss dahingehend erweitert werden das neben dem username auch das passwort gespeichert wird. Das wird für eine reconnect benötigt.

    Code
    #Login on whatsapp server
    def login(self, username, password):
      #Save username and password for reconnect
      self.username = username
      self.password = password
      self.methodsInterface.call("auth_login", (username, password))

    Die folgende funktion muss hinzugefügt werden um den reconnect durch zu führen

    Code
    #Reconnect function for use in case of disconnection
    def reconnect(self):
      self.methodsInterface.call("auth_login", (self.username, self.password))

    Die onDisconnected Funktion muss erweitert werden das nicht nur die Nachricht ausgegeben wird sonder auch anschließend ein reconnect versucht wird.

    Code
    def onDisconnected(self, reason):
      print("Disconnected because %s" %reason)
      #Try to reconnect on disconnect because of "Zwangstrennung"
      self.reconnect()

    Ja bei der Statusänderung habe ich das selbe Problem. Das dauert bei mir auch immer so nen Tag. Wenn ich meinen online Status jedoch auf online stelle disconnected er mich nach ein paar Minuten wenn ich das nicht mache läuft er bei mir auch durch.
    Hab bei mir jetzt eine reconnect funktion drinn. Wenn die disconnect Meldung kommt verbindet er einfach neu :D Das hat den vorteil das der Client auch nach der Internetzwangstrennung wieder läuft.

    Hallo Zusammen,

    ich hab es nun tatsächlich hin bekommen Bilder vom Raspi an mein Handy zu schicken. Es hat mich zwar einige Zeit gekostet mich durch den ganzen Source Code zu wühlen, und nebenher noch Python einigermaßen zu verstehen, aber ich habs hin bekommen :thumbs1:

    Ich will mal versuchen den Ablauf zu beschreiben. Leider kann ich Euch hier auch keine schlüsselfertige Lösung präsentieren weil das bei mir auch alles noch recht experimenteller Code ist.

    Vielleicht hilft es jedoch dem ein oder anderen weiter.

    Vom groben Ablauf sieht ein Image Upload Ablauf so aus:

    • media_requestUpload (Hier bekommt man eine URL zurück an die das Bild geladen wird)
    • Je nach dem ob das selbe Bild schon hoch geladen wurde (wenn man das selbe Bild eine zweites mal sendet) oder ob es sich um eine neues handelt wird eine der folgenden Listener aufgerufen:

      • media_uploadRequestSuccess
      • media_uploadRequestDuplicate
    • jetzt kommt es drauf an welcher Listener sich gemeldet hat

      • media_uploadRequestSuccess dann muss mittels MediaUploader das Bild hoch geladen werden.
        Der MediaUploader hat drei Callback Funktionen:

        • successClbk -> wird nach dem erfolgreichen upload des Bildes Aufgerufen
        • errorClbk -> wird im Fehlerfall aufgerufen
        • progressCallback -> zeigt den Downloadfortschritt in Prozent an

        Der successClbk bekommt als Übergabeparameter auch ein URL, an diese kann dann mittels message_imageSend das Bild geschickt werden.

      • media_uploadRequestDuplicate bekommt direkt die URL die dann mittels message_imageSend das Bild senden kann


    Ich habe das aktuell bei mir so eingebaut dass ich bei empfangen einer Nachricht auf das Schlüsselwort "Image: " prüfe und wenn er das findet entsprechend das angeforderte Bild schickt.
    Ich werde hier Teile meiner ListenerClient.py Datei veröffentlichen, weiße aber direkt darauf hin das es sich dabei zwar um funktionierenden aber sicherlich keinen guten Code handelt. Ebenso sind keinerlei Überprüfungen auf Falscheingaben usw. dabei.
    Sprich der Code ist wirklich nur für den geneigten Leser der sich auch schon etwas mit dem Thema auseinander gesetzt hat.

    Wie gesagt für den Code da oben muss man schon in etwa wissen was man tut, vielleicht hilft es jedoch dem Eine oder Andere weiter.

    Gruß Jochen

    Hallo Zusammen,

    da nebenan https://www.forum-raspberrypi.de/Thread-whatsapp-script wohl jemand beleidigt war oder sich von seinem Programmiererthron nicht zum gemeinen Pöbel herablassen wollte hier ein Versuch die offenen Punkte zu lösen. (Wer Ironie und/oder Sarkasmus findet darf ihn behalten :wallbash:)

    Konkret geht es um die Möglichkeits mittes https://github.com/tgalal/yowsup Nachrichten per WhatsApp zu verschicken.

    So weit ich das übersehen kann sind noch ein paar Punkte offen:

    • Setzen des Profilbilds
    • setzen des Status
    • senden von Bildern (oder anderen Medien)
    • . . .


    Was bisher schon zu dem Thema beigetragen wurde kann ja im anderen Beitrag nachgelesen werden.
    Meine Eigenen Erfahrungen zum Thema Profilbild / -status sind die, das er das zumindest bei mir nur einmal am Tag macht. Hab mich darum aber auch noch nicht wirklich gekümmert.
    Mein Hauptproblem ist das ich bis jetzt keine vernünftige Dokumentation der Funktionen gefunden habe. Quelltext ja, aber das wars auch.
    Vielleicht kann ja da jemand etwas bei steuern. Die Hilfe unter https://github.com/tgalal/yowsup/…y-Documentation ist zwar zum einstieg ganz nett aber leider ist da auch nicht alles beschrieben.
    Unter Umständen kommt man über https://github.com/tgalal/yowsup/issues auch noch an weitere Informationen.

    Gruß Jochen

    Hallo Zusammen,

    eins vorn weg, ich hatte gestern Alex eine PN geschickt zwecks dem Thema und auch eine Antwort bekommen, danke hierfür. Leider war die Antwort genau so aussagekräftig wie die restlichen Kommentare. (such mal da in dem Forum da gibts zwei Antworten . . . )
    Leider habe ich schon öfters die Erfahrung im Umfeld von Entwicklern machen müssen das man gerne Wissen aufsaugt aber dann nichts mehr abgibt :( Entweder ich möchte der Community helfen oder eben nicht, aber dieses ich kann das sag aber nicht wies geht getue finde ich verdammt kindisch.

    Zum Thema.
    Was ich bisher hin bekommen habe.
    Mittels media_requestUpload kann man sich eine URL zum uploden eines Bildes anfordern

    Code
    local_path = "/home/pi/whatsapp/yowsup-master/src/jump.jpg"
            mtype = "image"
            sha1 = hashlib.sha256()
            fp = open(local_path, 'rb')
            try:
                sha1.update(fp.read())
                hsh = base64.b64encode(sha1.digest())
                self.methodsInterface.call("media_requestUpload", (hsh, mtype, os.path.getsize(local_path)))
            finally:
                fp.close()


    Zusätzlich muss man die muss man sich ein paar Listener registrieren:

    Code
    self.signalsInterface.registerListener("media_uploadRequestSuccess", self.onUploadRequestSuccess)
    self.signalsInterface.registerListener("media_uploadRequestDuplicate", self.onUploadRequestDuplicate)


    Leider kann ich hier nicht genau sagen wann das Signal media_uploadRequestDuplicate kommt. Beim ersten request kommt es auf jeden Fall nicht. Ob der duplicate dann kommt wenn man für das selbe Bild eine Request stellt oder nur wenn man die URL die da zurück kommt nicht zum senden benutzt kann ich nicht sagen. In meiner Spielwiese reagiere ich im Moment einfach auf beide Signale.

    in der onUploadRequestSuccess bzw onUploadRequestDuplicate funktion nutze ich dann den MediaUploader um mein Bild hoch zu laden.

    Code
    def onUploadRequestSuccess(self, _hash, url, resumeFrom):
                print("UploadRequest to URL"+url+"\n")
                sender_jid = "49xxxxxxxxxx@s.whatsapp.net" #die eigene Handynummer
                receiver_jid = "49xxxxxxxxxx@s.whatsapp.net" #die Handynummer an die gesendet werden soll
                MU = MediaUploader(receiver_jid,sender_jid)
                MU.upload("/home/pi/whatsapp/yowsup-master/src/jump.jpg", url)

    Das ganze funktioniert so weit. Jetzt muss ich noch schauen wie ich an die URL komme mit der ich Schlussendlich mit message_imageSend das Bild an mein Handy schicken kann. Bisher hab ich mir die URL mal aus dem Debugger gefischt und das Bild dann manuell gesendet was geklappt hat.

    Mir ist vollkommen klar dass das ganze hier programiertechnisch nicht 100% sauber aufgearbeitet ist, aber zumindest bin ich mal einen Schritt weiter gekommen. Und dafür das ich von Python bis vor ein paar Tagen noch keine Ahnung hatte bin ich ganz zufrieden.

    Ich muss Alex da sicherlich auch zu einem gewissen Punkt recht geben. Wenn man hier weiterkommen will muss man sich auch etwas mit dem Thema auseinander setzen, seine Pseudohinweise finde ich persönlich jedoch eher Kontraproduktiv.

    Gruß Jochen