e621-sdk
Version:
从E621抓取帖子。支持搜索、引用、随机。
85 lines (84 loc) • 2.71 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const express_1 = __importDefault(require("express"));
const client_1 = require("../client");
const path_1 = __importDefault(require("path"));
const cors_1 = __importDefault(require("cors"));
const parser_1 = require("../parser");
const app = (0, express_1.default)();
const port = process.env.PORT || 3000;
const client = new client_1.E621({
log: true
});
client.configureAxios({
headers: {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36 Edg/138.0.0.0"
}
});
app.use((0, cors_1.default)());
app.get("/api/search", async (req, res) => {
try {
const { tags, limit, page } = req.query;
const posts = await client.searchPost({
tags: (0, parser_1.toSearchTag)(tags),
limit: limit ? parseInt(limit) : undefined,
page: page ? parseInt(page) : undefined
});
res.json(posts.map(post => post.data));
}
catch (err) {
res.status(500).json({ error: err.message });
}
});
app.get("/api/post/:id", async (req, res) => {
try {
const { id } = req.params;
const post = await client.fetchPost(id);
res.json(post.data);
}
catch (err) {
res.status(500).json({ error: err.message });
}
});
app.get("/api/random", async (req, res) => {
try {
const { tags } = req.query;
const post = await client.randomPost(tags);
res.json(post.data);
}
catch (err) {
res.status(500).json({ error: err.message });
}
});
app.get("/api/static/:md5/:ext", async (req, res) => {
try {
const { md5, ext } = req.params;
const data = await client.static(md5, ext);
res.setHeader("Content-Type", `image/${ext}`);
res.send(data);
}
catch (err) {
res.status(500).json({ error: err.message });
}
});
app.get("/api/status", async (_, res) => {
try {
const { status, message } = await client.serverStatus();
res.json({ status, message });
}
catch (err) {
res.status(500).json({ error: err.message });
}
});
app.get("/", (_, res) => {
res.sendFile(path_1.default.resolve("index.html"));
});
app.get("/favicon.ico", (_, res) => {
res.sendFile(path_1.default.resolve("favicon.ico"));
});
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});