scraper.ts 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import { Client } from "@elastic/elasticsearch";
  2. import fs from "fs";
  3. import path from "path";
  4. import { config } from "./config";
  5. import sanitize from "sanitize-filename";
  6. const tracking = {};
  7. const client = new Client({
  8. node: config.root,
  9. });
  10. export async function retrieveTargets() {
  11. for (const target of config.targets.sort()) {
  12. try {
  13. const search = await client.search({
  14. index: config.index,
  15. from: 0,
  16. size: 10000,
  17. query: { match: { category: target } },
  18. });
  19. console.log({
  20. action: "saving",
  21. target,
  22. count: search?.hits?.total?.value,
  23. });
  24. fs.mkdirSync(path.join(__dirname, "raw"), {
  25. recursive: true,
  26. });
  27. fs.writeFileSync(
  28. path.join(__dirname, "raw", `${target}.json`),
  29. JSON.stringify(search?.hits?.hits)
  30. );
  31. tracking[target] = true;
  32. } catch (err) {
  33. console.error(err);
  34. tracking[target] = false;
  35. }
  36. }
  37. }
  38. export async function parseTargets() {
  39. for (const target of config.targets.sort()) {
  40. console.log({ action: "parsing", target });
  41. if (tracking[target] === true) {
  42. const raw = JSON.parse(
  43. fs.readFileSync(path.join(__dirname, "raw", `${target}.json`))
  44. );
  45. const parsed = raw.map((entry) => entry._source);
  46. try {
  47. fs.mkdirSync(path.join(__dirname, "parsed"), {
  48. recursive: true,
  49. });
  50. fs.writeFileSync(
  51. path.join(__dirname, "parsed", `${target}.json`),
  52. JSON.stringify(parsed, null, " ")
  53. );
  54. } catch (err) {
  55. console.error(err);
  56. }
  57. }
  58. }
  59. }
  60. export async function sortTargets() {
  61. for (const target of config.targets.sort()) {
  62. console.log({ action: "sorting", target });
  63. if (tracking[target] === true) {
  64. const parsed = JSON.parse(
  65. fs.readFileSync(path.join(__dirname, "parsed", `${target}.json`))
  66. );
  67. for (const entry of parsed) {
  68. try {
  69. fs.mkdirSync(path.join(__dirname, "sorted", `${target}`), {
  70. recursive: true,
  71. });
  72. fs.writeFileSync(
  73. path.join(
  74. __dirname,
  75. "sorted",
  76. `${target}`,
  77. `${sanitize(entry?.name)}.json`
  78. ),
  79. JSON.stringify(entry, null, " ")
  80. );
  81. } catch (err) {
  82. console.error(err);
  83. }
  84. }
  85. }
  86. }
  87. }
  88. async function run() {
  89. await retrieveTargets();
  90. await parseTargets();
  91. await sortTargets();
  92. }
  93. run().catch(console.log);