7
respostas

[Dúvida] Unauthorized do Twitter_hook

Olá, mestre!

Estou com problema de autorização, nesse caso o problema é referente o numero de requisição do twitter? segue a baixo o erro e o código feito junto ao curso.

Código do github: https://github.com/riversdiniz/extracaoApiTwitter/blob/main/airflow_pipeline/hook/twitter_hook.py

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

7 respostas

Olá, colega. Você conseguiu resolver o seu problema? Eu estava usando token que não era de aplicação e retornava este erro. Então, criei uma conta de developer no twitter, cadastrei um projeto, em seguida uma aplicação e gerei um bearer token (token de portador), aí este erro não deu mais. Em contrapartida, agora dá erro de url não encontrada (404: Not Found). E de fato, se jogar esta url indicada no vídeo 8 do capítulo 2 do curso Engenheiro de Dados com Workflow vai dar url não encontrada e por este motivo, não consegui testar minha conexão com o Twitter pelo Airflow. Relatei isto aqui, veja: https://cursos.alura.com.br/forum/topico-airflow-criar-conexao-com-twitter-267013

Se conseguiu resolver, por favor, pode me falar como deu certo? Desde já, muito obrigada por compartilhar seu conhecimento!

Oi Lunciana, tudo bem?

Na verdade esse meu erro ai em cima que estava dando faltou exportar minha bearer_token e com isso retornava o (401), mais acredito antes de você for subir o airflow vc tem tera que exportar as variaveis dele.

por exemplo no meu fiz assim e deu certo,

source venv/bin/activate export AIRFLOW_HOME=$(PWD)/airflow_pipeline export BEARER_TOKEN=(seutoken)

ah e outra coisa quando você for la no airflown webserver tem a mesma opção de adicionar a conexao, ADMIN->CONNECTIONS-> procurar o twitter_default verificar se login e senha estão preenchida lá, pq se estiver limpar elas e salver e teste novamente.

fiz isso e funcionou. :)

Primeiramente, obrigada pelo retorno colega!Então, eu não estou usando na minha máquina. Estou usando no próprio ambiente da nuvem da plataforma GCP, onde já tem o Airflow configurado em ambiente de produção, com interface webserver ativa, banco initdb, e scheduler com heart bet já funcionando. As cargas já estão rodando diariamente.

O tipo de conexão é HTTP, ou seja, não estou fazendo conexão com login e senha, e sim com a url https://api.twitter.com igual o instrutor orientou no curso, pois só uso o campo Extra onde coloco dicionário json a seguir:

{"Authorization": "Bearer AquiMeuBearerToken"}

A gde. X da questão é que esta url não retorna nada, nem no browser, por isso o erro 404: Not Found.

Qual url vc está usando para consumir a API do Twitter?

Ou vc não preencheu o campo HTTP (HOST), pela sua resposta, acredito que está logando com usuário e senha.

Oi, Luciana!

O meu campo preenchido do host e o mesmo do seu com o link ' https://api.twitter.com' e não adicionei login/password.

também acreditava que era a aspas " no bearer_token depois que fiz a exportação da token não tiver problema.

Oi, River!

Mais uma vez, obrigada por interagir.

E como ficou o seu campo Extra, pode dar um print por favor, ocultando o token? É pra escrever Bearer Token ou só Bearer?

{"Authorization": "Bearer Token JDFJÇFJDFJDLFJDLASFJDLSFJDLJFLDSJF"} {"Authorization": "Bearer DFJDJFDLJFDLSJFLDJFLDSJDJFLDJ"}

Ah! E como você fez esta "Exportação de Token"? Vai que é isso que está faltando pra mim, né?! Por acaso, a exportação que você fala é esta aqui:

export AIRFLOW_CONN_HTTP_DEFAULT='http://username:password@servvice.com:80/https?headers=header'

Segue print de como configurei minha conexão do tipo http sem url e senha, apenas passando o dicionário json com o bearer token no campo Extra, bem como a mensagem de retorno com 404: Not Found.

Conexão HTTPInsira aqui a descrição dessa imagem para ajudar na acessibilidade

Já tentei passar a URL completa no campo HOST da conexão: https://api.twitter.com/2/tweets/search/recent?query=AluraOnline&tweet.fields=author_id,conversation_id,created_at,id,in_reply_to_user_id,public_metrics,text&expansions=author_id&user.fields=id,name,username,created_at&start_time=2023-01-13T00:00:00.00Z&end_time=2023-01-14T00:00:00.00Z

Já tentei passar a URL com as chaves {} dos parâmetros passados em tempo de conexão: https://api.twitter.com/2/tweets/search/recent?query={}&{}&{}&{}

Vc viu algo errado nos meus prints? O que será que está faltando? Mais uma vez, obrigada!

Oi Luciana!

O problema é porque vc colocou uma chave '}' a mais olha meu exemplo, Obs: a token que está no print é fake rs pra ficar melhor pra vc visualizar.

Insira aqui a descrição dessa imagem para ajudar na acessibilidadequalquer coisa dá uma olha no script feito na aula. https://github.com/riversdiniz/extracaoApiTwitter/blob/main/airflow_pipeline/hook/twitter_hook.py

A exportação do token você faz pelo terminal antes de subir o airflow, Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Oi, River. Boa tarde.

Na verdade, o que parece uma outra chaves no finalzinho do meu token é a letra j, veja:

R1KDulGj"}

Continuo na saga... Vamos ver nos próximos vídeos, seguindo o passo a passo, se vai funcionar. Que bom que o seu deu certo!

Eu volto aqui para dizer qual foi o desfecho.

Obrigada!