La API de Reddit pushshift.io fue diseñada y creada por el equipo de modificación de /r/datasets para ayudar a proporcionar funcionalidad mejorada y capacidades de búsqueda para buscar comentarios y envíos de Reddit. El líder del proyecto, /u/stuck_in_the_matrix, es el encargado de mantener los archivos de comentarios y envíos de Reddit ubicados en https://files.pushshift.io.
Esta API RESTful brinda funcionalidad completa para buscar datos de Reddit y también incluye la capacidad de crear poderosas agregaciones de datos. Con esta API, puede encontrar rápidamente los datos que le interesan y encontrar correlaciones fascinantes.
Hay dos formas principales de acceder a la base de datos de envíos y comentarios de Reddit. Uno es usando la API directamente a través de https://api.pushshift.io/ y el otro es accediendo al motor de búsqueda back-end Elasticsearch a través de https://elastic.pushshift.io/. Este documento explicará ambos enfoques y brindará Ejemplos sobre cómo utilizar eficazmente la API. Este documento también explorará el uso de los parámetros API para utilizar búsquedas más enfocadas.
Hay dos puntos finales principales que se utilizan para buscar todos los comentarios y envíos disponibles públicamente en Reddit:
En la siguiente sección, exploraremos cómo realizar búsquedas más efectivas utilizando el punto final de búsqueda de comentarios.
Para buscar comentarios, utilice el punto final https://api.pushshift.io/reddit/search/comment/. Comencemos con algunos ejemplos y luego repasemos los diversos parámetros disponibles al usar este punto final. Una de las búsquedas más sencillas es utilizar únicamente el parámetro q. El parámetro q se utiliza para buscar una palabra o frase específica. Aquí hay un ejemplo:
Busque los comentarios más recientes que mencionen la palabra "ciencia"
https://api.pushshift.io/reddit/search/comment/?q=science
Esto buscará los comentarios más recientes con el término "ciencia" en el cuerpo del comentario. Esta búsqueda no distingue entre mayúsculas y minúsculas, por lo que encontrará cualquier aparición del término "ciencia" independientemente de las mayúsculas. De forma predeterminada, la API ordena primero los comentarios realizados recientemente. Después de realizar esta búsqueda, se devuelven 25 resultados. Este es el tamaño predeterminado para las búsquedas y se puede ajustar utilizando el parámetro de tamaño. Esto se discutirá con más detalle en la sección de parámetros. Los datos se devuelven en formato JSON y los resultados de búsqueda reales se incluyen en la clave "datos". También hay una clave de "metadatos" que brinda información adicional sobre la búsqueda, incluido el número total de resultados encontrados, cuánto tiempo tardó en procesarse la búsqueda, etc. Si se solicitan agregaciones, todos los datos de agregación se devuelven bajo la clave aggs.
Existen numerosos parámetros adicionales que se pueden utilizar al realizar una búsqueda de comentarios. Repasémoslos y proporcionemos ejemplos para cada uno.
Parámetro | Descripción | Por defecto | Valores aceptados |
---|---|---|---|
q | Término de búsqueda. | N / A | Cadena / Cadena entre comillas para frases |
identificaciones | Obtenga comentarios específicos a través de sus identificadores. | N / A | Identificadores base36 delimitados por comas |
tamaño | Número de resultados a devolver | 25 | Entero <= 500 |
campos | Uno devuelve campos específicos (delimitados por comas) | Todos los campos devueltos | cadena o cadena delimitada por comas |
clasificar | Ordenar los resultados en un orden específico | "desc" | "asc", "desc" |
tipo_clasificación | Ordenar por un atributo específico | "creado_utc" | "puntuación", "num_comentarios", "created_utc" |
aggs | Resumen de agregación de retornos | N / A | ["autor", "link_id", "created_utc", "subreddit"] |
autor | Restringir a un autor específico | N / A | Cadena |
subreddit | Restringir a un subreddit específico | N / A | Cadena |
después | Devolver resultados después de esta fecha | N / A | Valor de época o entero + "s,m,h,d" (es decir, 30d durante 30 días) |
antes | Devolver resultados antes de esta fecha | N / A | Valor de época o entero + "s,m,h,d" (es decir, 30d durante 30 días) |
frecuencia | Se utiliza con el parámetro aggs cuando se establece en creado_utc | N / A | "segundo", "minuto", "hora", "día" |
metadatos | mostrar metadatos sobre la consulta | FALSO | "verdadero", "falso" |
Puede recuperar comentarios directamente utilizando el parámetro ids. Para obtener un lote de comentarios por su identificación, utilice el siguiente ejemplo:
Recuperar tres comentarios utilizando sus valores de identificación base 36
https://api.pushshift.io/reddit/comment/search?ids=dlrezc8,dlrawgw,dlrhbkq
Hay bastantes parámetros para revisar, así que comencemos brindando algunos ejemplos más complejos y cómo usar los parámetros anteriores. Continuemos con el ejemplo anterior y ampliemos nuestra búsqueda de palabras clave "ciencia". ¿Qué pasaría si quisiéramos buscar el término "ciencia" pero restringirlo a un subreddit específico? Al usar el parámetro subreddit, podemos hacer eso:
Busque los comentarios más recientes que mencionen la palabra "ciencia" en el subreddit /r/askscience
https://api.pushshift.io/reddit/search/comment/?q=science&subreddit=askscience
Esto devolverá 25 comentarios que contienen el término "ciencia", pero solo del subreddit /r/askscience. Como no solicitamos un método de clasificación específico, se devuelven los comentarios más recientes (el parámetro de clasificación predeterminado es "desc"). ¿Qué pasaría si quisiéramos que el primer comentario en /r/askscience mencionara la palabra "ciencia"? Podríamos usar los parámetros de clasificación y tamaño para manejar eso.
Busque los comentarios más recientes que mencionen la palabra "ciencia" en el subreddit /r/askscience
https://api.pushshift.io/reddit/search/comment/?q=science&subreddit=askscience&sort=asc&size=1
Este es el 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 del resultado obtenido, podemos ver que el primer comentario realizado a /r/askscience mencionando "ciencia" ocurrió en la fecha de época 1270637661, que se traduce como miércoles 7 de abril de 2010 a las 10:54:21 a. m. (GMT). Repasemos rápidamente las piezas de metadatos. Podemos ver que el tiempo de ejecución de esta búsqueda fue de alrededor de 30 milisegundos. Se buscaron un total de 36 fragmentos y todos tuvieron éxito. La búsqueda no expiró (parámetro timed_out), lo cual es bueno. Este es un atributo que quizás quieras verificar si usas la API mediante programación, ya que algunas búsquedas que son más complicadas a veces pueden caducar. El valor de total_results es 134.785. Esto nos indica el número total de comentarios en /r/askscience que mencionan la palabra ciencia. Como no utilizamos los parámetros antes o después, este número representa la totalidad de los comentarios realizados a /r/askscience.
Continuaremos usando parámetros adicionales para resaltar el poder de la API de búsqueda. Los parámetros de antes y después le permiten restringir el período de tiempo de la búsqueda al proporcionar una marca de tiempo de época para ambos. Sin embargo, la API también comprende valores más humanos para los parámetros de antes y después. También puedes usar un número seguido de los caracteres s,m,h,d (que representan segundo, minuto, hora y día) para limitar el período de tiempo. Repasemos algunos ejemplos.
Si desea realizar una búsqueda de "Roma" en el subreddit /r/askhistorians pero limitarla solo a los últimos 30 días, puede usar el parámetro after con el valor 30d (30 días).
Busque en el subreddit /r/askhistorians comentarios que mencionen a Roma en los últimos 30 días.
https://api.pushshift.io/reddit/search/comment/?q=rome&subreddit=askhistorians&after=30d
¿Qué pasa si hubo una noticia reciente hace tres días, pero quisiéramos limitar la ventana de búsqueda entre hace 4 días y hace 2 días? Podríamos usar el parámetro antes y después para hacerlo. En el siguiente ejemplo, buscaremos comentarios que mencionen a Trump que se realizaron hace entre 4 y 2 días y los ordenaremos de forma ascendente.
Busque en todos los subreddits el término "Trump" y devuelva los comentarios realizados hace entre 2 y 4 días.
https://api.pushshift.io/reddit/search/comment/?q=trump&after=4d&before=2d&sort=asc
Supongamos que desea realizar una búsqueda de los últimos 150 comentarios, pero solo necesita que se devuelvan los campos de autor y cuerpo para cada comentario. Usando el parámetro de campos, puede indicarle a la API qué información desea filtrar. Esto es principalmente para ayudar a reducir el ancho de banda si realiza muchas solicitudes y solo necesita que se le devuelvan campos específicos.
A continuación se muestra un ejemplo que utiliza el parámetro campos para buscar los últimos 150 comentarios que mencionan "gobierno" y solo devuelve los campos de autor y cuerpo:
Busque en todos los subreddits el término "gobierno" y devuelva comentarios solo con las claves del cuerpo y del autor.
https://api.pushshift.io/reddit/search/comment/?q=government&size=150&fields=body,author
Usando uno de los ejemplos anteriores que buscaba la primera aparición de la palabra "ciencia" en el subreddit /r/askscience, vimos que el autor del comentario era "MockDeath". ¿Qué pasaría si quisiéramos obtener los primeros 100 comentarios que "MockDeath" hizo en Reddit? Podemos usar el parámetro de autor, junto con los parámetros de clasificación y tamaño.
Busque en todos los subreddits y obtenga los primeros 100 comentarios realizados por el usuario /u/MockDeath
https://api.pushshift.io/reddit/search/comment/?author=MockDeath&sort=asc&size=100
Las agregaciones son un método poderoso para proporcionar datos resumidos para una búsqueda. Usando el parámetro aggs, podemos crear rápidamente facetas alrededor de parámetros específicos y ver cómo los datos cambian con el tiempo. El parámetro aggs para búsquedas de comentarios acepta los siguientes valores: autor, subreddit, reated_utc y link_id. Podemos hacer muchas cosas interesantes usando este parámetro, así que profundicemos en algunos ejemplos.
Digamos que queremos ver la frecuencia de uso del término "Trump" a lo largo del tiempo. Nos gustaría poder ver cuántos comentarios se publicaron por hora durante los últimos 7 días para este período. Usando agregaciones y el parámetro aggs, podemos obtener esos datos rápidamente. A continuación se muestra un ejemplo utilizando este criterio:
Cree una agregación de tiempo utilizando el término trump para mostrar la cantidad de comentarios que mencionan trump cada hora durante los últimos 7 días.
https://api.pushshift.io/reddit/search/comment/?q=trump&after=7d&aggs=created_utc&frequency=hour&size=0
Usamos el parámetro de frecuencia junto con el parámetro aggs para crear grupos por hora para mostrar el número total de comentarios que mencionan a Trump durante los últimos 7 días. El parámetro de tamaño se estableció en 0 porque solo estamos interesados en obtener datos de agregación y no datos de comentarios. Los datos de agregación se devuelven en la respuesta bajo la clave aggs -> create_utc. Aquí hay un fragmento de la primera parte de la declaración:
{
"aggs": {
"created_utc": [
{
"doc_count": 685,
"key": 1502406000
},
{
"doc_count": 1238,
"key": 1502409600
},
{
"doc_count": 1100,
"key": 1502413200
},
El valor doc_count es el número total de comentarios que contienen el término "trump". El valor clave es la época de ese depósito en particular. En este ejemplo, el primer depósito tiene una época de 1502406000 que corresponde al jueves 10 de agosto de 2017 a las 11:00:00 p.m. Este valor clave es la hora de inicio del depósito, por lo que en este ejemplo, 685 comentarios contienen el término "trump" entre la hora del jueves 10 de agosto de 2017 a las 11:00:00 p. m. y el jueves 10 de agosto de 2017 a las 12:00: 00 p.m. El parámetro de frecuencia le permite crear depósitos por segundo, minuto, hora, día, semana, mes, año. Con esta agregación, puede utilizar los datos para crear un gráfico (es decir, Highcharts) y graficar la actividad de los comentarios para términos, autores, subreddits, etc. específicos. Esta es una herramienta de análisis de datos extremadamente poderosa.
¿Qué pasaría si no solo quisieras obtener la frecuencia de términos de comentarios específicos a lo largo del tiempo, sino que también quisieras ver qué subreddits fueron los más populares para un término determinado durante ese período de tiempo? A continuación se muestra un ejemplo del uso de los parámetros aggs para mostrar qué subreddits tuvieron la mayor actividad para un término específico.
Cree una agregación de subreddit utilizando el término trump para mostrar los subreddits principales que mencionan a trump durante los últimos 7 días.
https://api.pushshift.io/reddit/search/comment/?q=trump&after=7d&aggs=subreddit&size=0
Aquí hay un fragmento del 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
},
La agregación de subreddit devolverá la cantidad total de comentarios en ese subreddit que mencionan el término de consulta (doc_count), así como la cantidad total de comentarios realizados en ese subreddit durante ese período de tiempo (bg_count). Esto no solo le mostrará qué subreddits mencionaron a Trump con más frecuencia, sino que también le brindará resultados normalizados para que también pueda ver qué porcentaje de los comentarios de ese subreddit contenían el término de búsqueda. Si simplemente clasificaras los subreddits según los cuales mencionaron el término de búsqueda "trump" con mayor frecuencia, los resultados estarían sesgados hacia los subreddits que también contienen la mayor actividad en general. Con este enfoque, puede ver tanto el recuento bruto como los datos normalizados.
La API también permite agregaciones en link_id, que es otro método muy poderoso para ver qué envíos son los más populares según un término de búsqueda específico. Continuando con los ejemplos anteriores, proporcionemos un escenario en el que esto sería extremadamente útil. En las últimas 24 horas, han surgido numerosas historias importantes sobre Donald Trump. Le gustaría utilizar la API para ver qué envíos están relacionados con Trump según la cantidad de comentarios que lo mencionan dentro de los envíos. Podemos usar nuevamente el parámetro aggs y configurarlo en link_id para obtener esta información rápidamente. Procedamos con otro ejemplo:
Mostrar envíos realizados en las últimas 24 horas que mencionen a Trump con frecuencia en los comentarios.
https://api.pushshift.io/reddit/search/comment/?q=trump&after=24h&aggs=link_id&size=0
Esto devolverá bajo la clave aggs -> link_id una serie de objetos de envío. doc_count proporciona el número total de comentarios para cada envío que menciona el término de búsqueda ("trump") y bg_count proporciona el número total de comentarios realizados a ese envío. Esta es una excelente manera de encontrar rápidamente envíos "calientes" basados en un término o frase de búsqueda específica.
La API también le permite crear agregaciones de autores para que pueda ver rápidamente qué autores hacen la mayor cantidad de comentarios para un término de búsqueda específico. A continuación se muestra un ejemplo del uso de la agregación de autores:
Muestre los principales autores que mencionan el término "Trump" en las ú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"
},
La agregación de autores le mostrará qué autores hacen la mayor cantidad de comentarios que contienen un término de consulta específico. Según el ejemplo anterior, muchos de los principales autores que mencionan el término "Trump" son en realidad bots.
Con el parámetro aggs, puede combinar varias agregaciones y obtener muchos datos de facetas para un término específico. Usando los ejemplos anteriores, podemos combinar todas las llamadas en una sola llamada y mostrar los principales envíos durante las últimas 24 horas, la frecuencia de los comentarios por hora que mencionan a Trump, los principales autores que publican sobre Trump y los principales subreddits que han recibido comentarios. mencionando a Trump.
Mostrar agregaciones de autores, envíos, subreddits y frecuencia temporal del término "Trump" durante las ú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 buscar envíos, utilice el punto final https://api.pushshift.io/reddit/search/submission/endpoint. Comencemos con algunos ejemplos y luego repasemos los diversos parámetros disponibles al usar este punto final. Para una búsqueda simple, el parámetro q se utiliza para buscar una palabra o frase específica. Aquí hay un ejemplo:
Busque las presentaciones más recientes que mencionen la palabra "ciencia"
https://api.pushshift.io/reddit/search/submission/?q=science
Esto buscará los envíos más recientes con la palabra ciencia en el título o en el texto propio. La búsqueda no distingue entre mayúsculas y minúsculas, por lo que encontrará cualquier aparición científica independientemente de las mayúsculas. De forma predeterminada, la API ordena primero los envíos realizados más recientemente. Después de ejecutar esta búsqueda, se devuelven 25 resultados. Este es el tamaño predeterminado para las búsquedas y se puede cambiar utilizando el parámetro de tamaño. Esto se discutirá con más detalle en la sección de parámetros. Los datos se devuelven en formato JSON y los resultados se incluyen en la clave "datos".
Existen numerosos parámetros adicionales que se pueden utilizar al realizar una búsqueda de envío. Repasemos cada uno de ellos ahora y proporcionemos ejemplos para cada uno.
Parámetro | Descripción | Por defecto | Valores aceptados |
---|---|---|---|
identificaciones | Obtenga envíos específicos a través de sus ID | N / A | Identificadores base36 delimitados por comas |
q | Término de búsqueda. Buscará TODOS los campos posibles | N / A | Cadena / Cadena entre comillas para frases |
q:no | Excluir término de búsqueda. Excluirá estos términos | N / A | Cadena / Cadena entre comillas para frases |
título | Busca solo en el campo del título | N / A | Cadena / Cadena entre comillas para frases |
título: no | Excluir el término de búsqueda del título. Excluirá estos términos | N / A | Cadena / Cadena entre comillas para frases |
autotexto | Busca solo en el campo de autotexto | N / A | Cadena / Cadena entre comillas para frases |
texto propio: no | Excluir el término de búsqueda del texto propio. Excluirá estos términos | N / A | Cadena / Cadena entre comillas para frases |
tamaño | Número de resultados a devolver | 25 | Entero <= 500 |
campos | Uno devuelve campos específicos (delimitados por comas) | Todos los campos | Cadena o cadena delimitada por comas (se permiten varios valores) |
clasificar | Ordenar los resultados en un orden específico | "desc" | "asc", "desc" |
tipo_clasificación | Ordenar por un atributo específico | "creado_utc" | "puntuación", "num_comentarios", "created_utc" |
aggs | Resumen de agregación de retorno | N / A | ["autor", "link_id", "created_utc", "subreddit"] |
autor | Restringir a un autor específico | N / A | Cadena o cadena delimitada por comas (se permiten varios valores) |
subreddit | Restringir a un subreddit específico | N / A | Cadena o cadena delimitada por comas (se permiten varios valores) |
después | Devolver resultados después de esta fecha | N / A | Valor de época o entero + "s,m,h,d" (es decir, 30d durante 30 días) |
antes | Devolver resultados antes de esta fecha | N / A | Valor de época o entero + "s,m,h,d" (es decir, 30d durante 30 días) |
puntaje | Restringir resultados según la puntuación | N / A | Entero o > x o < x (es decir, puntuación=>100 o puntuación=<25) |
num_comentarios | Restringir resultados según el número de comentarios | N / A | Entero o > x o < x (es decir, num_comments=>100) |
mayores de 18 | Restringir a contenido nsfw o sfw | ambos permitidos | "verdadero" o "falso" |
es_video | Restringir al contenido de vídeo | ambos permitidos | "verdadero" o "falso" |
bloqueado | Devolver solo hilos bloqueados o desbloqueados | ambos permitidos | "verdadero" o "falso" |
pegado | Devolver solo contenido fijo o no adhesivo | ambos permitidos | "verdadero" o "falso" |
spoiler | Excluir o incluir solo spoilers | ambos permitidos | "verdadero" o "falso" |
modo_concurso | Excluir o incluir envíos en modo contenido | ambos permitidos | "verdadero" o "falso" |
frecuencia | Se utiliza con el parámetro aggs cuando se establece en creado_utc | N / A | "segundo", "minuto", "hora", "día" |
metadatos | mostrar metadatos sobre la consulta | FALSO | ["verdadero", "falso"] |
Esta llamada es muy útil cuando se usa junto con la API de Reddit. Cuando hay envíos grandes con miles de comentarios, a menudo es difícil obtener todos los identificadores de comentarios de un envío. Esta llamada devolverá una serie de identificadores de comentarios cuando se le pase un identificador de envío. El punto final es: https://api.pushshift.io/reddit/submission/comment_ids/{base36 submit id}
Esta llamada devolverá una clave de datos con una serie de identificadores de comentarios. Luego puede recuperar la información real de los comentarios desde esta API o la API de Reddit. Si el envío es bastante nuevo, es mejor utilizar la API de Reddit para obtener la puntuación más actualizada de los comentarios.
Recuperar todos los identificadores de comentarios de un objeto de envío
https://api.pushshift.io/reddit/submission/comment_ids/6uey5x
Punto final | Descripción | Estado |
---|---|---|
/reddit/búsqueda/comentario/ | Buscar comentarios en Reddit | Activo |
/reddit/búsqueda/envío/ | Buscar envíos de Reddit | Activo |
/reddit/submission/comment_ids/{base36-submission-id} | Recuperar identificadores de comentarios para un objeto de envío | Activo |
/reddit/analyze/user/{nombre-autor} | Analizar la actividad de un usuario de Reddit | En desarrollo |
/reddit/término/frecuencia/{término} | Analizar un término en función de la actividad. | En desarrollo |
/reddit/buscar/todo/ | Buscar tanto comentarios como envíos | En desarrollo |
/reddit/tendencias/personas | Descubra quién es tendencia en Reddit | En desarrollo |
/reddit/búsqueda/enlaces | Encuentre enlaces relevantes que se comparten en Reddit | En desarrollo |