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

On this article, I’ll clarify tips on how to retrieve the stats ( claps rely
, voter rely
, response rely
, and studying time
) of Medium feed posts utilizing a REST API, the shortage 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.
I wished to acquire the stats (
claps rely
,voter rely
,response rely
, andstudying time
) of my Medium posts whereas engaged on my private web site improvement. 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 publish. At that second I puzzled how they applied it? Then I neglect to analysis it however final month I discovered that pixelpoint.io’s widget will not be working. I seemed in every single place 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 seemed on the official documentation of the general public REST API by Medium, and nothing was there both. The Medium REST API solely lets you create a Medium article by HTTP POST
technique(cf part 3.3). You possibly can’t retrieve or edit a Medium article by utilizing the Medium API 😔.
As a way to get an understanding of how the helpful stats are retrieved within the Medium publish, 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 publish.

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

window.__APOLLO_STATE__ object
Then I scrape these helpful stats utilizing request
and cheerio
.

In a medium publish, knowledge comes as JSON in a script tag. Through the use of javascript, these knowledge are picked up and rendered in DOM on the browser-side. Normally, knowledge in a script tag takes this manner:
Then I scrape Medium publish knowledge with out a headless browser.
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 strive
block, all of the tag script contents are mapped in an array. Then discover the factor which incorporates window.__APOLLO_STATE__
, substitute the project window.__APOLLO_STATE__ =
with an empty string. I substitute the /"/g
with ‘"
’ and parse with JSON.parse
. Lastly, get the suitable values from the JSON.
The benefits of this method over headless browsers are tremendous quick and takes means much less processing and sources.
You can in a position to make use of the Superior Medium API that I developed as follows:
There are 5 kinds of requests. you might be capable to get all of the responses by utilizing HTTP GET
technique.
Medium feed in JSON
You can in a position to get the RSS feed of the final 10 Medium posts by utilizing the next hyperlinks (substitute your username as an alternative 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/person/{userId}
Medium Superior Information
You can in a position to get the Medium feed in JSON with the lacking a part of the Medium feed akin to clapCount
, voterCount
, responseCount
, readingTime
. every lacking knowledge injected in each publish(gadgets) object.
The next request of the API provides the JSON conversion of the RSS feed with the injection of lacking knowledge.
curl https://advanced-medium-api.herokuapp.com/superior/person/{userId}
Medium Personalized Information
JSON conversion of the Medium RSS feed is personalized in response to the classes. Order the Medium publish’s tags in response to their use rely 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 publish among the many different tags of that Medium publish.
The next request of the API provides the personalized model of the Medium feed in JSON
curl https://advanced-medium-api.herokuapp.com/personalized/person/{userId}
Medium Personalized Superior Information
This response incorporates the Medium personalized knowledge with the injection of lacking stats akin to clapCount
, voterCount
, responseCount
, readingTime
.
The next request of the API provides the personalized model of the Medium feed in JSON with the lacking a part of the Medium feed.
curl https://advanced-medium-api.herokuapp.com/superior/personalized/person/{userId}
Lacking knowledge of a specific publish.
This response incorporates solely the lacking half (clapCount
, voterCount
, responseCount
, readingTime
) of Medium feed for a specific Medium publish.
Request 💻 ➡ 🌎 :
curl https://advanced-medium-api.herokuapp.com/medium/publish/{postId}
Response 🌎➡💻 :
{
"clapCount": 98,
"responseCount": 4,
"voterCount": 12,
"readingTime": 4
}
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 publish. 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 will not be working and this incident impacts my private web site. Subsequently I pushed myself and created this API.