recupera las estadísticas (clapCount, voterCount, responseCount y readTime) de publicaciones medianas
En este artículo, explicaré cómo recuperar las estadísticas ( claps depend
, voter depend
, response depend
y studying time
) de publicaciones de fuentes medianas que usan una API REST, la falta de esta característica en las fuentes RSS medianas es lo que me motivó a crear esta API mediana avanzada. Este es mi artículo número 41 de Medium.
Quería obtener las estadísticas (
claps depend
,voter depend
,response depend
ystudying time
) de mis publicaciones en Medium mientras trabajaba en el desarrollo de mi sitio internet private. 2 años antes, cuando implementé el widget mediano en mi sitio internet, encontré Pixelpoint.io que generó un widget con conteos de aplausos de una publicación mediana. En ese momento me pregunté ¿cómo lo implementaron? Luego olvidé investigarlo, pero el mes pasado descubrí que el widget de pixelpoint.io no funciona. Busqué en todas partes una solución a mis necesidades, pero no pude encontrar una, así que no tuve más remedio que codificarla yo mismo.
Mi intuición inicial fue mirar el feed RSS, pero no se proporcionaron tales detalles, luego miré la documentación oficial del público. API REST por Medium, y tampoco había nada. La API REST de Medium solo le permite crear un artículo de Medium por HTTP POST
método (cf sección 3.3). No puedes recuperar o editar un artículo de Medium usando la API de Medium 😔.
Para comprender cómo se recuperan las estadísticas útiles en la publicación de Medium, comencé a inspeccionar Medium usando las herramientas de desarrollo del navegador. Sorprendentemente, no hubo ninguna solicitud para obtener las estadísticas entre todas las llamadas XHR, lo que me empuja a mirar la respuesta HTML de la publicación de Medium.
curl https://medium.com/p/unique_Id_of_the_post >> publish.html
Como una variable de JavaScript, el conteo de aplausos, el conteo de votantes, el conteo de respuestas y el tiempo de lectura se inyectan directamente en la respuesta HTML. Puede comprobarlo escribiendo console.log(window.__APOLLO_STATE__);
en la consola Javascript de la página de publicación.
window.__APOLLO_STATE__ object
Luego raspo esas estadísticas útiles usando request
y cheerio
.
En una publicación mediana, los datos vienen como JSON en una etiqueta de script. Al usar javascript, esos datos se recogen y representan en DOM en el lado del navegador. Por lo common, los datos en una etiqueta de script toman esta forma:
Luego raspo los datos de la publicación mediana sin un navegador sin cabeza.
Primero, obtengo el sitio internet y busco errores. Luego confirmé si el cuerpo existe y cargué el cuerpo usando cheerio
en $
. En strive
block, todo el contenido del script de etiquetas se mapea en una matriz. Luego encuentra el elemento que incluye window.__APOLLO_STATE__
reemplaza la tarea window.__APOLLO_STATE__ =
con una cadena vacía. reemplazo el /"/g
con ‘"
‘ y analizar con JSON.parse
. Finalmente, obtenga los valores apropiados del JSON.
Las ventajas de esta técnica sobre los navegadores sin cabeza son súper rápidas y requieren mucho menos procesamiento y recursos.
Podrías usar el API media avanzada que desarrollé de la siguiente manera:
Hay 5 tipos de solicitudes. usted podría ser capaz de obtener todas las respuestas utilizando HTTP GET
método.
Feed medio en JSON
Puede obtener la fuente RSS de las últimas 10 publicaciones de Medium utilizando los siguientes enlaces (reemplace su nombre de usuario en lugar de @username
).
medium.com/feed/@username
or
username.medium.com/feed
La siguiente solicitud de la API proporciona la conversión JSON directa de ese Feed RSS.
curl https://advanced-medium-api.herokuapp.com/medium/person/{userId}
Medio Avanzado Datos
Podría obtener el feed mediano en JSON con la parte faltante del feed mediano, como clapCount
, voterCount
, responseCount
, readingTime
. cada dato faltante inyectado en cada objeto de publicación (elementos).
La siguiente solicitud de la API proporciona la conversión JSON de la fuente RSS con la inyección de datos faltantes.
curl https://advanced-medium-api.herokuapp.com/superior/person/{userId}
Datos personalizados medianos
La conversión JSON de la fuente RSS mediana se personaliza de acuerdo con las categorías. Ordene las etiquetas de las publicaciones medianas de acuerdo con su recuento de uso entre las últimas 10 publicaciones y el tagOrder
devuelve el rango de orden de esas etiquetas. Las últimas 10 publicaciones de Medium se dividieron por 3 y cada 3 publicaciones se insertaron en una matriz y esas matrices se insertaron en una matriz. Hay un algoritmo que devuelve la etiqueta más adecuada para la publicación de Medium entre las otras etiquetas de esa publicación de Medium.
La siguiente solicitud de la API proporciona la versión personalizada del feed Medium en JSON
curl https://advanced-medium-api.herokuapp.com/custom-made/person/{userId}
Datos avanzados personalizados medianos
Esta respuesta contiene los datos personalizados de Medium con la inyección de estadísticas faltantes, como clapCount
, voterCount
, responseCount
, readingTime
.
La siguiente solicitud de la API brinda la versión personalizada de la fuente mediana en JSON con la parte faltante de la fuente mediana.
curl https://advanced-medium-api.herokuapp.com/superior/custom-made/person/{userId}
Faltan datos de una publicación en explicit.
Esta respuesta contiene solo la parte que falta (clapCount
, voterCount
, responseCount
, readingTime
) de alimentación mediana para una publicación mediana en explicit.
Solicitud 💻 ➡ 🌎 :
curl https://advanced-medium-api.herokuapp.com/medium/publish/{postId}
Respuesta 🌎➡💻 :
{
"clapCount": 98,
"responseCount": 4,
"voterCount": 12,
"readingTime": 4
}
Esta API es Fuente abierta y agradezco sus contribuciones. los últimos 2 años usé el widget mediano de Pixelpoint.io que generó un widget con conteos de aplausos de una publicación mediana. No investigué para obtener la parte faltante del feed mediano cuando usé Pixelpoint.io. pero 2 meses antes Pixelpoint.io no funciona y este incidente afecta mi sitio internet private. Por lo tanto, me esforcé y creé esta API.