Github Download Stats

Display download stats about the last release of Github projects.

当前为 2015-04-14 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Github Download Stats
  3. // @description Display download stats about the last release of Github projects.
  4. // @description:en Display download stats about the last release of Github projects.
  5. // @namespace stratehm.github
  6. // @include https://github.com/*/*
  7. // @version 1
  8. // @grant GM_xmlhttpRequest
  9. // @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js
  10. // ==/UserScript==
  11.  
  12. var lastReleaseItemList;
  13.  
  14. this.$ = this.jQuery = jQuery.noConflict(true);
  15. $(document).ready(function() {
  16. init();
  17. });
  18.  
  19. function init() {
  20. lastReleaseItemList = $('<ul/>').attr({
  21. style: 'font-size: 11px; line-height: 10px; white-space: nowrap;'
  22. }).append('<b>Last release: </b>');
  23. $('h1.entry-title.public').append(lastReleaseItemList);
  24. var userProject = getCurrentUserProjectUrlPart();
  25. if(userProject !== null) {
  26. getDownloadCount(userProject);
  27. }
  28. }
  29.  
  30. function getCurrentUserProjectUrlPart() {
  31. var splittedPath = window.location.pathname.split('/');
  32. if(splittedPath.length >= 3) {
  33. return splittedPath[1] + '/' + splittedPath[2];
  34. }
  35. }
  36.  
  37. function getDownloadCount(userProjectUserPart) {
  38. var url = "https://api.github.com/repos/" + userProjectUserPart + "/releases";
  39. GM_xmlhttpRequest({
  40. method: "GET",
  41. headers: {
  42. "Cache-Control": "no-cache"
  43. },
  44. url: url,
  45. onload: parseDownloadStatsReponse
  46. });
  47. }
  48.  
  49. function parseDownloadStatsReponse(response) {
  50. var data = $.parseJSON(response.responseText);
  51. if(data !== null && data.length > 0) {
  52. var releaseName = data[0].name;
  53. var htmlUrl = data[0].html_url;
  54. lastReleaseItemList.append($('<a/>').attr({
  55. href: htmlUrl
  56. }).append(releaseName));
  57. if(data[0].assets !== null && data[0].assets.length > 0) {
  58. for(i = 0 ; i < data[0].assets.length ; i++) {
  59. var assetName = data[0].assets[i].name;
  60. var assetDlCount = data[0].assets[i].download_count;
  61. var assetUrl = data[0].assets[i].browser_download_url;
  62. appendAssetDlItem(assetName, assetDlCount, assetUrl);
  63. }
  64. } else {
  65. lastReleaseItemList.append("<br>No binaries in release");
  66. }
  67. } else {
  68. lastReleaseItemList.append("No release");
  69. }
  70. }
  71.  
  72. function appendAssetDlItem(assetName, assetDlCount, assetUrl) {
  73. lastReleaseItemList.append($('<li/>').attr({
  74. style: "margin-left: 20px;"
  75. }).append("<b>Name:</b> <a href='" + assetUrl + "'>" + assetName + '</a>, <b>Dl Count:</b> ' + assetDlCount));
  76. }