Twitter Abfragen

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
Jimmyrakete
User
Beiträge: 3
Registriert: Freitag 12. März 2021, 12:03

Hallo zusammen,
das sind meine ersten Schritte in Python doch leider habe ich wenig Erfolg :-(

Ich habe bei Twitter die API beantragt und auch bekommen.
Habe alle Token (2) und Keys (2) in eine Funktion eingebunden.

Das Programm läuft ohne Fehler aber es kommt kein Ergebnis

Kann es sein das ich keine Verbindung zu Twitter bekomme ?

Gibt es ein script um die Verbindung zu Twitter zu testen ??

Vielleicht ist es wichtig aber ich habe das Bearen_token nicht mit eingebunden

ich würde mich sehr freuen wenn mir jemand helfen kann

Code: Alles auswählen

import funktionen as f
import json
from tweepy import Stream
from tweepy import OAuthHandler
from tweepy.streaming import StreamListener


auth = OAuthHandler(f.api_key, f.api_key_secret)
auth.set_access_token(f.access_token, f.access_token_secret)


class StdOutListener(StreamListener):
    def on_data(self, data):
        TweetHandling(data)
        return True

    def on_error(self, status_code):
        print(status_code)
        return False


def TweetHandling(data):
    tweet = json.loads(data)
    txt = tweet[u'text']
    print(txt)


myStream = Stream(auth, StreamListener())
myStream.filter(track=['trump'])
Benutzeravatar
Dennis89
User
Beiträge: 1555
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

ich weis jetzt auch nicht ob ich etwas übersehe, aber deine Klasse wird gar nicht benutzt?
Damit erreichst du dein 'print' auch nicht.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Jimmyrakete
User
Beiträge: 3
Registriert: Freitag 12. März 2021, 12:03

kannst du mir das für mich nochmal verständlich sagen ( Klasse wird nicht benutzt) oder willst du damit sagen ich kann mich nicht verbinden ?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du deklarierst eine Klasse StdOutListener. Wo benutzt du die?
Jimmyrakete
User
Beiträge: 3
Registriert: Freitag 12. März 2021, 12:03

ich habe das script aus diesen Video übernommen https://www.youtube.com/watch?v=r0Z8Er6Y93A

hat jemand ein Tipp wie ich das script am laufen bekomme
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Der Tipp ist doch schon zweimal gegeben worden: wenn du eine Klasse von StreamListener ableitest, dann solltest du die auch verwenden. Also sowas wie

myStream = Stream(auth, StdOutListener())

Und auch wenn ich persoenlich YT mag - es ist ein bisschen zuviel verlangt, sich 16 Minuten seiner Lebenszeit abzuzwacken, nur damit man hier eine Frage beantworten kann. Entweder bereitest du das besser auf, so dass man genau an die entsprechende Stelle springen kann, oder suchst dir ein text-basiertes Tutorial, das man schnell ueberfliegen kann.
Benutzeravatar
__blackjack__
User
Beiträge: 14054
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Jimmyrakete: Anmerkungen zum Quelltext: `funktionen` ist kein guter Name für ein Modul, weil viel zu generisch. Zudem benutzt Du aus dem Modul überhaupt keine Funktionen sondern das scheinen nur statische Konfigurationsdaten zu sein. So ein Modul heisst üblicherweise `configuration` oder `settings`. Noch besser wäre aber das gar nicht in ein Modul zu schreiben, sondern in eine Konfigurationsdatei, denn Module packt man üblicherweise in die Versionsverwaltung, *dort* haben aber wiederum Zugangsdaten nichts zu suchen.

Namen sollte man nicht kryptisch abkürzen. `f` ist viel zu nichtssagend.

Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase).

Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst. Besonders unübersichtlich wird es wenn man Code auf Modulebene mit Definitionen von Klassen und Funktionen mischt.

`my` ist in 99,99% ein sinnfreier Präfix. Wenn es nicht auch ein `their` oder `our` oder so etwas gibt das sich vom `my` unterscheidet, ist der Informationsgehalt bei 0. In diesem Fall braucht man den Namen allerdings auch gar nicht wirklich zwingend.

`TweetHandling` passt von der Schreibweise nicht zu einer Funktion und auch inhaltlich nicht so ganz. Zum ersten benennt man Funktionen üblicherweise nach der Tätigkeit die sie durchführt, also beispielsweise `handle_tweet()`, zum anderen stimmt der Tweet-Teil nur wenn es denn tatsächlich ein Tweet ist. Es gibt da ja noch einige andere Nachrichtentypen. Weswegen ich auch vorsichtig wäre da einfach von auszugehen, dass es einen "text"-Eintrag gibt und das etwas defensiver formulieren.

Ich sehe auch nicht warum man das in eine Funktion herausziehen muss und die `on_data()`-Methode fast nur diese Funktion aufruft.

Das ``u`` in ``u"text"`` hat da in Python 3 nichts mehr zu suchen.

Zwischenstand (ungetestet):

Code: Alles auswählen

#!/usr/bin/env python3
import json

import configuration
from tweepy import OAuthHandler, Stream
from tweepy.streaming import StreamListener


class StdOutListener(StreamListener):
    def on_data(self, raw_data):
        print(json.loads(raw_data).get("text"))
        return True

    def on_error(self, status_code):
        print(status_code)
        return False



def main():
    auth = OAuthHandler(configuration.API_KEY, configuration.API_KEY_SECRET)
    auth.set_access_token(
        configuration.ACCESS_TOKEN, configuration.ACCESS_TOKEN_SECRET
    )
    Stream(auth, StdOutListener()).filter(track=["trump"])


if __name__ == "__main__":
    main()
Musst Du unbedingt `on_data()` überschreiben? Das Original dekodiert die Nachricht und ruft dann entsprechend spezifischere Methoden auf.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten