forked from MapComplete/MapComplete
Add JSON-LD proxy server
This commit is contained in:
parent
50156ee3f5
commit
2af6af7630
2 changed files with 45 additions and 2 deletions
|
@ -9,7 +9,7 @@ export class Server {
|
|||
handle: {
|
||||
mustMatch: string | RegExp
|
||||
mimetype: string
|
||||
handle: (path: string) => Promise<string>
|
||||
handle: (path: string, queryParams: URLSearchParams) => Promise<string>
|
||||
}[]
|
||||
) {
|
||||
handle.push({
|
||||
|
@ -89,7 +89,7 @@ export class Server {
|
|||
}
|
||||
|
||||
try {
|
||||
const result = await handler.handle(path)
|
||||
const result = await handler.handle(path, url.searchParams)
|
||||
res.writeHead(200, { "Content-Type": handler.mimetype })
|
||||
res.write(result)
|
||||
res.end()
|
||||
|
|
43
scripts/serverLdScrape.ts
Normal file
43
scripts/serverLdScrape.ts
Normal file
|
@ -0,0 +1,43 @@
|
|||
import Script from "../scripts/Script"
|
||||
import { Server } from "../scripts/server"
|
||||
import { Utils } from "../src/Utils"
|
||||
import parse from "node-html-parser"
|
||||
class ServerLdScrape extends Script {
|
||||
constructor() {
|
||||
super("Starts a server which fetches a webpage and returns embedded LD+JSON")
|
||||
}
|
||||
async main(args: string[]): Promise<void> {
|
||||
const port = Number(args[0] ?? 2346)
|
||||
new Server(port, {}, [
|
||||
{
|
||||
mustMatch: "extractgraph",
|
||||
mimetype: "application/ld+json",
|
||||
async handle(content, searchParams: URLSearchParams) {
|
||||
const url = searchParams.get("url")
|
||||
const dloaded = await Utils.download(url, {
|
||||
"User-Agent":
|
||||
"MapComplete/openstreetmap scraper; pietervdvn@posteo.net; https://github.com/pietervdvn/MapComplete",
|
||||
})
|
||||
const parsed = parse(dloaded)
|
||||
const scripts = Array.from(parsed.getElementsByTagName("script"))
|
||||
const snippets = []
|
||||
for (const script of scripts) {
|
||||
const tp = script.attributes["type"]
|
||||
if (tp !== "application/ld+json") {
|
||||
continue
|
||||
}
|
||||
try {
|
||||
snippets.push(JSON.parse(script.textContent))
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
}
|
||||
}
|
||||
|
||||
return JSON.stringify(snippets)
|
||||
},
|
||||
},
|
||||
])
|
||||
}
|
||||
}
|
||||
|
||||
new ServerLdScrape().run()
|
Loading…
Reference in a new issue