使用 Tweepy 和 Python,我如何取消关注所有不关注我的帐户,首先从最旧的帐户开始?



请帮帮我。这就是我现在正在工作(我从这里得到它在stackoverflow上),它工作得很好,但它似乎只适用于不跟随我回来的帐户列表中的最新帐户。我想从最老的帐户到最新的帐户开始取消关注,因为我一直达到API的限制。我想做一个追随者的列表,并扭转它,然后插入到某个地方,但不太确定如何做到这一点或语法是什么。提前谢谢。

import tweepy
from cred import *
from config import QUERY, UNFOLLOW, FOLLOW, LIKE, RETWEET
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth, wait_on_rate_limit=True)
def main():
try:

if UNFOLLOW:
my_screen_name = api.get_user(screen_name='YOUR_SCREEN_NAME')
for follower in my_screen_name.friends():
Status = api.get_friendship(source_id = my_screen_name.id , source_screen_name = my_screen_name.screen_name, target_id = follower.id, target_screen_name = follower.screen_name)
if Status [0].followed_by:
print('{} he is following You'.format(follower.screen_name))
else:
print('{} he is not following You'.format(follower.screen_name))
api.destroy_friendship(screen_name = follower.screen_name)
except tweepy.errors.TweepyException as e:
print(e)

while True:
main()
这里是config.py文件

#config.py
UNFOLLOW = True

我最近组装了一些代码片段来达到这个目的,所以我只是复制粘贴我已经在这里的代码,而不是更新您的代码,但我可以指出要点(并给出一些提示)。完整代码:

import tweepy
from cred import *
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth, wait_on_rate_limit=True)

def unfollower():
followers = api.get_follower_ids(screen_name=api.verify_credentials().screen_name)
friends = api.get_friend_ids(screen_name=api.verify_credentials().screen_name)
print("You follow:", len(friends))    

for friend in friends[::-1]:
if friend not in followers:
api.destroy_friendship(user_id = friend)
else:
pass

friends = api.friends_ids(screen_name=api.me().screen_name)
print("Now you're following:", len(friends))
unfollower()

这里发生了什么,和你的代码有什么不同

这两个变量

followers = api.followers_ids(screen_name=api.verify_credentials().screen_name)
friends = api.friends_ids(screen_name=api.verify_credentials().screen_name)

创建一个包含追随者(关注你)和朋友(你正在关注)id的列表,现在我们需要做的就是比较两者。

有一个关于Twitter速率限制的讨论,以及如何使用游标比不使用有更小的速率,但我没有资格解释为什么,所以让我们假设,如果我们不想要小的速率限制,最好的方法是不使用具有固有的小速率限制的请求,如api。get_friendship和他们获取screen_name,而不是我使用get_friend_ids方法。

下一部分涉及到你所说的"创建追随者列表"one_answers"反转",这个列表已经在变量"追随者"中了,所以我们现在需要做的就是用下面的命令反向读取它:

for friend in friends[::-1]:

这表示:"读取列表中的每个元素,从索引-1"大致"倒着读列表"。

好吧,我认为主要是这些,我创建了一个函数,但你真的不需要,只是更容易更新到一个类,如果你需要,这样你就不需要使用while True: main(),只需调用函数unfollow(),它会自动结束脚本当unfollowing结束。

现在有一些可能改进代码的小要点:

不使用

screen_name='YOUR_SCREEN_NAME'

如果需要配置文件或硬编码screen_name,可以使用

screen_name=api.verify_credentials().screen_name

这样,它将自动知道您想要验证用户信息(注意,我没有在代码中使用这一部分,因为get_friend_ids方法不需要screen_name)

现在这部分

from cred import *
from config import QUERY, UNFOLLOW, FOLLOW, LIKE, RETWEET
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth, wait_on_rate_limit=True)

首先,我消除了对配置文件的需要而且你可以消除所有从credit文件导入的额外信息,所以你不需要从credit import *中导入所有的信息,更新credit .py:

import tweepy
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth, wait_on_rate_limit=True)

,现在你只能用from credit import API来导入API函数,这样代码会变得更干净:

import tweepy
from cred import api
def unfollower():
followers = api.get_follower_ids(screen_name=api.verify_credentials().screen_name)
friends = api.get_friend_ids(screen_name=api.verify_credentials().screen_name)
print("You follow:", len(friends))    

for friend in friends[::-1]:
if friend not in followers:
api.destroy_friendship(user_id = friend)
else:
pass

friends = api.get_friend_ids(screen_name=api.verify_credentials().screen_name)
print("Now you're following:", len(friends))
unfollower()

最后,如果有人对api有问题。Get_friend_ids或get_follower_ids记住,版本4.x的tweepy更新。x更改了一些方法的名称,我记得的是:

  • followers_ids现在是get_follower_ids
  • friends_ids现在是get_friend_ids
  • me()现在是verify_credentials()

好了,我想就这些了,你可以在文档中查看其余的。

python快乐!

最新更新