diff --git a/package.json b/package.json index 3f1b435..88d1dec 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "dependencies": { "@vercel/og": "0.0.14", "next": "latest", + "node-fetch": "2.6.1", "react": "latest", "react-dom": "latest" }, diff --git a/pages/api/dynamic-image.tsx b/pages/api/dynamic-image.tsx index ae914be..1201d5e 100644 --- a/pages/api/dynamic-image.tsx +++ b/pages/api/dynamic-image.tsx @@ -1,20 +1,77 @@ import { ImageResponse } from '@vercel/og' import { NextRequest } from 'next/server' +import fetch from 'node-fetch'; export const config = { runtime: 'experimental-edge', } +const TITLE = "Measure is unceasing" + +const getHiTitle = (body, i) => { + console.log(`Getting h${i}`) + let hi = `h${i}` + let regex = new RegExp(hi + "\>(.*)\<\/" + hi) + console.log(regex) + let his = body.split("\n").filter(line => line.includes(`<${hi}>`)) + for (let line of his) { + let regexOutput = regex.exec(line) + if (regexOutput != null) { + let regexMatch = regexOutput[1] + if (regexMatch != TITLE && !regexMatch.includes(TITLE)) { + return regexMatch + } + } + } + return TITLE +} + +const getTitle = body => { + let bestH1match = getHiTitle(body, 1) + if (bestH1match == TITLE) { + let bestH2match = getHiTitle(body, 2) + return bestH2match + } + return bestH1match +} + +const getFirstImgurImage = body => { + let lines = body.split("\n").filter(line => line.includes('img src="https://i.imgur.com/')) + if (lines.length > 0) { + let regex = new RegExp('img src="https://i.imgur.com/(.*?)"') + let regexOutput = regex.exec(lines[0]) + if (regexOutput != null) { + let regexMatch = regexOutput[1] + let imgurUrl = `https://i.imgur.com/${regexMatch}` + console.log(imgurUrl) + return imgurUrl + } + } +} + export default async function handler(req: NextRequest) { const { searchParams } = req.nextUrl - const username = searchParams.get('username') - if (!username) { - return new ImageResponse(<>{'Visit with "?username=vercel"'}>, { + const endpoint = searchParams.get('endpoint') + console.log(searchParams) + + if (!endpoint) { + return new ImageResponse(<>{'Try with "?endpoint=blog/2022/09/02/simple-estimation-examples-in-squiggle/"'}>, { width: 1200, height: 630, }) } + const response = await fetch(`https://nunosempere.com/${endpoint}`); + const body = await response.text(); + + // Ah fuck it, I'll just use a regex. + // + let title = getTitle(body) + console.log(title) + + let image = getFirstImgurImage(body) + + return new ImageResponse( (
github.com/{username}
+