summaryrefslogtreecommitdiff
path: root/app/routes/api.scrape.ts
blob: 40719853889e5337ae44a6380f2ef2c5ac914f49 (plain)
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
/**
 * Resource route: POST /api/scrape
 * Triggers scraping for all venues (or a specific one via ?venue_id=xxx).
 * Returns JSON results and redirects back if called from a form.
 */
import { redirect } from "react-router";
import type { Route } from "./+types/api.scrape";
import { runAllScrapers, runScraper } from "~/lib/scraper-runner.server";

export async function action({ request }: Route.ActionArgs) {
  const formData = await request.formData();
  const venueId = formData.get("venue_id");

  const results = venueId
    ? [await runScraper(String(venueId))]
    : await runAllScrapers();

  // If called from a browser form, redirect back
  const referer = request.headers.get("Referer");
  if (referer) {
    return redirect(referer);
  }

  return Response.json({ results });
}

// Allow GET for quick testing in the browser
export async function loader({ request }: Route.LoaderArgs) {
  const url = new URL(request.url);
  const venueId = url.searchParams.get("venue_id");

  const results = venueId
    ? [await runScraper(venueId)]
    : await runAllScrapers();

  return Response.json({ results });
}