rsshub
Version:
Make RSS Great Again!
62 lines (61 loc) • 2.06 kB
JavaScript
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 };