File size: 1,774 Bytes
ec86b59
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import { promises as fs } from "fs";

const fetchJson = async (url) => {
  const response = await fetch(url);
  if (!response.ok) throw new Error("Network response was not ok");
  return response.json();
};

const fetchAllPages = async () => {
  const pageNumbers = Array.from({ length: 2 }, (_, i) => i);
  const urls = pageNumbers.map((pageNumber) => {
    const url = new URL("https://huggingface.co/spaces-json");
    url.search = new URLSearchParams({
      p: pageNumber,
      sort: "trending",
    }).toString();
    return url;
  });
  const jsonResponses = await Promise.all(urls.map(fetchJson));
  return jsonResponses.flatMap((json) => json.spaces);
};

const addAppFileToSpaces = async (spaces) => {
  return Promise.all(
    spaces.map(async (space) => {
      try {
        const url = `https://huggingface.co/spaces/${space.id}/resolve/main/app.py`;
        const response = await fetch(url);
        if (response.ok) {
          console.log(`Fetched appFile for space ${space.id}`);
          const appFile = await response.text();
          return { ...space, appFile };
        }
      } catch (error) {
        console.error(
          `Failed to fetch appFile for space ${space.id}: ${error}`
        );
      }
      return space;
    })
  );
};

const saveAllTrendingSpaces = async () => {
  try {
    const spaces = await fetchAllPages();
    const spacesWithAppFile = await addAppFileToSpaces(spaces);
    const publicSpaces = spacesWithAppFile.filter(
      (space) => space.private === false
    );
    await fs.writeFile(
      "trendingSpaces.json",
      JSON.stringify(publicSpaces, null, 2)
    );
    console.log("Data written to file");
  } catch (error) {
    console.error(`An error occurred: ${error}`);
  }
};

saveAllTrendingSpaces();