Есть несколько проблем с этим.
Атрибут follow_request_sent
объекта Пользователь , насколько я могу судить, недокументирован, но, кажется, только True
, когдаВы отправили запрос на отслеживание в защищенную учетную запись, и соответствующий пользователь еще не принял его, поэтому даже если вы уже подписаны на пользователя, это будет False
и не будет True
прилюбая точка для учетной записи, которая не защищена.Это то, что вызывает бесконечный цикл.
Вместо этого вы должны использовать атрибут following
, как вы сделали в своем ответе.Однако обратите внимание, что этот атрибут устарел, поэтому было бы разумно использовать вместо него API.show_friendship
.
not
также следует использовать вместо == False
, если вы не ожидаете каких-либодругие ложные значения, которые я не думаю follow_request_sent
возвращает и которые following
определенно не возвращает.Обратите внимание, что following
имеет значение NULL, что означает, что API Twitter может возвращать значение «NULL», но Tweepy преобразует его в False
.
Вы также рекурсивно вызываете функцию.
Это, вместе с циклом, совершенно ненужно и очень плохая практика.
Поскольку у вас уже есть объект User, вам следует просто использовать его вспомогательную функцию follow
вместо использования API.create_friendship
.Это также устанавливает для атрибута following
значение True
, поэтому объект User будет обновляться.
Я не уверен, какова цель tweet = api.get_status(tweet.id)
, если tweet
уже является объектом Status.Вы выполняете ненужный запрос API для получения того же объекта Status, который у вас уже есть.Вам не нужно обновлять объект Status следующим образом.
В вашем ответе у вас также есть id = tweet.retweeted_status.user.id
.Обратите внимание, что это приведет к ошибке, если рассматриваемый статус не является ретвитом.Вы также следуете за автором исходного твита вместо ретвита и выполняете еще один ненужный запрос API, чтобы получить тот же объект пользователя, который у вас уже есть.
Примечание, @ Moshe Slavi ответ будет бесконечно повторяться, потому что counter
не уменьшается и всегда равен 100, и оба ответа @Moshe Slavi и @ user15051990 * answer будут бесконечно повторяться, еслипользователь, за которым вы пытаетесь подписаться, не имеет защищенной учетной записи.
Для получения дополнительной информации см. мой ответ на GitHub .