Tweepy Stream zu sqlite Datenbank – ungültige Synathe

Der unten stehende Code streicht die twitter public timeline für eine Variable, die alle Tweets an die Konsole ausgibt. Ich möchte das Speichern der gleichen Variablen (status.text, status.author.screen_name, status.created_at, status.source) in eine sqlite Datenbank. Ich bekomme einen Syntaxfehler, wenn mein Skript einen Tweet sieht und nichts in die sqlite Datenbank geschrieben wird.

der Fehler:

$ python stream-v5.py @lunchboxhq Filtering the public timeline for "@lunchboxhq"RT @LunchboxHQ: test 2 LunchboxHQ 2012-02-29 18:03:42 Echofon Encountered Exception: near "?": syntax error 

der Code:

 import sys import tweepy import webbrowser import sqlite3 as lite # Query terms Q = sys.argv[1:] sqlite3file='/var/www/twitter.lbox.com/html/stream5_log.sqlite' CONSUMER_KEY = '' CONSUMER_SECRET = '' ACCESS_TOKEN = '' ACCESS_TOKEN_SECRET = '' auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET) auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET) con = lite.connect(sqlite3file) cur = con.cursor() cur.execute("CREATE TABLE TWEETS(txt text, author text, created int, source text)") class CustomStreamListener(tweepy.StreamListener): def on_status(self, status): try: print "%s\t%s\t%s\t%s" % (status.text, status.author.screen_name, status.created_at, status.source,) cur.executemany("INSERT INTO TWEETS(?, ?, ?)", (status.text, status.author.screen_name, status.created_at, status.source)) except Exception, e: print >> sys.stderr, 'Encountered Exception:', e pass def on_error(self, status_code): print >> sys.stderr, 'Encountered error with status code:', status_code return True # Don't kill the stream def on_timeout(self): print >> sys.stderr, 'Timeout...' return True # Don't kill the stream streaming_api = tweepy.streaming.Stream(auth, CustomStreamListener(), timeout=60) print >> sys.stderr, 'Filtering the public timeline for "%s"' % (' '.join(sys.argv[1:]),) streaming_api.filter(follow=None, track=Q) 

  • Langsame django Datenbank Operationen auf großen (ish) Datensatz.
  • Tweepy Streaming - Stoppen Sie, Tweets in x-Menge zu sammeln
  • Tweepy: Wie kann ich mehr als 100 User-Screen-Namen nachschlagen?
  • Wie lasse ich einen Benutzer tweet ein Bild?
  • Python requests.exceptions.ConnectionError: HTTPSConnectionPool: Max Wiederholungen überschritten mit URL: [Errno 111] Verbindung abgelehnt)
  • Veröffentlichen von Bildern zu Twitter über Python
  • Tweepy Tracking Begriffe und folgende Benutzer
  • Twitter Python Json zu CSV
  • 4 Solutions collect form web for “Tweepy Stream zu sqlite Datenbank – ungültige Synathe”

    Sie fehlen eine schließende Klammer in der letzten Zeile des folgenden Codes (Zeilen 34-37 von dem, was Sie gepostet haben):

      cur.executemany("INSERT INTO TWEETS(?, ?, ?)", (status.text, status.author.screen_name, status.created_at, status.source) 

    Füge einfach eine Klammer hinzu, um den Methodenaufruf sofort nach deinem Tupelparameter zu schließen.

     import sqlite3 as lite con = lite.connect('test.db') cur = con.cursor() cur.execute("CREATE TABLE TWEETS(txt text, author text, created int, source text)") 

    dann später:

     cur.executemany("INSERT INTO TWEETS(?, ?, ?, ?)", (status.text, status.author.screen_name, status.created_at, status.source)) 

    Vollständige Offenlegung: noch neu in diesem Zeug. Allerdings habe ich Ihren Code gearbeitet, indem ich ihn ändern um:

     cur.execute("INSERT INTO TWEETS VALUES(?,?,?,?)", (status.text, status.author.screen_name, status.created_at, status.source)) con.commit() 

    Es scheint mir, dass du in einem Status zu einer Zeit liest. Die ausführliche Methode wäre, wenn du mehr als einen Status hast. Beispielsweise:

    (['sometext', 'bob','2013-02-01','Twitter for Android'], ['someothertext', 'helga', '2013-01-31', 'MacSomething'])

    Ich bin definitiv kein Zauberer und bin mir nicht sicher, welche Art von Auswirkungen das Commit () auf jeden Eintrag hat … Ich vermute, die Performance ist schrecklich, aber es funktioniert für einen einzigen Begriff in der Abfrage.

    Vielen Dank für die Buchung Ihrer Code, habe ich endlich gelernt, wie man Streaming zu tun.

    Ich bin ganz neu zu tweepy. Aber das sind die Modifikationen, die für mich gearbeitet haben. Sie müssen nach dem INSERT IN TWEETS VALUES hinzufügen. Vergessen Sie auch nicht, die Änderungen zu begehen. Dies ist der Link, auf den ich hingewiesen habe: verwandte Post

      cur.execute("INSERT INTO TWEETS VALUES(?, ?, ?, ?)", (status.text, status.author.screen_name, status.created_at, status.source)) con.commit() 
    Python ist die beste Programmiersprache der Welt.