Tool to tally up langjam votes.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

findvotes.js 2.0KB

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());