1
resposta

Ajuda com api do twitter/X

Estou fazendo um app em python para que acesse minha conta e a partir da minha conta ele busque por outras e curta e retweet as postagens da conta alvo. Embora eu tenha conseguido criar postagens pré-definidas de uma lista e postado na rede estou com dificuldade de desenvolver um que curta e reposte, sempre que rodo o programa ele da "erro 401 não autorizado". Já verifiquei as autorizações das chaves de acesso da minha conta e estão com todas as permissões.

import tweepy
import chavesDeAcesso

# Inicializa o cliente do Tweepy com OAuth2
client = chavesDeAcesso.conta1

def buscar_e_interagir(usuario_alvo):
    try:
        # Obtém os dados do usuário alvo
        user_response = client.get_user(username=usuario_alvo)
        if user_response.errors:
            for error in user_response.errors:
                print(f"Erro ao buscar usuário: {error.detail}")
            return

        user_id = user_response.data.id
        print(f"ID do usuário alvo: {user_id}")

        # Obtém os tweets mais recentes do usuário alvo
        user_timeline = client.get_users_tweets(id=user_id, tweet_fields=["id", "created_at"], max_results=5)
        if user_timeline.errors:
            for error in user_timeline.errors:
                print(f"Erro ao obter tweets: {error.detail}")
            return

        if user_timeline.data:
            for tweet in user_timeline.data:
                tweet_id = tweet.id

                # Verifica se o tweet já foi curtido
                try:
                    client.like(tweet_id)
                    print(f"Tweet {tweet_id} curtido com sucesso!")
                except tweepy.TweepyException as e:
                    print(f"Erro ao curtir tweet {tweet_id}: {e}")

                # Verifica se o tweet já foi retweetado
                try:
                    client.retweet(tweet_id)
                    print(f"Tweet {tweet_id} retweetado com sucesso!")
                except tweepy.TweepyException as e:
                    print(f"Erro ao retweetar tweet {tweet_id}: {e}")
        else:
            print("Nenhum tweet encontrado para o usuário alvo.")
    except tweepy.TweepyException as e:
        print(f"Erro ao obter tweets do usuário alvo: {e}")

if __name__ == "__main__":
    try:
        user_response = client.get_me()
        if user_response.errors:
            for error in user_response.errors:
                print(f"Erro ao obter usuário autenticado: {error.detail}")
        else:
            print(f"Autenticado como: {user_response.data.username}")
            usuario_alvo = "exemplo"  # Substitua pelo nome de usuário do alvo
            buscar_e_interagir(usuario_alvo)
    except tweepy.TweepyException as e:
        print(f"Erro de autenticação: {e}")
1 resposta

Olá João! Tudo joia?

Um ponto-chave é que, mesmo que as chaves de acesso tenham todas as permissões, é importante garantir que você está utilizando o método correto de autenticação para as ações que deseja realizar (curtir e retweetar).

Aqui estão algumas sugestões para resolver o problema:

  1. Verifique as permissões da aplicação: Certifique-se de que a aplicação no Twitter Developer Portal tem permissões de leitura e gravação. A permissão de "Read and Write" é necessária para curtir e retweetar.

  2. Atualize a autenticação: O Tweepy agora recomenda o uso do OAuth 1.0a para ações que requerem autenticação do usuário. Abaixo está um exemplo de como você pode configurar isso:

import tweepy

# Substitua pelas suas próprias chaves e tokens
consumer_key = 'SUA_CONSUMER_KEY'
consumer_secret = 'SEU_CONSUMER_SECRET'
access_token = 'SEU_ACCESS_TOKEN'
access_token_secret = 'SEU_ACCESS_TOKEN_SECRET'

# Autenticação com OAuth 1.0a
auth = tweepy.OAuth1UserHandler(consumer_key, consumer_secret, access_token, access_token_secret)
api = tweepy.API(auth)

def buscar_e_interagir(usuario_alvo):
    try:
        # Obtém os dados do usuário alvo
        user = api.get_user(screen_name=usuario_alvo)
        user_id = user.id_str
        print(f"ID do usuário alvo: {user_id}")

        # Obtém os tweets mais recentes do usuário alvo
        user_timeline = api.user_timeline(user_id=user_id, count=5)
        for tweet in user_timeline:
            tweet_id = tweet.id

            # Curtir o tweet
            try:
                api.create_favorite(tweet_id)
                print(f"Tweet {tweet_id} curtido com sucesso!")
            except tweepy.TweepError as e:
                print(f"Erro ao curtir tweet {tweet_id}: {e}")

            # Retweetar o tweet
            try:
                api.retweet(tweet_id)
                print(f"Tweet {tweet_id} retweetado com sucesso!")
            except tweepy.TweepError as e:
                print(f"Erro ao retweetar tweet {tweet_id}: {e}")
    except tweepy.TweepError as e:
        print(f"Erro ao obter tweets do usuário alvo: {e}")

if __name__ == "__main__":
    try:
        user = api.me()
        print(f"Autenticado como: {user.screen_name}")
        usuario_alvo = "exemplo"  # Substitua pelo nome de usuário do alvo
        buscar_e_interagir(usuario_alvo)
    except tweepy.TweepError as e:
        print(f"Erro de autenticação: {e}")
  1. Verifique o tipo de token: A autenticação com OAuth 2.0 (Bearer Token) é geralmente usada para operações de leitura, mas para ações que modificam dados (como curtir e retweetar), o OAuth 1.0a é necessário.

Espero que essas dicas ajudem a resolver o problema.

Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.