2016-08-30 7 views
0

私は現在、与えられたユーザー名から過去200個のつぶやきを出力する素敵なPythonスクリプトを持っています。Python:ツイートを検索してデータベースに保存するにはどうすればいいですか?

しかし私はそれを修正して、その代わりに任意のユーザー名からの特定のハッシュタグを含む過去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 
+0

可能な重複[TwitterのAPI - ?特定のハッシュタグですべてのツイートを表示します](http://stackoverflow.com/questions/2714471/twitter-api-display-all-つぶやきと特定のハッシュタグ付き) –

+0

[可能ではないようです](https://twittercommunity.com/t/get-user-timeline-tag-filtering/17508)ハッシュタグで[ GetUserTimeline](https://dev.twitter.com/rest/reference/get/statuses/user_timeline)関数を呼び出します。 Xanderの提案によれば、おそらく[GetSearch](https://pythonism.wordpress.com/2013/10/12/using-the-twitter-api-with-python-twitter/)メソッドが役立つでしょう。そうでなければ、一度に200個のつぶやきのバッチをダウンロードし、自分でフィルタリングすることができます(そして、Twitterはあなたの最後の3200個のツイートをダウンロードすることに制限していると思います)。 – Boa

+0

DBに格納する場合、DB抽象化レイヤ(Django、web2pyなど)を提供するフレームワーク内で作業している場合を除き、http://www.sqlalchemy.org/を参照してください。 – Boa

答えて

0

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 
+0

提案していただきありがとうございますが、実際には、単一のユーザーのつぶやきをフィルタリングするのではなく、すべてのユーザーからハッシュタグをスキャンする必要があります。これまで使用してきたこの「twitter」ライブラリに関するドキュメントを見つけることができないので、より有用な方法を持つ別のものに切り替えることができます。 –

+0

@MattBrownああ、単純な検索機能が必要です。 Twitterの公式サイトでは、「Twitter Search APIは、過去7日間に公開された最近のツイートのサンプルを検索しています。完全性を一致させたい場合は、代わりにStreaming APIを使用することを検討してください。 – Young

0

私は(任意のユーザから)「#engineeringproblems」ハッシュタグを含む過去100件のツイートをプリントアウトするJavaコードを添付しています。 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"); 
    } 
} 
0

申し訳ありませんが、私は本当にPythonのソリューションを探してきたと私は最終的にそれを発見し、正常にテストしてみたと考えています。コードは以下のとおりです。それでも、SQLデータベースに各行を入力するスクリプトを修正する方法を探していますが、うまくいけば私はそれを他の場所で見つけることができます。

TwitterSearchをインストールPIP

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