xkcd logo

Hi, this is xkcd.uk, a simple xkcd URL shortener / lengthener running off CF workers. When inputting a number, you will be redirected to xkcd.com/number. Otherwise, xkcd.uk conducts a search on DuckDuckGo: \site:xkcd.com string, and follows the redirect, leading you to (hopefully) that comic.

import { load } from "cheerio"; const ddg_parsing_regex = /.*\; url=(.*)/ const xkcd_number_check = /^\/(\d+)$/ export default { async fetch(request, env, ctx) { const url = new URL(request.url); if (xkcd_number_check.test(url.pathname)) // Hey, they're using a number! // Let's redirect them to xkcd.com/$1. return Response.redirect(`https://xkcd.com/${xkcd_number_check.exec(url.pathname)?.[1]}`) // Oh, they're not using a number... // Let's conduct a search, then. else { let response = await fetch("https://duckduckgo.com/?q=" + encodeURIComponent(`\\site:xkcd.com ${url.pathname.slice(1)}`)); let html = await response.text() let $ = load(html) let content = $(`meta[http-equiv=refresh]`).get(0)?.attribs.content let ddg_redirect_pathname = content?.match(ddg_parsing_regex)?.[1] let ddg_url = new URL(`https://duckduckgo.com${ddg_redirect_pathname}`).searchParams.get("uddg") if (content && ddg_redirect_pathname && ddg_url) { return Response.redirect(ddg_url) } else return new Response(html, {headers: response.headers}) } }, };

^ this is the worker that powers xkcd.uk ^

For examples, try xkcd.uk/standards, or xkcd.uk/927.
Source for this site available on GitHub.