【问题标题】:Python: How to search tweets and store in database?Python:如何搜索推文并存储在数据库中?
【发布时间】:2017-01-07 02:37:10
【问题描述】:

我有一个不错的 Python 脚本,它当前打印出来自给定用户名的过去 200 条推文。

但是,我想对其进行修改,以便它收集过去 200 条包含特定主题标签(来自任何用户名)的推文,然后我想将这些结果存储在数据库中。

谁能提供关于如何修改下面代码的建议?

import sys
import operator
import requests
import json
import twitter

twitter_consumer_key = 'XXXX'
twitter_consumer_secret = 'XXXX'
twitter_access_token = 'XXXX'
twitter_access_secret = 'XXXX'

twitter_api = twitter.Api(consumer_key=twitter_consumer_key, consumer_secret=twitter_consumer_secret, access_token_key=twitter_access_token, access_token_secret=twitter_access_secret)

statuses = twitter_api.GetUserTimeline(screen_name=handle, count=200, include_rts=False)

for status in statuses:
  if (status.lang == 'en'):
    print status

【问题讨论】:

标签: python twitter


【解决方案1】:

抱歉,我一直在寻找 Python 解决方案,我相信我终于找到并成功测试了它。代码如下。仍在寻找一种方法来修改脚本以将每一行输入到 SQL 数据库中,但我希望我能在其他地方找到它。

pip 安装 TwitterSearch

from TwitterSearch import *
try:
    tso = TwitterSearchOrder() # create a TwitterSearchOrder object
    tso.set_keywords(['Guttenberg', 'Doktorarbeit']) # let's define all words we would like to have a look for
    tso.set_language('de') # we want to see German tweets only
    tso.set_include_entities(False) # and don't give us all those entity information

    # it's about time to create a TwitterSearch object with our secret tokens
    ts = TwitterSearch(
        consumer_key = 'aaabbb',
        consumer_secret = 'cccddd',
        access_token = '111222',
        access_token_secret = '333444'
     )

     # this is where the fun actually starts :)
    for tweet in ts.search_tweets_iterable(tso):
        print( '@%s tweeted: %s' % ( tweet['user']['screen_name'], tweet['text'] ) )

except TwitterSearchException as e: # take care of all those ugly errors if there are some
    print(e)

【讨论】:

    【解决方案2】:

    我附上了一个 java 代码,它将打印出过去 100 条推文,包括“#engineeringproblems”主题标签(来自任何用户)。您需要在库中添加 twitter API 'twitter4J'。

    API下载链接-http://twitter4j.org/en/index.html#download

    Java 源代码:

    public static void main(String[] args) {
    
        ConfigurationBuilder cb = new ConfigurationBuilder();
        cb.setDebugEnabled(true)
         .setOAuthConsumerKey("xxxx")
         .setOAuthConsumerSecret("xxxx")
         .setOAuthAccessToken("xxxx")
         .setOAuthAccessTokenSecret("xxxx");
    
        Twitter twitter = new TwitterFactory(cb.build()).getInstance();
        Query query = new Query("#engineeringproblems ");
        int numberOfTweets = 100;
        long lastID = Long.MAX_VALUE;
        ArrayList<Status> tweets = new ArrayList<Status>();
    
        while (tweets.size() < numberOfTweets) {
            if (numberOfTweets - tweets.size() > 100) {
                query.setCount(100);
            } else {
                query.setCount(numberOfTweets - tweets.size());
            }
            try {
                QueryResult result = twitter.search(query);
                tweets.addAll(result.getTweets());
                System.out.println("Gathered " + tweets.size() + " tweets" + "\n");
                for (Status t : tweets) {
                    if (t.getId() < lastID) {
                        lastID = t.getId();
                    }
                }
    
            } catch (TwitterException te) {
                System.out.println("Couldn't connect: " + te);
            };
            query.setMaxId(lastID - 1);
        }
        for (int i = 0; i < tweets.size(); i++) {
            Status t = (Status) tweets.get(i);
    
    
            String user = t.getUser().getScreenName();
            String msg = t.getText();
    
            System.out.println(i + " USER: " + user + " wrote: " + msg + "\n");
        }
    }
    

    【讨论】:

      【解决方案3】:

      不熟悉 twitter 包,但这可能是您可以处理的建议。取决于你想如何保存推文,你可以用你想要的方式替换“打印状态”。 但是,这只允许您过滤 200 条推文,而不是获取包含特定主题标签的 200 条推文。

      import sys
      import operator
      import requests
      import json
      import twitter
      
      twitter_consumer_key = 'XXXX'
      twitter_consumer_secret = 'XXXX'
      twitter_access_token = 'XXXX'
      twitter_access_secret = 'XXXX'
      
      twitter_api = twitter.Api(consumer_key=twitter_consumer_key, consumer_secret=twitter_consumer_secret, access_token_key=twitter_access_token, access_token_secret=twitter_access_secret)
      
      statuses = twitter_api.GetUserTimeline(screen_name=handle, count=200, include_rts=False)
      
      tag_list = ["Xmas", "Summer"]
      for status in statuses:
        if (status.lang == 'en'):
          #assume there exists a hashtag in the tweet
          for hashtag in status.entities.hashtags:
            if hashtag.text in tag_list:
              print status
      

      【讨论】:

      • 感谢您的建议,但我确实需要扫描所有用户的主题标签(而不是过滤单个用户的推文)。到目前为止,我在这个“twitter”库上找不到任何文档,所以我可能会切换到其他有更有用方法的东西。
      • @MattBrown 啊,你只需要一个简单的搜索功能。刚刚在 Twitter 官方网站上注意到:“Twitter 搜索 API 搜索过去 7 天内发布的最近推文的样本。”如果您想匹配完整性,可以考虑使用 Streaming API。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-11
      • 2019-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-25
      • 1970-01-01
      相关资源
      最近更新 更多