2013-03-26 30 views
10

Tôi đang cố truy xuất dữ liệu từ Twitter, sử dụng Tweepy cho tên người dùng được nhập tại dòng lệnh. Tôi muốn trích xuất khá nhiều dữ liệu về trạng thái và người dùng, do đó, hãy đưa ra các thông tin sau:Làm cách nào để tôi có thể truy xuất tất cả các Tweet và thuộc tính cho một người dùng cụ thể bằng cách sử dụng Python?

Lưu ý rằng tôi đang nhập tất cả các mô-đun cần thiết ok và có các khóa oauth + (không bao gồm ở đây) và tên tệp là chính xác, chỉ được thay đổi:

# 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) 

Tôi muốn điều này cuối cùng được lặp qua tất cả các tweet của người dùng (tối đa giới hạn 3200). Điều đầu tiên mặc dù. Cho đến nay mặc dù tôi có hai vấn đề, tôi nhận được thông báo lỗi sau về retweets:

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 

Đi qua tên người dùng như là một biến có vẻ là một vấn đề còn:

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 

Tôi đã bị cô lập cả hai lỗi, nghĩa là chúng không hoạt động cùng nhau.

Tha thứ sự thiếu hiểu biết của tôi, tôi không quá nóng với các API Twitter nhưng tôi đang học khá nhanh. Tweepy tài liệu thực sự không hút và tôi đã thực hiện tải đọc vòng trên mạng, chỉ có thể không có vẻ để có được điều này cố định. Nếu tôi có thể có được sắp xếp này, tôi sẽ đăng một số tài liệu.

Tôi biết cách chuyển dữ liệu vào một db của MySQL một khi được trích xuất (nó sẽ làm điều đó, thay vì in ra màn hình) và thao tác nó để tôi có thể làm việc với nó, nó chỉ là nhận ra rằng tôi gặp vấn đề với. Có ai có bất kỳ ý tưởng hoặc là có một phương pháp tôi nên xem xét?

Bất kỳ trợ giúp nào thực sự đánh giá cao. Chúc mừng

CHỈNH SỬA:

Tiếp theo từ đề xuất của @Eric Olson sáng nay; Tôi đã làm như sau.

1) Đã tạo bộ thông tin đăng nhập Oauth hoàn toàn mới để kiểm tra. 2) mã được sao chép qua đến một kịch bản mới như sau:

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") 

Lần đầu tiên tôi chạy kịch bản, nó hoạt động tốt và cập nhật tình trạng của tôi và trả về tên API như sau:

>>> 
API NAME IS: Chris Howden 

Sau đó, từ thời điểm đó tôi có được điều này:

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 

Các chỉ có lý do tôi có thể nhìn thấy nó làm một cái gì đó như thế này là nó đang từ chối mã thông báo truy cập được tạo ra. Tôi không cần phải gia hạn mã thông báo truy cập phải không?

Trả lời

6

Nếu bạn đang mở để cố gắng thư viện khác, bạn có thể đưa rauth một shot. Có đã a Twitter example nhưng nếu bạn đang cảm thấy lười biếng và chỉ muốn một ví dụ làm việc, dưới đây là cách tôi muốn sửa đổi mà kịch bản demo:

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) 

Bạn có thể chạy như nó vốn có, nhưng hãy chắc chắn để cập nhật các thông tin quan trọng! Đây chỉ dành cho mục đích demo.

Tiết lộ đầy đủ, tôi là người duy trì cuộc đột kích.

+0

Ace, cảm ơn những nỗ lực của bạn. Tôi có trong khi chờ đợi mang theo để tìm một cách khác để có được tất cả những gì tôi muốn bằng cách sử dụng các mô-đun tweepy, nhưng điều này giúp để có được để hiểu json tốt hơn một chút. – chowden

+0

Tôi sẽ đăng nội dung tôi đã tìm thấy khi hoàn tất. – chowden

5

Bạn nhận được phản hồi 401, có nghĩa là "Không được ủy quyền". (see HTTP status codes)

Mã của bạn có vẻ tốt. Sử dụng api.user_timeline(screen_name="some_screen_name") làm việc cho tôi trong ví dụ cũ tôi đã nói dối.

Tôi đoán bạn cần ủy quyền ứng dụng hoặc có một số sự cố với thiết lập OAuth của bạn.

Có lẽ bạn thấy điều này đã có, nhưng đây là ví dụ mã ngắn mà tôi bắt đầu từ: https://github.com/nloadholtes/tweepy/blob/nloadholtes-examples/examples/oauth.py

+0

Chúc mừng. Tôi đã điều tra thêm một chút sáng nay và tôi đã thêm một số phát hiện bổ sung vào bài đăng gốc ... – chowden

Các vấn đề liên quan