issue.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. const axios = require("axios");
  2. const lodash = require("lodash");
  3. const fs = require("fs");
  4. const accessTokens = "xxx";
  5. const main = async () => {
  6. const getIssues = async (pageNum, since) => {
  7. console.log("trying get issue page", pageNum);
  8. const res = await axios.get(`https://api.github.com/repos/DouyinFE/semi-design/issues`, {
  9. params: {
  10. since,
  11. page: pageNum,
  12. state: "all",
  13. },
  14. headers: {
  15. Authorization: `Bearer ${accessTokens}`
  16. }
  17. });
  18. if (res.status !== 200 || !res.data || res.data.length===0) {
  19. return null;
  20. }
  21. return res.data;
  22. };
  23. let list = [];
  24. const since = "2023-01-01";
  25. let currentPage = 1;
  26. while (true) {
  27. const data = await getIssues(currentPage, since);
  28. if (data) {
  29. list = [...list, ...data];
  30. } else {
  31. break;
  32. }
  33. currentPage++;
  34. }
  35. console.log(`Find ${list.length} updated issues since ${since}`);
  36. const result = {};
  37. const whichQ = (dateRaw) => {
  38. const date = new Date(dateRaw);
  39. const month = date.getMonth() + 1;
  40. return Math.ceil(month / 3);
  41. };
  42. list.forEach(issue => {
  43. const createdAt = issue['created_at'];
  44. const closedAt = issue['closed_at'];
  45. (()=>{
  46. if (new Date(createdAt).getFullYear()!== new Date().getFullYear()) {
  47. return;
  48. }
  49. const tmp = lodash.get(result, [`q${whichQ(createdAt)}`, "created"], []);
  50. tmp.push(issue);
  51. lodash.set(result, [`q${whichQ(createdAt)}`, "created"], tmp);
  52. })();
  53. if (closedAt!==null) {
  54. (()=>{
  55. if (new Date(closedAt).getFullYear()!== new Date().getFullYear()) {
  56. return;
  57. }
  58. const tmp = lodash.get(result, [`q${whichQ(closedAt)}`, "closed"], []);
  59. tmp.push(issue);
  60. lodash.set(result, [`q${whichQ(closedAt)}`, "closed"], tmp);
  61. })();
  62. }
  63. });
  64. fs.writeFileSync("./output.json", JSON.stringify(list, null, " "));
  65. Object.entries(result).forEach(([q, data])=>{
  66. console.log(`${q}: created ${data.created.length} closed ${data.closed.length}`);
  67. });
  68. };
  69. main();