retrieves the stats (clapCount, voterCount, responseCount, and readingTime) of Medium posts

On this article, I’ll clarify the way to retrieve the stats ( claps depend, voter depend, response depend, and studying time) of Medium feed posts utilizing a REST API, the dearth of this characteristic within the Medium RSS feed is what motivated me to create this superior Medium API. That is my forty first Medium article.
Preliminary Instinct
I needed to acquire the stats ( claps depend, voter depend, response depend, and studying time) of my Medium posts whereas engaged on my private web site growth. 2 years earlier than once I implement the medium widget to my web site I discovered Pixelpoint.io which generated a widget with clap counts of a medium put up. At that second I puzzled how they applied it? Then I overlook to analysis it however final month I discovered that pixelpoint.io’s widget just isn’t working. I regarded in all places for an answer to my wants however couldn’t discover one, so I had no selection however to code it myself.
My preliminary instinct was to take a look at the RSS feed however there have been no such particulars are offered then I regarded on the official documentation of the general public REST API by Medium, and nothing was there both. The Medium REST API solely permits you to create a Medium article by HTTP POST technique(cf part 3.3). You possibly can’t retrieve or edit a Medium article through the use of the Medium API 😔.
With a purpose to get an understanding of how the helpful stats are retrieved within the Medium put up, I began to examine the Medium utilizing browser developer instruments. Shockingly, there was no request to acquire the stats amongst all of the XHR calls, which push me to take a look at the HTML response of the Medium put up.

curl https://medium.com/p/unique_Id_of_the_post >> put up.html
As a javascript variable, the claps depend, voter depend, response depend, and studying time are straight injected into the HTML response. You possibly can confirm that by typing console.log(window.__APOLLO_STATE__); within the Javascript console of the Submit web page.

Then I scrape these helpful stats utilizing request and cheerio .
How one can scrape information in Script Tag

In a medium put up, information comes as JSON in a script tag. By utilizing javascript, these information are picked up and rendered in DOM on the browser-side. Often, information in a script tag takes this kind:
https://medium.com/media/ec3ceb318aeebbb8045647b77cec49c1/href
Then I scrape Medium put up information with out a headless browser.
https://medium.com/media/3dad5342e13f9fae28b34508c8b55b1c/href
First, I get the web site and search for errors. Then I confirmed whether or not the physique exists, and cargo the physique utilizing cheerio in $ . In attempt block, all of the tag script contents are mapped in an array. Then discover the aspect which incorporates window.__APOLLO_STATE__ , exchange the task window.__APOLLO_STATE__ = with an empty string. I exchange the /"/g with ‘"’ and parse with JSON.parse . Lastly, get the suitable values from the JSON.
The benefits of this system over headless browsers are tremendous quick and takes manner much less processing and sources.
How one can use the Superior Medium API
You could possibly ready to make use of the Superior Medium API that I developed as follows:
There are 5 kinds of requests. you may have the ability to get all of the responses through the use of HTTP GETmethod.
Medium feed in JSON
You could possibly capable of get the RSS feed of the final 10 Medium posts through the use of the next hyperlinks (exchange your username as a substitute of @username ).
medium.com/feed/@username
or
username.medium.com/feed
The next request of the API provides the direct JSON conversion of that RSS Feed.
curl https://advanced-medium-api.herokuapp.com/medium/consumer/{userId}
Medium Superior Knowledge
You could possibly capable of get the Medium feed in JSON with the lacking a part of the Medium feed resembling clapCount, voterCount, responseCount, readingTime. every lacking information injected in each put up(objects) object.
The next request of the API provides the JSON conversion of the RSS feed with the injection of lacking information.
curl https://advanced-medium-api.herokuapp.com/superior/consumer/{userId}
Medium Personalized Knowledge
JSON conversion of the Medium RSS feed is custom-made in accordance with the classes. Order the Medium put up’s tags in accordance with their use depend among the many newest 10 posts and the tagOrder return that tags' order rank. Medium's newest 10 posts have been divided by 3 and each 3 posts have been pushed in an array and people arrays have been pushed in a single array. There may be an algorithm that returns essentially the most appropriate tag for the Medium put up among the many different tags of that Medium put up.
The next request of the API provides the custom-made model of the Medium feed in JSON
curl https://advanced-medium-api.herokuapp.com/custom-made/consumer/{userId}
Medium Personalized Superior Knowledge
This response incorporates the Medium custom-made information with the injection of lacking stats resembling clapCount, voterCount, responseCount, readingTime.
The next request of the API provides the custom-made model of the Medium feed in JSON with the lacking a part of the Medium feed.
curl https://advanced-medium-api.herokuapp.com/superior/custom-made/consumer/{userId}
Lacking information of a specific put up.
This response incorporates solely the lacking half (clapCount, voterCount, responseCount, readingTime) of Medium feed for a specific Medium put up.
Request 💻 ➡ 🌎 :
curl https://advanced-medium-api.herokuapp.com/medium/put up/{postId}
Response 🌎➡💻 :
{
"clapCount": 98,
"responseCount": 4,
"voterCount": 12,
"readingTime": 4
}
Conclusion
This API is Open Supply and I welcome your contributions. final 2 years I used the medium widget from Pixelpoint.io which generated a widget with clap counts of a medium put up. I didn’t do analysis to get the lacking a part of the Medium feed once I used Pixelpoint.io. however 2 months earlier than Pixelpoint.io just isn’t working and this incident impacts my private web site. Subsequently I pushed myself and created this API.
The Medium RSS Feed’s Lacking Half was initially printed in Geek Tradition on Medium, the place individuals are persevering with the dialog by highlighting and responding to this story.

