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.
46 lines
1.2 KiB
46 lines
1.2 KiB
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)
|
|
.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;
|
|
});
|
|
}
|
|
|
|
app.get("/random/:query*.jpg", (request, response) => {
|
|
getResults(request.params.query).then(results => {
|
|
response.redirect(results[Math.floor(Math.random() * results.length)]);
|
|
});
|
|
});
|
|
|
|
app.get("/:query*.jpg", (request, response) => {
|
|
getResults(request.params.query).then(results => {
|
|
response.redirect(results[0]);
|
|
});
|
|
});
|
|
|
|
app.get("/:query", (request, response) => {
|
|
response.writeHead(200, { "Content-Type": "application/json" });
|
|
getResults(request.params.query).then(results => {
|
|
response.write(JSON.stringify(results));
|
|
response.end();
|
|
});
|
|
});
|
|
|
|
app.listen(process.argv[2] ? process.argv[2] : 3000);
|