2016-01-07 3 views
1

Я пытаюсь сделать «простой» сценарий, который отменит список пользователей, за которыми я следую, которые не следуют мне, используя модуль Tweepy для Python 3.5.Tweedy: AttributeError: объект 'tuple' не имеет атрибута 'follow_by'

import sys, time, tweepy 

auth = tweepy.OAuthHandler('Consumer Key', 'Consumer Secret') 
auth.set_access_token('Access Token', 'Access Token Secret') 

api = tweepy.API(auth) 

for page in tweepy.Cursor(api.friends, screen_name='My Twitter Handle').pages(): 
    for friend in page: 
     relationship = api.show_friendship(source_screen_name='My Twitter Handle', target_screen_name=friend.screen_name) 
     print(relationship.followed_by) 
     time.sleep(13) 
print('\nDone.') 
sys.exit() 

В настоящее время целью вышеуказанного кода является просто распечатать пользователей, которые не преследуют меня. Когда выполняется код, Python бросает это на меня:

AttributeError: 'tuple' object has no attribute 'followed_by' 

Я знаю, что это не верно, так как документация Twitter упоминает его here.

Однако я не эксперт, поэтому я задаю этот вопрос здесь. Любая идея, что я делаю неправильно?

+0

вы по крайней мере смотреть на то, что переменная действительно содержит? – njzk2

ответ

1

Прежде всего, если вы внимательно прочитали документ Twitter, необработанный API вернет {target: .., source: ..}, not {followed_by: .., ..}.

Во-вторых, вы работаете с Tweepy, который является оберткой необработанного API. Согласно документу Tweepy, он возвращает объект friendship (http://tweepy.readthedocs.org/en/v3.2.0/api.html#API.show_friendship). Однако он не объясняет, как мы можем использовать этот объект. Перейдя к своему источнику, https://github.com/tweepy/tweepy/blob/master/tweepy/models.py#L237, он возвращает кортеж source, target. И source, и target имеет атрибут followed_by. Я не уверен, какой из них вы ищете, но вот как бы вы к ним доступ:

source, target = relationship 
print(source.followed_by) 
print(target.followed_by) 
0

Прямой ответ на сомнения & альтернативный подход к своей цели (ниже)

Для новой версии Tweepy (3.5.0), show_friendship() возвращает кортеж из двух элементов, каждый из которых принадлежит каждому пользователю. Например:

result = api.show_friendship(A, B) 
result 

Возвращает кортеж

(Friendship(blocked_by=False, muting=False,..., screen_name = A, ...), Friendship(blocked_by=False, muting=False,..., screen_name = B, ...) 

Затем, если вы хотите получить доступ к атрибуту followed_by просто сделать следующее:

result[0].followed_by 

И вы получите атрибут вы спрашиваете для.

Альтернативный подход к цели:

Если вам нужно что просто проверить, кто следит за вами, а кто нет, простой способ открыть для себя это, получая разницу множество между людьми, вы будете следовать и людей, следующих за вами. Для того, чтобы сделать это, вы могли бы применить код я обеспечиваю ниже:

import tweepy 

Consumer Key = 'XXXXXXXXXXXX' 
ConsumerSecret = 'XXXXXXXXXXXX' 
AccessToken = 'XXXXXXXXXXXX' 
AccessTokenSecret = 'XXXXXXXXXXXX' 

#Keys for the program 
auth = tweepy.OAuthHandler(ConsumerKey, ConsumerSecret) 
auth.set_access_token(AccessToken, AccessTokenSecret) 

#Inialize the API: 
api = tweepy.API(auth) 

#Get your followers and friends: 
friendNames, followNames = [], [] 
for friend, follower in zip(tweepy.Cursor(api.friends).items(), 
          tweepy.Cursor(api.followers).items()): 
    friendNames.append(friend.name) 
    followNames.append(follower.name) 

#Create sets to see who is not following you: 
friendset = set(friendNames) 
followset = set(followNames) 
not_fback = friendset.difference(followset) 

И переменная not_fback будет набор со всеми пользователями, которые не следуют вас обратно.

0

Код @ Jzbach имеет ошибку, поскольку циклы должны быть разделены, потому что маловероятно, что у вас одинаковое количество последователей и друзей.

С помощью этого патча сценарий извлечь правильные подмножества

#Get your followers and friends: 
 
friendNames, followNames = [], [] 
 

 
for friend in tweepy.Cursor(api.friends).items(): 
 
\t friendNames.append(friend.screen_name) 
 

 
for follower in tweepy.Cursor(api.followers).items(): 
 
    followNames.append(follower.screen_name)

Смежные вопросы