JSON API for Social Media Share Counts

Published on by Morgan Ney

Recently I needed to implement social media buttons with a custom look and feel. The "custom look and feel" part meant that I couldn't simply use the vendor supplied embed scripts. If I did then yes, I could use CSS to hide the vendor's button, but the browser's restriction on third-party iframe content meant I still couldn't access the share counts. I would need to use the vendor API's for obtaining share counts.

After a little research (Googling) I realized each vendor had a slightly different API. Some supported CORS or JSONP and were publicly documented, while others supported neither and were not public (I'm looking at you Google+). In short, there was no way to get the share counts I needed for the most popular vendors directly from the browser. A server-side script or service was required.

I figured I'd write a Node.js app that's a local proxy exposing a JSON API for obtaining social media share counts: socoapi. This way front end logic can be a bit simpler making only one XHR request to socoapi for obtaining the share counts. You can install socoapi with Node's package manager npm: npm install socoapi. Now you can use it as a standalone server or embedded in some other application.

Caching is also supported by the socoapi server. Here is the signature to the listen() method: listen(port, cachettl [,callback]). cachettl are the milliseconds to cache API responses for. This way vendor servers are not overburdened needlessly.

The socoapi API supports CORS (but currently not JSONP) and has two endpoints. The first endpoint is really all you need:

GET /counts?url=[the url to get share counts for]

This returns the share counts for url from all supported vendors. Be sure to percent-encode any query component to the share url. For example, GET /counts?url=http://www.foobar.baz/%3Fq1%3Dv1%26q2%3Dv2

If using socoapi as an embedded component to an application running behind a reverse proxy an Apache Virtual Host configuration might look something like this:

socoapi source code is hosted on github where issues and pull requests are welcome. The package is also hosted on npm.

Relevant to  Node.js, JSON, API, Social Media
Get in Touch

BizzyBtyes is owned by Morgan Ney, a father, husband, and web developer originally from the San Francisco Bay Area and now living in Coarsegold, Ca. just south of Yosemite.