web-dev-qa-db-ja.com

Pythonを使用して特定のユーザーのすべてのツイートと属性を取得するにはどうすればよいですか?

コマンドラインで入力したユーザー名にTweepyを使用して、Twitterからデータを取得しようとしています。ステータスとユーザーに関するかなりのデータを抽出したいので、次のことを考え出しました。

必要なすべてのモジュールをインポートして問題なく、oauth +キー(ここには含まれていません))があり、ファイル名が正しく、変更されていることに注意してください。

# define user to get tweets for. accepts input from user
user = tweepy.api.get_user(input("Please enter the Twitter username: "))

# Display basic details for Twitter user name
print (" ")
print ("Basic information for", user.name)
print ("Screen Name:", user.screen_name)
print ("Name: ", user.name)
print ("Twitter Unique ID: ", user.id)
print ("Account created at: ", user.created_at)

timeline = api.user_timeline(screen_name=user, include_rts=True, count=100)
    for Tweet in timeline:
        print ("ID:", Tweet.id)
        print ("User ID:", Tweet.user.id)
        print ("Text:", Tweet.text)
        print ("Created:", Tweet.created_at)
        print ("Geo:", Tweet.geo)
        print ("Contributors:", Tweet.contributors)
        print ("Coordinates:", Tweet.coordinates) 
        print ("Favorited:", Tweet.favorited)
        print ("In reply to screen name:", Tweet.in_reply_to_screen_name)
        print ("In reply to status ID:", Tweet.in_reply_to_status_id)
        print ("In reply to status ID str:", Tweet.in_reply_to_status_id_str)
        print ("In reply to user ID:", Tweet.in_reply_to_user_id)
        print ("In reply to user ID str:", Tweet.in_reply_to_user_id_str)
        print ("Place:", Tweet.place)
        print ("Retweeted:", Tweet.retweeted)
        print ("Retweet count:", Tweet.retweet_count)
        print ("Source:", Tweet.source)
        print ("Truncated:", Tweet.truncated)

最終的には、これをユーザーのすべてのツイート(3200の制限まで)で反復処理したいと思います。でもまず最初に。これまでのところ、2つの問題がありますが、リツイートに関して次のエラーメッセージが表示されます。

Please enter the Twitter username: barackobamaTraceback (most recent call last):
  File " usertimeline.py", line 64, in <module>
    timeline = api.user_timeline(screen_name=user, count=100, page=1)
  File "C:\Python32\lib\site-packages\tweepy-1.4-py3.2.Egg\tweepy\binder.py", line 153, in _call
    raise TweepError(error_msg)
tweepy.error.TweepError: Twitter error response: status code = 401
Traceback (most recent call last):
  File "usertimeline.py", line 42, in <module>
    user = tweepy.api.get_user(input("Please enter the Twitter username: "))
  File "C:\Python32\lib\site-packages\tweepy-1.4-py3.2.Egg\tweepy\binder.py", line 153, in _call
    raise TweepError(error_msg)
tweepy.error.TweepError: Twitter error response: status code = 404

ユーザー名を変数として渡すことも問題のようです。

Traceback (most recent call last):
  File " usertimleline.py", line 64, in <module>
    timeline = api.user_timeline(screen_name=user, count=100, page=1)
  File "C:\Python32\lib\site-packages\tweepy-1.4-py3.2.Egg\tweepy\binder.py", line 153, in _call
    raise TweepError(error_msg)
tweepy.error.TweepError: Twitter error response: status code = 401

私はこれらのエラーの両方を分離しました。つまり、それらは一緒に機能していません。

私の無知を許してください、私はTwitter APIにあまり熱心ではありませんが、かなり急速に学んでいます。 Tweepyのドキュメントは本当にひどいもので、私はネット上でたくさんの読書をしましたが、これを修正することはできないようです。これを並べ替えることができれば、いくつかのドキュメントを投稿します。

抽出されたデータをMySQLデータベースに転送し(画面に出力するのではなく、それを実行します)、それを操作して何かを実行できるようにする方法を知っています。問題が発生していることがわかります。 。誰かアイデアがありますか、それとも私が検討すべき別の方法がありますか?

どんな助けでも本当にありがたいです。乾杯

編集:

今朝の@EricOlsonの提案に続きます。私は次のことをしました。

1)テストするOauth資格情報の完全に新しいセットを作成しました。2)次のように新しいスクリプトにコードをコピーしました。

Oauth

consumer_key = "(removed)"
consumer_secret = "(removed)"
access_key="88394805-(removed)"
access_secret="(removed)"
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_key, access_secret)
api=tweepy.API(auth)



# confirm account being used for OAuth
print ("API NAME IS: ", api.me().name)
api.update_status("Using Tweepy from the command line")

スクリプトを初めて実行すると、スクリプトは正常に機能し、ステータスが更新され、次のようにAPI名が返されます。

>>> 
API NAME IS:  Chris Howden

そして、その時点から私はこれを取得します:

Traceback (most recent call last):
  File "C:/Users/Chris/Dropbox/Uni_2012-3/6CC995 - Independent Studies/Scripts/get Api name and update status.py", line 19, in <module>
    api.update_status("Using Tweepy frm the command line")
  File "C:\Python32\lib\site-packages\tweepy-1.4-py3.2.Egg\tweepy\binder.py", line 153, in _call
    raise TweepError(error_msg)
tweepy.error.TweepError: Twitter error response: status code = 403

このようなことをしていることがわかる唯一の理由は、生成されたアクセストークンを拒否していることです。アクセストークンを更新する必要はありませんか?

11
chowden

別のライブラリを試すことに抵抗がない場合は、 rauth ショットを与えることができます。すでに Twitterの例 がありますが、怠惰で実用的な例が必要な場合は、デモスクリプトを変更する方法を次に示します。

from rauth import OAuth1Service

# Get a real consumer key & secret from https://dev.Twitter.com/apps/new
Twitter = OAuth1Service(
    name='Twitter',
    consumer_key='J8MoJG4bQ9gcmGh8H7XhMg',
    consumer_secret='7WAscbSy65GmiVOvMU5EBYn5z80fhQkcFWSLMJJu4',
    request_token_url='https://api.Twitter.com/oauth/request_token',
    access_token_url='https://api.Twitter.com/oauth/access_token',
    authorize_url='https://api.Twitter.com/oauth/authorize',
    base_url='https://api.Twitter.com/1/')

request_token, request_token_secret = Twitter.get_request_token()

authorize_url = Twitter.get_authorize_url(request_token)

print 'Visit this URL in your browser: ' + authorize_url
pin = raw_input('Enter PIN from browser: ')

session = Twitter.get_auth_session(request_token,
                                   request_token_secret,
                                   method='POST',
                                   data={'oauth_verifier': pin})

params = {'screen_name': 'github',  # User to pull Tweets from
          'include_rts': 1,         # Include retweets
          'count': 10}              # 10 tweets

r = session.get('statuses/user_timeline.json', params=params)

for i, Tweet in enumerate(r.json(), 1):
    handle = Tweet['user']['screen_name'].encode('utf-8')
    text = Tweet['text'].encode('utf-8')
    print '{0}. @{1} - {2}'.format(i, handle, text)

これはそのまま実行できますが、必ず資格情報を更新してください。これらはデモのみを目的としています。

完全開示、私はrauthのメンテナーです。

6
maxcountryman

「無許可」を意味する401の応答があります。 (HTTPステータスコードを参照)

あなたのコードはよさそうだ。 api.user_timeline(screen_name="some_screen_name")を使用すると、私がうそをついている古い例でうまくいきます。

アプリを認証する必要があるか、OAuthの設定に問題があると思います。

これはすでに見つかっているかもしれませんが、ここから始めた短いコード例を次に示します。 https://github.com/nloadholtes/tweepy/blob/nloadholtes-examples/examples/oauth.py

5
Eric Olson