From cbce4d346acec51f8b691745273ba7b710ec5399 Mon Sep 17 00:00:00 2001 From: Daniel Lo Nigro Date: Sat, 17 May 2014 23:42:49 -0700 Subject: [PATCH] Add NuGet download count --- server.js | 64 ++++++++++++++++++++++++++++++++++++------------------- try.html | 4 ++++ 2 files changed, 46 insertions(+), 22 deletions(-) diff --git a/server.js b/server.js index 9bbf8f12bc149..c9e7ea18eeb2b 100644 --- a/server.js +++ b/server.js @@ -166,6 +166,20 @@ function cache(f) { }; } +function downloadCountColor(downloads) { + if (downloads === 0) { + return 'red'; + } else if (downloads < 10) { + return 'yellow'; + } else if (downloads < 100) { + return 'yellowgreen'; + } else if (downloads < 1000) { + return 'green'; + } else { + return 'brightgreen'; + } +} + // Vendors. // Travis integration @@ -274,17 +288,7 @@ cache(function(data, match, sendBadge) { badgeData.text[1] = metric(downloads) + ' total'; break; } - if (downloads === 0) { - badgeData.colorscheme = 'red'; - } else if (downloads < 10) { - badgeData.colorscheme = 'yellow'; - } else if (downloads < 100) { - badgeData.colorscheme = 'yellowgreen'; - } else if (downloads < 1000) { - badgeData.colorscheme = 'green'; - } else { - badgeData.colorscheme = 'brightgreen'; - } + badgeData.colorscheme = downloadCountColor(downloads); sendBadge(format, badgeData); } catch(e) { badgeData.text[1] = 'invalid'; @@ -510,17 +514,7 @@ cache(function(data, match, sendBadge) { badgeData.text[1] = metric(downloads) + '/day'; break; } - if (downloads === 0) { - badgeData.colorscheme = 'red'; - } else if (downloads < 10) { - badgeData.colorscheme = 'yellow'; - } else if (downloads < 100) { - badgeData.colorscheme = 'yellowgreen'; - } else if (downloads < 1000) { - badgeData.colorscheme = 'green'; - } else { - badgeData.colorscheme = 'brightgreen'; - } + badgeData.colorscheme = downloadCountColor(downloads); sendBadge(format, badgeData); } else if (info === 'v') { var version = data.info.version; @@ -934,6 +928,32 @@ cache(function(data, match, sendBadge) { }); })); +// NuGet download count integration. +camp.route(/^\/nuget\/dt\/(.*)\.(svg|png|gif|jpg)$/, +cache(function(data, match, sendBadge) { + var repo = match[1]; // eg, `Nuget.Core`. + var format = match[2]; + var filter = 'Id eq \'' + repo + '\' and IsLatestVersion eq true'; + var apiUrl = 'https://www.nuget.org/api/v2/Packages()?$filter=' + encodeURIComponent(filter); + var badgeData = getBadgeData('downloads', data); + request(apiUrl, { headers: { 'Accept': 'application/atom+json,application/json' } }, function(err, res, buffer) { + if (err != null) { + badgeData.text[1] = 'inaccessible'; + sendBadge(format, badgeData); + } + try { + var data = JSON.parse(buffer); + var downloads = data.d.results[0].DownloadCount; + badgeData.text[1] = metric(downloads) + ' total'; + badgeData.colorscheme = downloadCountColor(downloads); + sendBadge(format, badgeData); + } catch(e) { + badgeData.text[1] = 'invalid'; + sendBadge(format, badgeData); + } + }); +})); + // TeamCity CodeBetter version integration. camp.route(/^\/teamcity\/codebetter\/(.*)\.(svg|png|gif|jpg)$/, cache(function(data, match, sendBadge) { diff --git a/try.html b/try.html index ae969517e144f..c7efe9423b91d 100644 --- a/try.html +++ b/try.html @@ -141,6 +141,10 @@

Downloads

http://img.shields.io/npm/dm/localeval.svg + NuGet: + + http://img.shields.io/nuget/dt/Microsoft.AspNet.Mvc.svg + PyPI: http://img.shields.io/pypi/dm/Django.svg