UNPKG

rsshub

Version:
62 lines (61 loc) 2.06 kB
import { t as got_default } from "./got-BTowW50G.mjs"; import { t as baseURL } from "./const-v4T9voj7.mjs"; import { load } from "cheerio"; //#region lib/routes/shopify/apps/search.ts const route = { path: "/apps/search/:q", example: "/shopify/apps/search/flow", parameters: { q: "需要搜索的 App" }, name: "App store search", maintainers: ["PrintNow"], handler, radar: [{ source: ["apps.shopify.com/search"], target: (_params, url) => { const searchParams = new URL(url).searchParams; if (!searchParams.has("q")) return ""; return `/shopify/apps/search/${searchParams.get("q")}`; } }] }; async function handler(ctx) { const { q = "" } = ctx.req.param(); const $ = load(await (await got_default.get(`${baseURL}/search`, { searchParams: { q }, headers: { accept: "text/html, application/xhtml+xml", "accept-language": "en-US;q=0.9", "turbo-frame": "search_page", dnt: "1" } })).data); const items = $(".search-results-component div[data-controller=\"app-card\"]").toArray().map((item) => { const handle = $(item).attr("data-app-card-handle-value"); const appInfo = $(item).find("div.tw-self-stretch"); const rattingMatch = appInfo.find("span").text().match(/\d\.\d/); const rattingCountMatch = appInfo.find("span + span.tw-sr-only").text().match(/\d+/); const description = $(item).find("div.tw-text-fg-secondary:not(.tw-mb-md)").eq(1).text().trim(); return { title: $(item).attr("data-app-card-name-value") ?? "", link: `${baseURL}/${handle}`, description, image: $(item).attr("data-app-card-icon-url-value"), _extra: { handle, description, built_for_shopify: $(item).find("span.built-for-shopify-badge").length > 0, ratting: rattingMatch ? Number(rattingMatch[0]) : 0, ratting_count: rattingCountMatch ? Number(rattingCountMatch[0]) : 0 } }; }); return { title: `Search results for "${q}" – Shopify App Store`, link: `https://apps.shopify.com/search?q=${q}`, allowEmpty: true, language: "en-us", item: items }; } //#endregion export { route };