Skip to content

Instantly share code, notes, and snippets.

@merrickluo
Last active May 23, 2021 11:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save merrickluo/18115ba1a8776abc7809478e0601c5d7 to your computer and use it in GitHub Desktop.
Save merrickluo/18115ba1a8776abc7809478e0601c5d7 to your computer and use it in GitHub Desktop.
addEventListener("fetch", (event) => {
event.respondWith(
handleRequest(event).catch(
(err) => new Response(err.stack, { status: 500 })
)
);
});
/**
* Many more examples available at:
* https://developers.cloudflare.com/workers/examples
*/
async function handleRequest(event) {
const { request } = event;
const { pathname } = new URL(request.url);
if (pathname.startsWith("/cardimage")) {
let cardname = pathname.split("/")[2];
let card_meta = await getCardMeta(cardname);
if (card_meta == null) {
return new Response("404 not found", {status: 404});
}
let cardset = card_meta.set;
let cardnum = card_meta.collector_number;
if (card_meta.image_uris == undefined) {
return Response.redirect("https://api.scryfall.com/cards/named?format=image&exact=" + cardname, 302)
}
let fallbackimage = card_meta.image_uris.png || card_meta.image_uris.normal;
let zhimage = await getZhCardImage(cardset, cardnum);
if (zhimage != null) {
return Response.redirect(zhimage, 302);
}
return Response.redirect(fallbackimage, 302)
}
return new Response("err", { status: 500 })
}
async function getCardMeta(cardname) {
let meta_resp = await fetch("https://api.scryfall.com/cards/named?exact=" + cardname);
if (meta_resp.status != 200) {
return null;
}
return await meta_resp.json();
}
async function getZhCardImage(cardset, cardnum) {
let apiurl = "https://api.scryfall.com/cards/"
+ cardset + "/"
+ new String(cardnum) + "/zhs";
let resp = await fetch(apiurl);
let body = await resp.json();
if (resp.status != 200) {
return null;
}
if (body.image_status == "placeholder") {
return null;
}
return body.image_uris && body.image_uris.png || body.image_uris.normal;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment