2017-07-26 7 views
0

Ich füge Informationen aus Twitter mit Hilfe von Tweepy in eine MySQL-Tabelle ein. Meist funktioniert es aber, der eigentliche Text aus dem Tweet wird abgeschnitten und viele enden mit "..." und ich bin mir nicht sicher warum das so ist.Tweepy-Informationen in MySQL - Text wird abgeschnitten

Ein Beispiel für die Ausgabe ist dies:

@JamesMelville: Bleibt die Wähler nicht „unpatriotisch“ von „sprechen, das Land nach unten“ sind .Seine das Gegenteil. Remainers kümmert sich um Britains fut ...

Danke für Ihre Hilfe

Hier mein Strom-Listener-Klasse ist: (: Ich bin so Python dies wahrscheinlich schlecht ist)

class listener(StreamListener): 



def on_data(self, data): 
    try: 


     jsonData=json.loads(data) 


     tweets =(jsonData['text']) 

     if tweets.startswith('RT'): 
      retweets = True 
     else: 
      retweets = False 


     tweets = tweets.replace('RT', '') 
     tweets = tweets.replace("'", '') 
     tweets = tweets.lstrip() 
     tweets = tweets.replace('\n', '') 



     screen_name =(jsonData['user']['screen_name']) 

     name =(jsonData['user']['name']) 
     name = name.replace(',', ' ') 
     language =(jsonData['lang']) 

     location =(jsonData['place']) 

     coord =(jsonData['coordinates']) 

     device = jsonData['source'].split('">')[1].replace('</a>', '') 

     tweettime = jsonData['created_at'].replace('+', '') 
     tweettime = datetime.datetime.strptime(tweettime, "%a %b %d %H:%M:%S %f %Y") 
     date_to_string = str(tweettime.strftime("%Y/%m/%d,%H:%M:%S")) 
     date_created = date_to_string.split(',')[0] 
     time_created = date_to_string.split(',')[1] 
     created_time =(time_created) 
     created_date =(date_created) 

     htext = jsonData['entities']['hashtags'] 
     htext2 = [] 
     hashtag_list = '' 
     for hashtag in htext: 
      htext=str(hashtag['text']) 
      hashtag_list = hashtag_list + ' ::' + htext 
     hashtag_list = hashtag_list.replace("'", "") 






     conn = connect(host = '', port = , user = ', passwd = '', charset='utf8', autocommit = True); 
     conn.commit() 
     cursor = conn.cursor(cursors.DictCursor); 

     cursor.execute("CREATE DATABASE IF NOT EXISTS twitter") 
     cursor.execute("USE twitter") 
     cursor.execute("""CREATE TABLE IF NOT EXISTS `twitter_data`(ID INT AUTO_INCREMENT NOT NULL,`Name` VARCHAR(200) ,`Screen name` VARCHAR(200) , `Date created` VARCHAR (20), `Time created` VARCHAR (8), Tweet VARCHAR (200), Hashtags VARCHAR (200), Retweets VARCHAR (5), Lanugage VARCHAR (20), Device VARCHAR (60), Location VARCHAR(200), Coordinates VARCHAR (200), PRIMARY KEY (ID))""") 
     sql = "INSERT INTO `twitter_data` VALUES(Null, '" + str(name) + "', '" + str(screen_name) + "', '" + str(created_date) + "', '" + str(created_time) + "', '" + str(tweets) + "', '" + str(hashtag_list) + "', '" + str(retweets) + "', '" + str(language) + "', '" + str(device) + "', '" + str(location) + "', '" + str(coord) + "') " 
     print(sql) 
     cursor.execute(sql) 

     return True 
    except Exception as N: 
     print('failed on_data '+ str(N)) 
     time.sleep(5) 
+1

Sie ein Beispiel Aufzeichnung Ihrer 'geben müssen ...' Teil (reale Ausgabe von der Konsole kopiert) –

+0

Hier ein Beispiel: @astro_trader: # Brexit ist keine reflexartige Reaktion, sein Ergebnis von 40 Jahren aufgestauter Wut & Frustration der britischen Souveränität vergeben ... – Rpp

+0

oder das: @JamesMelville: bleiben Wähler sind nicht "unpatriotisch" von "das Land reden" .Its die Gegenteil. Remainers kümmern sich um Britains Fut ... – Rpp

Antwort

0

Ich habe eine Lösung gefunden meine Frage. Der Text wurde abgeschnitten, als es aufgrund der Beschränkung auf 140 Zeichen retweet wurde. Daher hat es nichts mit MySQL zu tun. Meine Lösung bestand darin, das 'retweet_status'-Attribut zu verwenden (und den eigentlichen Tweet-Textteil zu trennen) und nicht' Text ', wenn der Tweet ein Retweet war, ansonsten habe ich einfach' Text 'verwendet. Hier ist ein Teil des Codes, der geändert wurde:

if tweets.startswith('RT'): 
    retweets = True 
    tweets = str(jsonData['retweeted_status']).split('\'text\':')[1] 

    if 'display_text_range' in tweets: 
     tweets = tweets.split(', \'display_text_range\'')[0] 
    else: 
     tweets = tweets.split(', \'source\'')[0] 
else: 
    retweets = False 
    tweets = tweets.replace('RT', '')