2017-07-26 10 views
0

Tweepyを使ってTwitterの情報をMySQLのテーブルに挿入しています。たいていは作品が意図されていますが、実際のテキストは切り詰められていて、多くは「...」で終わります。なぜこれがどういうわけかわかりません。Tweepy情報をMySQLに - テキストを途切れさせる

出力の例がこれです:

@JamesMelville:「国をダウン話」で有権者が「unpatriotic」でないまま、反対を.Its。私は解決策を発見した(私はこれはおそらく悪いのpythonに新しいです)

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

あなたがここにあなたの '...'部分(コンソールからコピーされた実際の出力) –

+0

の例レコードを与える必要がありますは一例です:@astro_trader:#ブレイクイットは膝の反動ではなく、40年の怒りの怒りの結果&英国の主権を失望させたことの欲求不満... – Rpp

+0

またはこれ:@JamesMelville:残っている有権者は "国のことを話す"ことによって "非国家的"ではない。反対です。残念なことに、ブリテインズについてのケアは... – Rpp

答えて

0

:Remainersは...ボイルFUTについてのあなたの助けを

おかげでここ

は私のストリーム・リスナー・クラスであるケア私の質問。 テキストは、140文字の制限のためにリットット時に切り捨てられていました。 したがって、MySQLとは何の関係もありません。 私の解決策は、ツイートがリツイートであれば 'text'ではなく 'retweet_status'アトリビュートを使用し(実際のツイートテキスト部分を分割する)、それ以外の場合は 'text'を使用しました。 はここで変更されたコードの一部されています

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', '') 
関連する問題