Want to contribute? Fork me on Codeberg.org!
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

52 lines
1.5 KiB

2 years ago
const app = require("express")();
app.use(require("cors")());
const fetch = require("node-fetch");
const jsdom = require("jsdom");
async function getResults(query) {
return await fetch("https://www.bing.com/images/search?q=" + query)
2 years ago
.then(response => response.text())
.then(text => new jsdom.JSDOM(text).window.document)
.then(document => {
const imgNodes = document.getElementsByClassName("mimg");
let results = [];
for (let i = 0; i < imgNodes.length; i++) {
const src = imgNodes[i].src;
if (!src.startsWith("http")) {
break;
}
results.push(src);
}
return results;
2 years ago
});
}
app.get(["/random/:query*.jpg" /* legacy routing */, "/:query/random.jpg", "/:query/random"], (request, response) => {
getResults(request.params.query).then(results => {
response.redirect(results[Math.floor(Math.random() * results.length)]);
});
});
app.get("/:query/list", (request, response) => {
response.writeHead(200, { "Content-Type": "application/json" });
getResults(request.params.query).then(results => {
response.write(JSON.stringify(results));
response.end();
});
});
app.get(["/:query/:i.jpg", "/:query/:i"], (request, response) => {
getResults(request.params.query).then(results => {
response.redirect(results[request.params.i % results.length]);
});
});
app.get(["/:query.jpg", "/:query"], (request, response) => {
getResults(request.params.query).then(results => {
response.redirect(results[0]);
});
2 years ago
});
app.listen(process.argv[2] ? process.argv[2] : 3000);