Automatische Retweets via Twython

Code-Stücke können hier veröffentlicht werden.
Antworten
horstexplorer
User
Beiträge: 3
Registriert: Dienstag 14. Februar 2017, 23:11

Hallo, ich hoffe ihr könnt mir weiterhelfen. Ich versuche ein Script zu bauen, welches neue Tweets des Benutzers xy auf Twitter retweetet. Allerdings funktioniert dieses Script was ich mir zusammengestellt habe nicht. Könntet ihr mir da evtl helfen das Script zum laufen zu bekommen oder etwas zu entwickeln was das tut was ich vor habe?

Das ist der Code welchen ich gerade benutze:
[codebox=python file=Unbenannt.txt]from twython import Twython, TwythonError

apiKey = '###############'
apiSecret = '###############'
accessToken = '###############'
accessTokenSecret = '###############'
twitter = Twython(apiKey,apiSecret,accessToken,accessTokenSecret)

user_timeline = twitter.get_user_timeline(screen_name='###', count=2)
try:
for tweet in user_timeline["statuses"]:
try:
twitter.retweet(id = tweet["id_str"])
except TwythonError as e:
print ("e")
except TwythonError as e:
print ("e") [/code]
BlackJack

@horstexplorer: Was heisst „funktioniert nicht“ denn genau? Gibt es eine Fehlermeldung? Wenn ja welche? Traceback bitte 1:1 kopieren. Verhält es sich nicht so wie Du erwartest? An welcher Stelle? Und wie verhält es sich stattdessen?
horstexplorer
User
Beiträge: 3
Registriert: Dienstag 14. Februar 2017, 23:11

Bis jetzt gibt es mir diese Fehlermeldung aus mit der ich wenig anfangen kann.

Traceback (most recent call last):
File "retweet.py", line 11, in <module>
for tweet in user_timeline["statuses"]:
TypeError: list indices must be integers, not str
BlackJack

@horstexplorer: Die Meldung sagt Dir das man Listen nur mit Zahlen indexieren kann und nicht mit Zeichenketten. Und zeigt Dir die Zeile in der das passiert. Da gibt es nur einen Indexzugriff. Und Du verwendest dort eine Zeichenkette. Was bei Listen aus hoffentlich offensichtlichen Gründen nicht geht. Wie kommst Du darauf das die `get_user_timeline()`-Methode etwas zurück gibt das den Zugriff 'statuses' als Schlüssel erlaubt?

Code: Alles auswählen

In [1]: a = [1, 2, 3]

In [2]: a['hallo']
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-2-3a437f2c5b1c> in <module>()
----> 1 a['hallo']

TypeError: list indices must be integers, not str

In [3]: a[0]
Out[3]: 1
Benutzeravatar
Cronut
User
Beiträge: 34
Registriert: Sonntag 5. Februar 2017, 09:50
Wohnort: HRO, GER

Du hast da bereits eine Liste, du denkst wahrscheinlich, dass da ein Dictionary zurück kommt, dem ist aber nicht so.

Code: Alles auswählen

user_timeline
ist eine Liste von Dictionaries.

Anders verhält es sich z.B., wenn du die Suche benutzt, da dort einmal die Tweets und die Metadaten der Suche enthalten sind:

Code: Alles auswählen

popular_python_tweets = twitter.search(q='python', result_type='popular')

for tweets in popular_python_tweets['statuses']
    [...]
“Clean code always looks like it was written by someone who cares.” (Michael Feathers)
Check out: https://awesome-python.com/
horstexplorer
User
Beiträge: 3
Registriert: Dienstag 14. Februar 2017, 23:11

Und wie müsste der Code dann aussehen?
Ich möchte ja von bestimmten Nutzern retweetet und nicht Tweets in denen bestimmte Benutzer genannt werden.
BlackJack

@horstexplorer: Arbeite am besten mal ein Grundlagentutorial für Python durch, dann weisst Du was man mit den Grunddatentypen machen kann. In der Python-Dokumentation gibt es beispielsweise ein Tutorial.
Antworten