UNPKG

rsshub

Version:
84 lines (82 loc) 2.6 kB
import "./config-C37vj7VH.mjs"; import "./logger-Czu8UMNd.mjs"; import { t as parseDate } from "./parse-date-BrP7mxXf.mjs"; import "./proxy-Db7uGcYb.mjs"; import { n as puppeteer_default } from "./puppeteer-DGmvuGvT.mjs"; import { load } from "cheerio"; //#region lib/routes/ups/track.ts const route = { path: "/track/:trackingNumber", categories: ["other"], example: "/ups/track/1Z78R6790470567520", parameters: { trackingNumber: "The UPS tracking number (e.g., 1Z78R6790470567520)." }, features: { requireConfig: false, requirePuppeteer: false, antiCrawler: false, supportBT: false, supportPodcast: false, supportScihub: false }, name: "Tracking", maintainers: ["Aquabet"], handler }; async function handler(ctx) { const { trackingNumber } = ctx.req.param(); const url = `https://www.ups.com/track?loc=en_US&tracknum=${trackingNumber}`; const browser = await puppeteer_default(); const page = await browser.newPage(); await page.setRequestInterception(true); page.on("request", (request) => { if ([ "image", "stylesheet", "font", "ping", "fetch" ].includes(request.resourceType())) request.abort(); else request.continue(); }); await page.goto(url, { waitUntil: "domcontentloaded" }); const viewDetailsButton = "#st_App_View_Details"; try { await page.waitForSelector(viewDetailsButton); await page.click(viewDetailsButton); } catch { return { title: `UPS Tracking - ${trackingNumber}`, link: url, item: [] }; } await page.waitForSelector("tr[id^=\"stApp_activitydetails_row\"]"); const content = await page.content(); await browser.close(); const $ = load(content); const items = $("tr[id^=\"stApp_activitydetails_row\"]").toArray().map((el, i) => { const dateTimeStr = ($(el).find(`#stApp_activitiesdateTime${i}`).text() || "Not Provided").trim().replace(/(\d{1,}\/\d{1,}\/\d{4})(\d{1,}:\d{1,}\s[AP]\.?M\.?)/, "$1 $2").replaceAll("P.M.", "PM").replaceAll("A.M.", "AM"); const pubDate = parseDate(dateTimeStr); const lines = $(el).find(`#stApp_milestoneActivityLocation${i}`).text().trim().replaceAll(/\s*\n+\s*/g, "\n").split("\n").map((l) => l.trim()).filter(Boolean); const status = lines[0]; const location = lines.at(-1) || ""; return { title: status, link: url, guid: `${trackingNumber}-${i}`, description: ` Status: ${status} <br> Location: ${location} <br> Date and Time: ${dateTimeStr} `, pubDate }; }); return { title: `UPS Tracking - ${trackingNumber}`, link: url, item: items }; } //#endregion export { route };