Tool to tally up langjam votes.
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. let https = require("https");
  2. let fs = require("fs");
  3. let authorization = "Basic <insert your own base64-encoded username:token>";
  4. let repo = "langjam/jam0001";
  5. let outfile = "rawvotes.txt";
  6. function get(url, accept) {
  7. return new Promise((resolve, reject) => {
  8. let headers = {
  9. "User-Agent": "Reactionator",
  10. "Accept": accept,
  11. "Authorization": authorization,
  12. };
  13. process.stderr.write(Buffer.from("==> GET " + url + "...\n", "utf-8"));
  14. let req = https.get(url, {headers}, res => {
  15. let data = "";
  16. res.on("data", d => {
  17. data += d;
  18. });
  19. res.on("end", () => {
  20. if (res.statusCode != 200) {
  21. process.stderr.write(Buffer.from("ERR " + res.statusCode + "\n"));
  22. throw new Error(data);
  23. }
  24. resolve(data);
  25. });
  26. }).on("error", reject);
  27. });
  28. }
  29. function apiIssueReactions(repo, comment) {
  30. return `/repos/${repo}/issues/comments/${comment}/reactions`;
  31. }
  32. async function handlePage(page, stream) {
  33. for (let issue of page) {
  34. let count = 0;
  35. let people = [];
  36. for (let reactionPageNum = 1; ; ++reactionPageNum) {
  37. let reactionPage = JSON.parse(await get(
  38. `https://api.github.com/repos/${repo}/issues/${issue.number}/reactions?page=${reactionPageNum}`,
  39. "application/vnd.github.squirrel-girl-preview"));
  40. if (reactionPage.length == 0) {
  41. break;
  42. }
  43. for (let reaction of reactionPage) {
  44. if (reaction.content == "+1") {
  45. count += 1;
  46. people.push(reaction.user.login);
  47. }
  48. }
  49. }
  50. stream.write(issue.title.trim() + ";" + count + ";" + people.join(":") + "\n");
  51. }
  52. }
  53. async function main(repo, stream) {
  54. let promises = [];
  55. for (let pageNum = 1; ; ++pageNum) {
  56. let page = JSON.parse(await get(
  57. `https://api.github.com/repos/${repo}/issues?state=open&page=${pageNum}`,
  58. "application/vnd.github.v3+json"));
  59. if (page.length == 0) {
  60. break;
  61. }
  62. promises.push(handlePage(page, stream));
  63. }
  64. await Promise.all(promises);
  65. }
  66. let stream = fs.createWriteStream(outfile);
  67. main(repo, stream).then(() => stream.close());