diff --git a/server.js b/server.js index 79de563..9ef4c17 100644 --- a/server.js +++ b/server.js @@ -2719,6 +2719,47 @@ cache(function(data, match, sendBadge, request) { }); })); +// Cocoapods Downloads integration. +camp.route(/^\/cocoapods\/(dm|dw|dt)\/(.*)\.(svg|png|gif|jpg|json)$/, +cache(function(data, match, sendBadge, request) { + var info = match[1]; // One of these: "dm", "dw", "dt" + var spec = match[2]; // eg, AFNetworking + var format = match[3]; + var apiUrl = 'http://metrics.cocoapods.org/api/v1/pods/' + spec; + var badgeData = getBadgeData('pod', data); + request(apiUrl, function(err, res, buffer) { + if (err != null) { + badgeData.text[1] = 'inaccessible'; + sendBadge(format, badgeData); + return; + } + try { + var data = JSON.parse(buffer); + var downloads = 0; + badgeData.text[0] = getLabel('downloads', data); + switch (info.charAt(1)) { + case 'm': + downloads = data.stats.download_month; + badgeData.text[1] = metric(downloads) + '/month'; + break; + case 'w': + downloads = data.stats.download_week; + badgeData.text[1] = metric(downloads) + '/week'; + break; + case 't': + downloads = data.stats.download_total; + badgeData.text[1] = metric(downloads); + break; + } + badgeData.colorscheme = downloadCountColor(downloads); + sendBadge(format, badgeData); + } catch(e) { + badgeData.text[1] = 'invalid'; + sendBadge(format, badgeData); + } + }); +})); + // GitHub tag integration. camp.route(/^\/github\/tag\/([^\/]+)\/([^\/]+)\.(svg|png|gif|jpg|json)$/, cache(function(data, match, sendBadge, request) { diff --git a/try.html b/try.html index d7f3f50..7c7b591 100644 --- a/try.html +++ b/try.html @@ -391,6 +391,18 @@ Pixel-perfect Retina-ready Fast Consistent Hackable
https://img.shields.io/website-up-down-green-red/http/shields.io.svg
https://img.shields.io/cocoapods/dt/AFNetworking.svg
https://img.shields.io/cocoapods/dm/AFNetworking.svg
https://img.shields.io/cocoapods/dw/AFNetworking.svg