O gráfico de conhecimento do DiffBot tem um objetivo simples – traga a soma total de todo o conhecimento para a ponta dos dedos por meio de uma pesquisa que enfatiza dados e relações em relação a uma experiência simples de mecanismo de pesquisa baseada em texto. Oferecido por toda a web, o Knowledge Graph permite executar consultas complexas contra bilhões de pontos de dados instantaneamente por meio de uma API simples. Decidi dar uma volta com a API e criar uma ferramenta “relativamente” simples – análise de notícias para um produto executado na plataforma automatizada. Deve ser fácil, certo? Vamos lá. Observe que os exemplos nesta postagem do blog assumem que você obteve uma chave gratuita do DiffBot. Certifique -se de fazer isso antes de experimentar as amostras.
Projetando a consulta
Antes de escrever uma linha de código, eu assinei o DiffBot e abri sua ferramenta de pesquisa visual para gráfico de conhecimento. A ferramenta permite criar consultas visualmente ou manualmente. As consultas são conhecidas como declarações ‘DQL’ no DiffBot e são bastante simples de ler, mesmo que você nunca tenha visto a sintaxe antes.
A partir dessa ferramenta, comecei selecionando um tipo de entidade. Esse é o tipo de dados de alto nível que quero pesquisar e pode ser uma das muitas opções inúmeras, de pessoas a eventos a filmes e investimentos. Selecionei o “artigo” como minha intenção é encontrar notícias que estão falando mal do meu maravilhoso produto. Eu então selecionei uma opção “filtro por”. Enquanto você pode filtrar por qualquer propriedade no tipo de entidade, eu usei tags.label
Como é uma correspondência mais precisa do que uma simples pesquisa de texto. Enquanto um filtro de texto funciona, usando tags.label
fornece um resultado muito melhor, garantindo que os resultados estejam focados na minha pesquisa, não apenas mencionando casualmente. Para minha demonstração, procurarei artigos sobre “Xbox”.
Eu também usei o valor “Classificar por” para mostrar mais recente primeiro e essa pesquisa de sucesso para ver se meus resultados faziam sentido.
Embora meus resultados iniciais não incluíssem resultados de idiomas estrangeiros, eu sabia que gostaria de filtrar para resultar em inglês, então adicionei um filtro para o idioma. Atingindo o sinal + pelo filtro atual, consegui adicionar linguagem e en
para inglês. Mais uma vez, bati na pesquisa:
Tudo bem, então, em seguida, quero filtrar apenas resultados negativos. O artigo do Knowledge Graph entidades tem uma pontuação de sentimento (você pode vê -las nos resultados da pesquisa) que passam de -1 para o mais negativo para 1 para o mais positivo. Inicialmente, simplesmente selecionei itens com um sentimento menor ou igual a 0.
Woot, chegando lá. Como um passo final, eu sabia que isso seria automatizado e filtrado para itens ‘recentes’, então adicionei mais um filtro, desta vez em date
selecionado after
e escolheu uma data de uma semana atrás.
Neste ponto, a consulta parece boa, então vamos copiar o valor da consulta fornecido pela ferramenta:
type:Article tags.label:"Xbox" language:"en" sentiment<=0 date>"2025-03-03" sortBy:date
Escreva o código
Projetar a consulta foi realmente a parte difícil. Para o código, fui aos documentos de pesquisa. Os exemplos são baseados em CURL/HTTP, mas muito fáceis de transportar para Python ou qualquer outro idioma. Considere esta amostra:
import os
import requests
import json
import urllib.parse
token = os.environ.get("db_token")
query = 'type:Article tags.label:"Xbox" language:"en" sentiment<=0 date>"2025-03-03" sortBy:date'
apiCall = f"
req = requests.get(apiCall)
results = json.loads(req.content)
print(f"Total results, {results['hits']}")
for result in results["data"]:
print(result["entity"]["title"])
print(result["entity"]["date"]["str"])
print(result["entity"]["summary"])
if "author" in result["entity"]:
print(result["entity"]["author"])
print(result["entity"]["siteName"])
print(result["entity"]["pageUrl"])
print(result["entity"]["sentiment"])
print("------------------------------------")
Quebrando isso – comecei com minha consulta da ferramenta visual. Isso então recebe o URL codificado e passou para a API para gráfico de conhecimento. O único item novo real que há a adição de size=25
Para manter o resultado definido em um limite sensato.
Eu chamo a API, imprimo os resultados totais encontrados (do hits
resultado) e, em seguida, itera cada um mostrando várias informações do resultado. Aqui estão alguns dos resultados:
Total results, 68
Xbox will release its first handheld gaming console this year, report claims
d2025-03-10T19:37
Windows Central expects the console to take advantage of the widgets on the Xbox Game Bar to let use...
Jacob Siegal
BGR
0
------------------------------------
Rumour: Next-Gen Xbox a 'PC in Essence' - What Would That Mean for PlayStation?
d2025-03-10T19:00
Recent comments from Windows Central's executive editor Jez Corden have sparked discussion about whe...
Stephen Tailby
Push Square
0
------------------------------------
Xbox handheld out this year and will go up against Nintendo Switch 2 says source
d2025-03-10T18:50
New rumours about Microsoft’s next gen plans suggests that there will be two Xbox handheld consoles ...
GameCentral
Metro
0
Isso funciona, mas agora vamos tornar a data dinâmica. Comecei a importar de datetime
:
from datetime import datetime, timedelta
Eu então gerei uma data formatada para a semana passada:
today = datetime.now()
lastWeek = today + timedelta(days=-7)
fLastWeek = lastWeek.strftime("%Y-%m-%d")
E o último bit foi apenas incluir essa data na minha consulta:
query = f'type:Article tags.label:"Xbox" language:"en" sentiment<=0 date>{fLastWeek} sortBy:date'
Você pode ver o código -fonte completo para a versão inicial aqui e a versão final aqui.
Construindo a automação
Tudo bem, hora de automatizar isso. Para minha automação, estarei usando o tubo de tubulação, um incrivelmente Sistema flexível de fluxo de trabalho que usei muitas vezes no passado. Aqui está todo o fluxo de trabalho com cada parte construída:
Comecei meu fluxo de trabalho com um simples gatilho baseado em programação, ou seja, quando executar. Isso foi um tanto arbitrário, mas eu escolhi semanalmente, no domingo, às 13h.
O próximo passo, getArticles
lida com a lógica que demonstrei anteriormente, mas agora em um “manipulador de fluxo de tubulação”, que é a maneira padrão de escrever etapas de código no fluxo de trabalho do fluxo de tubulação.
import os
import requests
import json
from datetime import datetime, timedelta
import urllib.parse
def handler(pd: "pipedream"):
token = os.environ.get("db_token")
today = datetime.now()
lastWeek = today + timedelta(days=-7)
fLastWeek = lastWeek.strftime("%Y-%m-%d")
query = f'type:Article tags.label:"Xbox" language:"en" sentiment<=0 date>{fLastWeek} sortBy:date'
apiCall = f"
req = requests.get(apiCall)
return json.loads(req.content)
A próxima etapa é simplesmente uma etapa rápida de código para encerrar o fluxo de trabalho se não forem encontrados resultados:
def handler(pd: "pipedream"):
if len(pd.steps["getArticles"]["$return_value"]["data"]) == 0:
pd.flow.exit("No results")
Agora eu quero ‘massagear’ os resultados um pouco. Vou eventualmente enviar isso por e -mail para mim mesmo, então criei uma etapa para formatar os resultados em uma boa corda:
from datetime import datetime
def handler(pd: "pipedream"):
email = f"""
Negative Article Results:
Our search found {pd.steps["getArticles"]["$return_value"]["hits"]} results. Here are the top 25:
"""
for result in pd.steps["getArticles"]["$return_value"]["data"]:
date = datetime.fromtimestamp(result["entity"]["date"]["timestamp"] / 1000)
date_f = date.strftime("%Y-%m-%d")
email += f"""
{result["entity"]["title"]}
Sentiment: {result["entity"]["sentiment"]}
Published: {date_f}
Link: {result["entity"]["pageUrl"]}
"""
return email
Novamente, isso é um tanto arbitrário em termos do que eu pensei importante o suficiente para incluir. Você definitivamente poderia ficar mais sofisticado e até fazer coisas como “em um sentimento muito ruim, adicionar cor, bandeiras vermelhas, etc”.
A etapa final foi simplesmente me enviar os resultados. O PipedReam suporta um passo “Envie um email para o proprietário da conta” que fará exatamente isso, envie um email. Se eu estivesse construindo isso para um cliente, eu usaria uma das muitas etapas embutidas de tubulação para APIs de email.
Uma vez executado, recebo um bom e -mail com uma lista de artigos e seus sentimentos:
Se você optar por dar uma volta do Pipedream, poderá encontrar meu fluxo de trabalho aqui: https://github.com/cfjedimaster/general-pipedream-ai-stuff/tree/production/report-on-sentiment-p_gycenbg
O que vem a seguir?
Este é apenas um exemplo de uso da API de gráfico de conhecimento do DiffBot e, como lembrete, os artigos são apenas um dos muitos tipos diferentes de dados que você pode pesquisar. Tudo o que fiz aqui também foi feito em um conta completamente gratuitapara que você possa se inscrever absolutamente e experimentá -lo. Vou me aprofundar mais, então me avise se você tiver alguma dúvida!