A API pushshift.io Reddit foi projetada e criada pela equipe de mod /r/datasets para ajudar a fornecer funcionalidade aprimorada e recursos de pesquisa para pesquisar comentários e envios do Reddit. O líder do projeto, /u/stuck_in_the_matrix, é o mantenedor dos arquivos de comentários e envios do Reddit localizados em https://files.pushshift.io.
Esta API RESTful oferece funcionalidade completa para pesquisa de dados do Reddit e também inclui a capacidade de criar agregações de dados poderosas. Com esta API, você pode encontrar rapidamente os dados de seu interesse e encontrar correlações fascinantes.
Existem duas maneiras principais de acessar o banco de dados de comentários e envios do Reddit. Uma é usando a API diretamente via https://api.pushshift.io/ e a outra é acessando o mecanismo de busca back-end Elasticsearch via https://elastic.pushshift.io/ Este documento explicará ambas as abordagens e fornecerá exemplos sobre como usar a API de maneira eficaz. Este documento também explorará o uso dos parâmetros da API para utilizar pesquisas mais específicas.
Existem dois pontos de extremidade principais usados para pesquisar todos os comentários e envios disponíveis publicamente no Reddit:
Na próxima seção, exploraremos como realizar pesquisas mais eficazes usando o endpoint de pesquisa de comentários.
Para pesquisar comentários, use o endpoint https://api.pushshift.io/reddit/search/comment/. Vamos começar com alguns exemplos e depois examinar os vários parâmetros disponíveis ao usar este endpoint. Uma das pesquisas mais simples é usar apenas o parâmetro q. O parâmetro q é usado para pesquisar uma palavra ou frase específica. Aqui está um exemplo:
Pesquise os comentários mais recentes que mencionam a palavra "ciência"
https://api.pushshift.io/reddit/search/comment/?q=science
Isto irá pesquisar os comentários mais recentes com o termo "ciência" no corpo do comentário. Esta pesquisa não diferencia maiúsculas de minúsculas, portanto encontrará qualquer ocorrência do termo "ciência", independentemente da capitalização. O padrão da API é classificar primeiro os comentários feitos recentemente. Após realizar esta busca, são retornados 25 resultados. Este é o tamanho padrão para pesquisas e pode ser ajustado usando o parâmetro size. Isso será discutido com mais detalhes na seção de parâmetros. Os dados são retornados no formato JSON e os resultados reais da pesquisa são incluídos na chave "data". Há também uma chave de "metadados" que fornece informações adicionais sobre a pesquisa, incluindo o número total de resultados encontrados, quanto tempo a pesquisa levou para ser processada, etc. Se agregações forem solicitadas, todos os dados de agregação serão retornados na chave aggs.
Existem vários parâmetros adicionais que podem ser usados ao realizar uma pesquisa de comentários. Vamos examiná-los e fornecer exemplos para cada um.
Parâmetro | Descrição | Padrão | Valores Aceitos |
---|---|---|---|
q | Termo de pesquisa. | N / D | String / String entre aspas para frases |
IDs | Obtenha comentários específicos por meio de seus IDs | N / D | IDs base36 delimitados por vírgula |
tamanho | Número de resultados a serem retornados | 25 | Inteiro <= 500 |
campos | Um campo específico de retorno (delimitado por vírgula) | Todos os campos retornados | string ou string delimitada por vírgula |
organizar | Classifique os resultados em uma ordem específica | "desc" | "asc", "desc" |
tipo_classificação | Classificar por um atributo específico | "criado_utc" | "pontuação", "num_comments", "criado_utc" |
ag | Resumo de agregação de retorno | N / D | ["autor", "link_id", "criado_utc", "subreddit"] |
autor | Restringir a um autor específico | N / D | Corda |
subreddit | Restringir a um subreddit específico | N / D | Corda |
depois | Retornar resultados após esta data | N / D | Valor de época ou número inteiro + "s,m,h,d" (ou seja, 30d por 30 dias) |
antes | Retornar resultados antes desta data | N / D | Valor de época ou número inteiro + "s,m,h,d" (ou seja, 30d por 30 dias) |
freqüência | Usado com o parâmetro aggs quando definido comocreated_utc | N / D | “segundo”, “minuto”, “hora”, “dia” |
metadados | exibir metadados sobre a consulta | falso | "verdadeiro", "falso" |
Você pode recuperar comentários diretamente usando o parâmetro ids. Para obter um lote de comentários por ID, use o seguinte exemplo:
Recuperar três comentários usando seus valores de id de base 36
https://api.pushshift.io/reddit/comment/search?ids=dlrezc8,dlrawgw,dlrhbkq
Existem alguns parâmetros a serem revisados, então vamos começar fornecendo alguns exemplos mais complexos e como usar os parâmetros acima. Vamos continuar com o exemplo anterior acima e expandir nossa pesquisa por palavra-chave “ciência”. E se quiséssemos pesquisar o termo “ciência”, mas restringi-lo a um subreddit específico? Usando o parâmetro subreddit, podemos fazer isso:
Pesquise os comentários mais recentes que mencionam a palavra "ciência" no subreddit /r/askscience
https://api.pushshift.io/reddit/search/comment/?q=science&subreddit=askscience
Isso retornará 25 comentários contendo o termo "ciência", mas apenas do subreddit /r/askscience. Como não solicitamos um método de classificação específico, os comentários mais recentes são retornados (o padrão do parâmetro de classificação é "desc"). E se quiséssemos o primeiro comentário em /r/askscience que mencionasse a palavra “ciência”? Poderíamos usar os parâmetros de classificação e tamanho para lidar com isso.
Pesquise os comentários mais recentes que mencionam a palavra "ciência" no subreddit /r/askscience
https://api.pushshift.io/reddit/search/comment/?q=science&subreddit=askscience&sort=asc&size=1
Este é o resultado:
{
"data": [
{
"author": "MockDeath",
"author_flair_css_class": null,
"author_flair_text": null,
"body": "Knowing more would definitely help. I guess all you can do is find out if they know the basics like you said then take it from there. That COu00b2 has the carbon turned to the isotope carbon14 in the upper atmosphere by cosmic radiation. This causes a specific percentage of carbon in the atmosphere to be carbon14.nnNow we are carbon based life forms and we have to get the carbon we are built out of from some where. We get it from eating plants, and the plants get it from absorbing COu00b2 from the air. So so long as we are alive, we uptake new carbon14. So this gives you a pretty good base line for dating.nnNow to fight arguments against carbon dating you could use the example of how we can see proton collisions in the LHC for sensitivity of our equipment. Nuclear decay is very accurate in how fast it happens, this is why atomic clocks work to a much higher degree of accuracy than other methods of time keeping. Also, you might want to make a general appeal for science. Science works, that is why we have TV's, robots, particle accelerators, satellites, computers, MRI and CAT scanners, nuclear power, etc etc. Scientists are not just willy nilly making shit up, or these kinds of things wouldn't work.",
"created_utc": 1270637661,
"id": "c0nn9iq",
"link_id": "t3_bne3u",
"parent_id": "t1_c0nn5ux",
"score": 2,
"subreddit": "askscience",
"subreddit_id": "t5_2qm4e"
}
],
"metadata": {
"execution_time_milliseconds": 30.52,
"results_returned": 1,
"shards": {
"failed": 0,
"successful": 36,
"total": 36
},
"size": 1,
"sort": "asc",
"sort_type": "created_utc",
"timed_out": false,
"total_results": 134785,
"version": "v3.0"
}
}
A partir do resultado retornado, podemos ver que o primeiro comentário feito em /r/askscience mencionando "ciência" aconteceu na data de época 1270637661, que se traduz em quarta-feira, 7 de abril de 2010, 10:54:21 AM (GMT). Vamos examinar rapidamente as partes dos metadados. Podemos observar que o tempo de execução desta busca foi em torno de 30 milissegundos. Houve um total de 36 fragmentos pesquisados e todos foram bem-sucedidos. A pesquisa não expirou (parâmetro timed_out), o que é bom. Este é um atributo que você pode querer verificar se usar a API programaticamente, pois algumas pesquisas mais complicadas podem, às vezes, atingir o tempo limite. O valor total_resultados é 134.785. Isso nos diz o número total de comentários em /r/askscience que mencionam a palavra ciência. Como não usamos os parâmetros antes ou depois, esse número representa a totalidade dos comentários feitos ao /r/askscience.
Vamos continuar usando parâmetros adicionais para destacar o poder da API de pesquisa. Os parâmetros antes e depois permitem restringir o período de pesquisa, fornecendo um carimbo de data e hora de época para ambos. No entanto, a API também entende valores mais humanos para os parâmetros antes e depois. Você pode usar um número seguido pelos caracteres s,m,h,d (que significam segundo, minuto, hora e dia) para limitar o período de tempo também. Vejamos alguns exemplos.
Se você quiser fazer uma busca por "Roma" no subreddit /r/askhistorians mas limitá-la apenas aos últimos 30 dias, você pode usar o parâmetro after com o valor 30d (30 dias).
Pesquise no subreddit /r/askhistorians comentários mencionando Roma nos últimos 30 dias
https://api.pushshift.io/reddit/search/comment/?q=rome&subreddit=askhistorians&after=30d
E se houvesse uma notícia recente há três dias, mas quiséssemos limitar a janela de pesquisa entre 4 e 2 dias atrás? Poderíamos usar o parâmetro antes e depois para fazer isso. No próximo exemplo, procuraremos comentários mencionando Trump que foram feitos entre 4 e 2 dias atrás e ordenaremos em ordem crescente.
Pesquise em todos os subreddits o termo "Trump" e retorne comentários feitos entre 2 e 4 dias atrás
https://api.pushshift.io/reddit/search/comment/?q=trump&after=4d&before=2d&sort=asc
Digamos que você queira fazer uma busca pelos últimos 150 comentários, mas você só precisa dos campos autor e corpo retornados para cada comentário. Usando o parâmetro de campos, você pode informar à API quais informações deseja filtrar. Isso serve principalmente para ajudar a reduzir a largura de banda se você estiver fazendo muitas solicitações e precisar retornar apenas campos específicos.
Aqui está um exemplo usando o parâmetro campos para pesquisar os últimos 150 comentários que mencionam "governo" e retornando apenas os campos autor e corpo:
Pesquise em todos os subreddits o termo "governo" e retorne comentários apenas com o corpo e as chaves do autor
https://api.pushshift.io/reddit/search/comment/?q=government&size=150&fields=body,autor
Usando um dos exemplos acima que pesquisou a primeira ocorrência da palavra “ciência” no subreddit /r/askscience, vimos que o autor do comentário foi “MockDeath”. E se quiséssemos obter os primeiros 100 comentários que “MockDeath” fez no Reddit? Podemos usar o parâmetro autor, junto com os parâmetros de classificação e tamanho.
Pesquise todos os subreddits e obtenha os primeiros 100 comentários feitos pelo usuário /u/MockDeath
https://api.pushshift.io/reddit/search/comment/?author=MockDeath&sort=asc&size=100
As agregações são um método poderoso para fornecer dados resumidos para uma pesquisa. Usando o parâmetro aggs, podemos criar rapidamente facetas em torno de parâmetros específicos e ver como os dados mudam ao longo do tempo. O parâmetro aggs para pesquisas de comentários aceita os seguintes valores: autor, subreddit, reated_utc e link_id. Podemos fazer muitas coisas legais usando esse parâmetro, então vamos mergulhar em alguns exemplos.
Digamos que queremos ver a frequência de uso do termo “Trump” ao longo do tempo. Gostaríamos de poder ver quantos comentários foram postados por hora nos últimos sete dias para este período. Usando agregações e o parâmetro aggs, podemos obter esses dados rapidamente. Aqui está um exemplo usando este critério:
Crie uma agregação de tempo usando o termo trunfo para mostrar o número de comentários mencionando trunfo a cada hora nos últimos 7 dias
https://api.pushshift.io/reddit/search/comment/?q=trump&after=7d&aggs=created_utc&frequency=hour&size=0
Usamos o parâmetro de frequência junto com o parâmetro aggs para criar intervalos de hora em hora para mostrar o número total de comentários mencionando Trump nos últimos 7 dias. O parâmetro size foi definido como 0 porque estamos interessados apenas em obter dados de agregação e não em dados de comentários. Os dados de agregação são retornados na resposta na chave aggs ->created_utc. Aqui está um trecho da primeira parte do retorno:
{
"aggs": {
"created_utc": [
{
"doc_count": 685,
"key": 1502406000
},
{
"doc_count": 1238,
"key": 1502409600
},
{
"doc_count": 1100,
"key": 1502413200
},
O valor doc_count é o número total de comentários contendo o termo “trunfo”. O valor-chave é a época desse intervalo específico. Neste exemplo, o primeiro intervalo tem um horário de época de 1502406000, que corresponde a quinta-feira, 10 de agosto de 2017, às 23h. Esse valor-chave é o horário de início do intervalo, portanto, neste exemplo, 685 comentários contêm o termo "trunfo" entre o horário de quinta-feira, 10 de agosto de 2017, 23h, e quinta-feira, 10 de agosto de 2017, 12h: 00h. O parâmetro de frequência permite criar intervalos por segundo, minuto, hora, dia, semana, mês, ano. Usando esta agregação, você pode usar os dados para criar um gráfico (ou seja, Highcharts) e representar graficamente a atividade de comentários para termos, autores, subreddits específicos, etc. Esta é uma ferramenta de análise de dados extremamente poderosa.
E se você quisesse não apenas obter a frequência de termos de comentários específicos ao longo do tempo, mas também ver quais subreddits foram os mais populares para um determinado termo durante aquele período? Aqui está um exemplo de uso dos parâmetros aggs para mostrar quais subreddits tiveram mais atividade para um termo específico.
Crie uma agregação de subreddit usando o termo trunfo para mostrar os principais subreddits que mencionam trunfo nos últimos 7 dias
https://api.pushshift.io/reddit/search/comment/?q=trump&after=7d&aggs=subreddit&size=0
Aqui está um trecho do resultado:
{
"aggs": {
"subreddit": [
{
"bg_count": 66,
"doc_count": 44,
"key": "lovetrumpshaters",
"score": 0.6666666666666666
},
{
"bg_count": 20,
"doc_count": 9,
"key": "Denmark_Uncensored",
"score": 0.45
},
{
"bg_count": 51,
"doc_count": 16,
"key": "WhoRedditHatesNow",
"score": 0.3137254901960784
},
A agregação do subreddit retornará o número total de comentários nesse subreddit que mencionam o termo da consulta (doc_count), bem como o número total de comentários feitos nesse subreddit durante esse período (bg_count). Isso não apenas mostrará quais subreddits mencionaram Trump com mais frequência, mas também fornecerá resultados normalizados para que você também possa ver qual porcentagem dos comentários desse subreddit continha o termo de pesquisa. Se você simplesmente classificasse os subreddits pelos quais os subreddits mencionam o termo de pesquisa “trunfo” com mais frequência, os resultados seriam tendenciosos para os subreddits que também contêm mais atividade em geral. Usando essa abordagem, você pode ver a contagem bruta e também os dados normalizados.
A API também permite agregações em link_id, que é outro método muito poderoso para ver quais envios são mais populares com base em um termo de pesquisa específico. Continuando com os exemplos acima, vamos apresentar um cenário em que isso seria extremamente útil. Nas últimas 24 horas, surgiram inúmeras grandes histórias sobre Donald Trump. Você gostaria de usar a API para ver quais envios estão relacionados a Trump com base no número de comentários que o mencionam nos envios. Podemos usar novamente o parâmetro aggs e configurá-lo como link_id para obter essas informações rapidamente. Vamos prosseguir com outro exemplo:
Mostre envios feitos nas últimas 24 horas que mencionam Trump com frequência nos comentários
https://api.pushshift.io/reddit/search/comment/?q=trump&after=24h&aggs=link_id&size=0
Isso retornará na chave aggs -> link_id uma matriz de objetos de envio. O doc_count fornece o número total de comentários para cada envio que menciona o termo de pesquisa ("trunfo") e o bg_count fornece o número total de comentários feitos a esse envio. Esta é uma ótima maneira de encontrar rapidamente envios que são "quentes" com base em um termo ou frase de pesquisa específica.
A API também permite criar agregações de autores para que você possa ver rapidamente quais autores fazem mais comentários para um termo de pesquisa específico. Aqui está um exemplo de uso da agregação de autor:
Mostrar os principais autores que mencionaram o termo "Trump" nas últimas 24 horas
https://api.pushshift.io/reddit/search/comment/?q=trump&after=24h&aggs=author&size=0
{
"aggs": {
"author": [
{
"doc_count": 605,
"key": "grrrrreat"
},
{
"doc_count": 329,
"key": "AutoModerator"
},
{
"doc_count": 168,
"key": "autotldr"
},
{
"doc_count": 73,
"key": "SnapshillBot"
},
A agregação de autores mostrará quais autores fazem mais comentários contendo um termo de consulta específico. No exemplo acima, muitos dos principais autores que mencionam o termo “Trump” são na verdade bots.
Usando o parâmetro aggs, você pode combinar múltiplas agregações e obter muitos dados de facetas para um termo específico. Usando os exemplos acima, podemos combinar todas as ligações em uma só e mostrar os principais envios nas últimas 24 horas, a frequência de comentários por hora mencionando Trump, os principais autores que postam sobre Trump e os principais subreddits que tiveram comentários feitos. mencionando Trump.
Mostrar agregações de autores, submissões, subreddits e frequência de tempo para o termo "Trump" nas últimas 24 horas
https://api.pushshift.io/reddit/search/comment/?q=trump&after=24h&aggs=author,link_id,subreddit,created_utc&frequency=hour&size=0
Para pesquisar envios, use o endpoint https://api.pushshift.io/reddit/search/submission/ endpoint. Vamos começar com alguns exemplos e depois examinar os vários parâmetros disponíveis ao usar este endpoint. Faça uma pesquisa simples, o parâmetro q é usado para pesquisar uma palavra ou frase específica. Aqui está um exemplo:
Pesquise os envios mais recentes que mencionam a palavra "ciência"
https://api.pushshift.io/reddit/search/submission/?q=science
Isto irá procurar os envios mais recentes com a palavra ciência no título ou no próprio texto. A pesquisa não diferencia maiúsculas de minúsculas, portanto encontrará qualquer ocorrência de ciência, independentemente da capitalização. O padrão da API é classificar primeiro pelos envios feitos mais recentemente. Depois de executar esta pesquisa, são retornados 25 resultados. Este é o tamanho padrão para pesquisas e pode ser alterado usando o parâmetro size. Isso será discutido com mais detalhes na seção de parâmetros. Os dados são retornados no formato JSON e os resultados são incluídos na chave "data".
Existem vários parâmetros adicionais que podem ser usados ao realizar uma pesquisa de envio. Vamos examinar cada um deles agora e fornecer exemplos para cada um.
Parâmetro | Descrição | Padrão | Valores Aceitos |
---|---|---|---|
IDs | Obtenha envios específicos por meio de seus IDs | N / D | IDs base36 delimitados por vírgula |
q | Termo de pesquisa. Irá pesquisar TODOS os campos possíveis | N / D | String / String entre aspas para frases |
P: não | Excluir termo de pesquisa. Excluirá estes termos | N / D | String / String entre aspas para frases |
título | Pesquisa apenas o campo de título | N / D | String / String entre aspas para frases |
título: não | Exclua o termo de pesquisa do título. Excluirá estes termos | N / D | String / String entre aspas para frases |
autotexto | Pesquisa apenas o campo de texto próprio | N / D | String / String entre aspas para frases |
autotexto: não | Exclua o termo de pesquisa do próprio texto. Excluirá estes termos | N / D | String / String entre aspas para frases |
tamanho | Número de resultados a serem retornados | 25 | Inteiro <= 500 |
campos | Um campo específico de retorno (delimitado por vírgula) | Todos os campos | String ou string delimitada por vírgula (vários valores permitidos) |
organizar | Classifique os resultados em uma ordem específica | "desc" | "asc", "desc" |
tipo_classificação | Classificar por um atributo específico | "criado_utc" | "pontuação", "num_comments", "criado_utc" |
ag | Resumo de agregação de retorno | N / D | ["autor", "link_id", "criado_utc", "subreddit"] |
autor | Restringir a um autor específico | N / D | String ou string delimitada por vírgula (vários valores permitidos) |
subreddit | Restringir a um subreddit específico | N / D | String ou string delimitada por vírgula (vários valores permitidos) |
depois | Retornar resultados após esta data | N / D | Valor de época ou número inteiro + "s,m,h,d" (ou seja, 30d por 30 dias) |
antes | Retornar resultados antes desta data | N / D | Valor de época ou número inteiro + "s,m,h,d" (ou seja, 30d por 30 dias) |
pontuação | Restringir resultados com base na pontuação | N / D | Inteiro ou > x ou < x (ou seja, pontuação=>100 ou pontuação=<25) |
num_comments | Restringir resultados com base no número de comentários | N / D | Inteiro ou > x ou < x (ou seja, num_comments=>100) |
maiores de_18 | Restringir ao conteúdo nsfw ou sfw | ambos permitidos | “verdadeiro” ou “falso” |
é_vídeo | Restringir ao conteúdo de vídeo | ambos permitidos | “verdadeiro” ou “falso” |
bloqueado | Retornar apenas tópicos bloqueados ou desbloqueados | ambos permitidos | “verdadeiro” ou “falso” |
pegajoso | Retornar apenas conteúdo fixo ou não fixo | ambos permitidos | “verdadeiro” ou “falso” |
spoiler | Excluir ou incluir apenas spoilers | ambos permitidos | “verdadeiro” ou “falso” |
modo_concurso | Excluir ou incluir envios em modo de conteúdo | ambos permitidos | “verdadeiro” ou “falso” |
freqüência | Usado com o parâmetro aggs quando definido comocreated_utc | N / D | “segundo”, “minuto”, “hora”, “dia” |
metadados | exibir metadados sobre a consulta | falso | ["verdadeiro", "falso"] |
Esta chamada é muito útil quando usada junto com a API do Reddit. Quando há envios grandes com milhares de comentários, muitas vezes é difícil obter todos os IDs de comentários de um envio. Esta chamada retornará uma matriz de IDs de comentários quando um ID de envio for passado para ela. O ponto final é: https://api.pushshift.io/reddit/submission/comment_ids/{ID de envio base36}
Esta chamada retornará uma chave de dados com uma matriz de IDs de comentários. Você pode então recuperar as informações reais dos comentários desta API ou da API Reddit. Se o envio for relativamente novo, é melhor usar a API do Reddit para obter a pontuação mais atual dos comentários.
Recuperar todos os IDs de comentários para um objeto de envio
https://api.pushshift.io/reddit/submission/comment_ids/6uey5x
Ponto final | Descrição | Status |
---|---|---|
/reddit/pesquisar/comentário/ | Pesquisar comentários do Reddit | Ativo |
/reddit/pesquisa/envio/ | Pesquisar envios do Reddit | Ativo |
/reddit/submission/comment_ids/{base36-submission-id} | Recuperar IDs de comentários para um objeto de envio | Ativo |
/reddit/analyze/user/{nome-do-autor} | Analise a atividade de um usuário Reddit | Em Desenvolvimento |
/reddit/term/frequency/{term} | Analise um termo com base na atividade | Em desenvolvimento |
/reddit/pesquisar/todos/ | Pesquise comentários e envios | Em Desenvolvimento |
/reddit/tendências/pessoas | Descubra quem é tendência no Reddit | Em desenvolvimento |
/reddit/pesquisa/links | Encontre links relevantes sendo compartilhados no Reddit | Em Desenvolvimento |