MySQL中的二十种信息 - 文本被切断

时间:2017-07-26 14:43:13

标签: mysql python-3.x twitter tweepy pymysql

我正在使用Tweepy将来自Twitter的信息插入到MySQL表中。然而,大多数情况下,它的作品都是有意的,推文中的实际文字正在被切断,许多以" ..."我不知道为什么会这样。

输出的一个例子是:

@JamesMelville:保持选民不是"不爱国的"通过"谈论国家"。恰恰相反。保留者关心英国的未来...

感谢您的帮助

这是我的流监听器类:(我是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 :(得分:0)

我找到了解决问题的方法。 由于140个字符的限制,文本在转发时被截断。 因此它与MySQL无关。 我的解决方案是使用'retweet_status'属性(并拆分实际的推文文本部分)而不是'text'如果推文是转发,否则我只使用'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', '')