Bom dia, boa tarde, boa noite!
Este é o segundo post da série sobre o projeto Video Creator, onde mostrarei o consumo de RSS do Google trends e a busca pelos Trending topics do Twitter para sugerir conteúdos para o video.
Se você entrou direto nesse post, te aconselho a começar por aqui, para entender exatamente do que se trata essa série.
Sobre essa parte
Para esse projeto, resolvi mostrar apenas o primeiro colocado do Google e do Twitter, porém os serviços retornam bem mais informações que vocês podem consumir e utilizar para personalizar o robô de vocês.
Lembrem-se, esse projeto é apenas uma POC… um start pra coisas maiores.
Requisitos
Essa parte é bastante simples, pois o Google possui um serviço de RSS aberto onde você consegue ver os assuntos mais buscados do dia. E o Twitter possui uma API bastante simples de consumir, onde também faremos uso do de uma requisição simples a uma URL, a diferença é que para o Twitter, precisaremos de uma API KEY.
Para o Google, utilizei a seguinte URL:
https://trends.google.com.br/trends/trendingsearches/daily/rss?geo=BR
Ao consultar a URL, temos o documento XML seguinte:
Isso é muito legal! 😀
Para o Twitter, utilizei URL padrão da api, passando como parâmetro o id referente ao Brasil, assim, o resultado será apenas os trending topics do Brasil:
https://api.twitter.com/1.1/trends/place.json?id=23424768
Então basicamente o que precisei fazer, foi bater nessas URLs e fazer o parser para dentro do meu código para extrair os dados que eu queria, que nesse caso, foi apenas o atributo title
do Google Trends, e o atributo name
do Trending Topics do primeiro colocado.
Pra isso utilizei as libs requests e xmltodict:
import requests
import xmltodict
Para o Google trends, encapsulei a requisição e o parser na função abaixo:
def get_google_trends():
def parser_xml(v_xml):
key_words = []
# parser
content_xml = xmltodict.parse(v_xml)
for i in content_xml['rss']['channel']['item']:
rel_news = []
for j in i['ht:news_item']:
if not isinstance(j, str):
rel_news.append(j['ht:news_item_title'])
obj = {
"title": "{}".format(i['title']),
"traffic": "{}".format(i['ht:approx_traffic']),
"pubDate": "{}".format(i['pubDate']),
"description": "{}".format(i['description']),
"related_news": rel_news,
"dateInsert": datetime.datetime.now()
}
key_words.append(obj)
return key_words
logging.info("--- Getting GOOGLE TRENDS ---")
# URL do trending topics do Google
url = "https://trends.google.com.br/trends/trendingsearches/daily/rss?geo=BR"
content = requests.get(url)
return parser_xml(content.text)
E para o trending topics do Twitter:
def get_twitter_trends():
logging.info("--- Getting TWITTER TRENDS ---")
headers = {"Authorization": "Bearer {}".format(credentials['api_bearer_token'])}
url = "https://api.twitter.com/1.1/trends/place.json?id=23424768"
response = requests.get(url, headers=headers)
content = []
for i in response.json():
for j in i['trends']:
content.append({
"at": datetime.datetime.now(),
"as_of": i['as_of'],
"location": i['locations'][0]['name'],
"name": j['name'],
"tweet_volume": j['tweet_volume']
})
return content
Essas 2 funções são chamadas dentro de uma outra função que detalharei no próximo post onde falarei sobre a busca pelo conteúdo desejado na wikipedia.
Até o próximo post!
Abraços!