Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Alguns filtros não são exibidos

Olá, quando eu rodo meu arquivo ele não mostra os parâmetros do user.fields, pode me ajudar? Estou seguindo o código do Github que está diferente do que usou no curso. https://github.com/twitterdev/Twitter-API-v2-sample-code/blob/main/Recent-Search/recent_search.py

import requests
import os
import json

# To set your environment variables in your terminal run the following line:
# export 'BEARER_TOKEN'='<your_bearer_token>'
bearer_token = os.environ.get("BEARER_TOKEN")

search_url = "https://api.twitter.com/2/tweets/search/recent"

# Optional params: start_time,end_time,since_id,until_id,max_results,next_token,
# expansions,tweet.fields,media.fields,poll.fields,place.fields,user.fields
query_params = {
    'query': 'AluraOnline',
    'start_time': '2021-12-20T00:00:00.000Z',
    'end_time': '2021-12-25T18:10:59.999Z',
    'tweet.fields':'author_id,conversation_id,created_at,id,in_reply_to_user_id,public_metrics,text',
    'user.fields':'id,name,username,created_at'
    }

def bearer_oauth(r):
    """
    Method required by bearer token authentication.
    """

    r.headers["Authorization"] = f"Bearer {bearer_token}"
    r.headers["User-Agent"] = "v2RecentSearchPython"
    return r

def connect_to_endpoint(url, params):
    response = requests.get(url, auth=bearer_oauth, params=params)
    print(response.status_code)
    if response.status_code != 200:
        raise Exception(response.status_code, response.text)
    return response.json()


def main():
    json_response = connect_to_endpoint(search_url, query_params)
    print(json.dumps(json_response, indent=4, sort_keys=True))


if __name__ == "__main__":
    main()

O retorno não inclui o "includes: users:" lá no final.

4 respostas

Oi Felipe, testei o codigo aqui e ele ta pegando sim o user.fields, acontece que o arquivo de retorno do json não deixa isso explicito, mais a frente nas aulas voce vai aprender a extrair essa informaçoes com metodos usando spark. Voce pode fazer um teste, comente a parte do texto do tweets-fields, no query_params e vera que vai ter uma resposta com o user_fields parecido com isso:

    "data": [
        {
            "id": "1474915248280948747",
            "text": "19 certificados da @AluraOnline em 2 meses, isso pq fiquei empregado e agora n tenho tanto tempo p estudar."
        },

e o mesmo tweet so que agora com o tweet.fields:

"data": [
        {
            "author_id": "850151818176888837",
            "conversation_id": "1474915248280948747",
            "created_at": "2021-12-26T01:29:32.000Z",
            "id": "1474915248280948747",
            "public_metrics": {
                "like_count": 0,
                "quote_count": 0,
                "reply_count": 0,
                "retweet_count": 0
            },
            "text": "19 certificados da @AluraOnline em 2 meses, isso pq fiquei empregado e agora n tenho tanto tempo p estudar."
        },

Qualquer duvida só chamar.

Então, essa parte eu consigo pegar no retorno do JSON sim, mas a parte que me refiro do seu vídeo é esta aqui: No meu JSON não há estes campos que tem no seu vídeo, entende? Isso que fiquei bastante na dúvida.

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

faz um teste, poe esse linha:

print(responde.url)

abaixo do print do seu código:

def connect_to_endpoint(url, params):
    response = requests.get(url, auth=bearer_oauth, params=params)
    print(response.status_code)

Vê o retorno do url.

Obs.: Eu não sou o professor da aula rsrs.

solução!

Resolvi colocando um parâmetro expansions.

query_params = {
    'query': 'AluraOnline', 
    'expansions': 'author_id',
    'user.fields': 'id,name,username,created_at', 
    'start_time': '2021-12-20T00:00:00.000Z',
    'end_time': '2021-12-25T18:10:59.999Z',
    'tweet.fields':'author_id,conversation_id,created_at,id,in_reply_to_user_id,public_metrics,text'
    }

Obrigado pessoal!