Seite 1 von 1

String indices Problem mit Twitter API

Verfasst: Mittwoch 22. September 2021, 12:51
von fraygeyst
Hi Leute,
ich möchte mithilfe der Twitter API Tweets auslesen und in einer SQLite Datenbank speichern, leider stoße ich hierbei auf ein Problem, das ich nicht gelöst bekomme. Beim fetchen der Tweets, um sie anschließend in der Datenbank abzuspeichern bekomme ich einen TypeError: string indices must be integers Fehler.

Hier die dazugehörigen Codeausschnitte:

Code: Alles auswählen

con = sqlite3.connect("db.db")
cur = con.cursor()

def db():
    with con:
        cur.execute("""CREATE TABLE IF NOT EXISTS User (user_id INTEGER, created_at TEXT, description TEXT, 
        entities TEXT, location TEXT, name TEXT, username TEXT, verified TEXT, followers_count INTEGER, 
        following_count INTEGER, tweet_count INTEGER, listed_count INTEGER, withheld TEXT, protected TEXT, UNIQUE(user_id))""")

Code: Alles auswählen

def insertUser(user_id, created_at, description, entities, location, name, username, verified, 
followers_count, following_count, tweet_count, listed_count, withheld, protected):
    with con:
        cur.execute("INSERT OR IGNORE INTO User VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)",
                  (user_id, created_at, description, entities, location, name, username, verified, 
                  followers_count, following_count, tweet_count, listed_count, withheld, protected))

Code: Alles auswählen

for t in r:
            user = t['author_id']
            
            print(user)

            insertUser(user['id'], user['created_at'], user['description'], user.get("entities", ""), user.get("location", ""), user['name'], 
            user['username'], user['verified'], user['public_metrics']['followers_count'], user['public_metrics']['following_count'],
            user['public_metrics']['tweet_count'], user['public_metrics']['listed_count'],str(user.get("withheld", "")), user.get("protected", ""))

Hier noch die komplette Konsolenausgabe des Problems:

Traceback (most recent call last):
File "...", line X, in fetchTweets
insertUser(user['id'], user['created_at'], user['description'], user.get("entities", ""), user.get("location", ""),
user['name'], user['username'], user['verified'], user['public_metrics']['followers_count'], user['public_metrics']['following_count'],user['public_metrics']['tweet_count'], user['public_metrics']['listed_count'],str(user.get("withheld", "")), user.get("protected", ""))
TypeError: string indices must be integers
(venv) PS C:\Dateipfad>


Ich würde mich sehr freuen, wenn mir jemand weiterhelfen kann, bzw. jemand eine Idee hat welchen Ursprungs der Fehler ist.
Liebe Grüße

Re: String indices Problem mit Twitter API

Verfasst: Mittwoch 22. September 2021, 14:07
von __deets__
Was gibt den das print(user) aus? Noch besser, was gibt print(repr(user)) aus?

Re: String indices Problem mit Twitter API

Verfasst: Mittwoch 22. September 2021, 14:37
von einfachTobi
Ich wette 100 Gummipunkte:
t['author_id'] ist ein String. Zeile 2 des letzten Codestücks legt nahe, dass user ein Integer sein sollte, aber gem. der Doku kommt die author_id als String an und wird dann an user gebunden. Fälschlicherweise glaubt der TE jedoch, dass es sich bei user um ein Dict oder ähnliches handelt.
print(repr(user)) wird an der entsprechenden Stelle sowas ausgeben wie: '4711'.

Re: String indices Problem mit Twitter API

Verfasst: Mittwoch 22. September 2021, 15:37
von fraygeyst
Danke schonmal ihr beiden

print(user)
print(repr(user))

ergibt jeweils
397238289
bzw. '397238289'

Re: String indices Problem mit Twitter API

Verfasst: Mittwoch 22. September 2021, 16:06
von __deets__
Dann ist einfachTobi’s Antwort die korrekte - du glaubst du hättest eine Datenstruktur vom Typ Wörterbuch. Es ist aber nur ein String mit einer ID. Wahrscheinlich hat t die gesuchten Werte.

Re: String indices Problem mit Twitter API

Verfasst: Donnerstag 23. September 2021, 08:57
von fraygeyst
Hmm okay, leider stehe ich immer noch etwas auf dem Schlauch. Wie soll ich nun im weiteren vorgehen?

Re: String indices Problem mit Twitter API

Verfasst: Donnerstag 23. September 2021, 09:15
von sparrow
Das hat __deets__ doch schon geshrieben. Du bindest die author-ID an den Namen "user" und versuchst hinterher "user" zu verwenden, als wäre es ein Wörterbuch.
Wahrscheinlich stehen die Daten, die du suchst in "t" (was ein wirklich schlechter Name ist, weil niemand weiß, was "t" ist).
User ist schon mal nicht, was du denkst, was es ist. Was es ist, hast du ja schon gezeigt.
Jetzt musst du dir halt anschauen, was "t" ist.

Re: String indices Problem mit Twitter API

Verfasst: Donnerstag 23. September 2021, 18:52
von snafu
Ich hätte jetzt spontan auf t wie Tweet getippt.