style: auto format

This commit is contained in:
github-actions[bot] 2026-04-14 15:15:05 +00:00
parent 62b5544512
commit ebfe021b50
346 changed files with 749 additions and 730 deletions

View File

@ -5,7 +5,7 @@ import app from '@/app';
import { config } from '@/config';
describe('error', () => {
it(`error`, async () => {
it('error', async () => {
const response = await app.request('/test/error');
expect(response.status).toBe(503);
const text = await response.text();
@ -14,7 +14,7 @@ describe('error', () => {
});
describe('httperror', () => {
it(`httperror`, async () => {
it('httperror', async () => {
const response = await app.request('/test/httperror');
expect(response.status).toBe(503);
const text = await response.text();
@ -23,11 +23,11 @@ describe('httperror', () => {
});
describe('RequestInProgressError', () => {
it(`RequestInProgressError with retry`, async () => {
it('RequestInProgressError with retry', async () => {
const responses = await Promise.all([app.request('/test/slow'), app.request('/test/slow')]);
expect(new Set(responses.map((r) => r.status))).toEqual(new Set([200, 200]));
});
it(`RequestInProgressError`, async () => {
it('RequestInProgressError', async () => {
const responses = await Promise.all([app.request('/test/slow4'), app.request('/test/slow4')]);
expect(new Set(responses.map((r) => r.status))).toEqual(new Set([200, 503]));
expect(new Set(responses.map((r) => r.headers.get('cache-control')))).toEqual(new Set([`public, max-age=${config.cache.routeExpire}`, `public, max-age=${config.requestTimeout / 1000}`]));
@ -37,7 +37,7 @@ describe('RequestInProgressError', () => {
});
describe('config-not-found-error', () => {
it(`config-not-found-error`, async () => {
it('config-not-found-error', async () => {
const response = await app.request('/test/config-not-found-error');
expect(response.status).toBe(503);
const text = await response.text();
@ -46,7 +46,7 @@ describe('config-not-found-error', () => {
});
describe('invalid-parameter-error', () => {
it(`invalid-parameter-error`, async () => {
it('invalid-parameter-error', async () => {
const response = await app.request('/test/invalid-parameter-error');
expect(response.status).toBe(503);
const text = await response.text();
@ -55,7 +55,7 @@ describe('invalid-parameter-error', () => {
});
describe('captcha-error', () => {
it(`captcha-error`, async () => {
it('captcha-error', async () => {
const response = await app.request('/test/captcha-error');
expect(response.status).toBe(503);
const text = await response.text();

View File

@ -15,7 +15,7 @@ afterEach(() => {
});
describe('access-control', () => {
it(`access key`, async () => {
it('access key', async () => {
const key = '1L0veRSSHub';
const code = md5('/test/2' + key);
process.env.ACCESS_KEY = key;

View File

@ -10,7 +10,7 @@ afterEach(() => {
});
describe('filter-engine', () => {
it(`filter RE2 engine ReDoS attack`, async () => {
it('filter RE2 engine ReDoS attack', async () => {
const app = (await import('@/app')).default;
const response = await app.request('/test/1?filter=abc(%3F%3Ddef)');
@ -18,7 +18,7 @@ describe('filter-engine', () => {
expect(await response.text()).toMatch(/RE2JSSyntaxException/);
});
it(`filter Regexp engine backward compatibility`, async () => {
it('filter Regexp engine backward compatibility', async () => {
process.env.FILTER_REGEX_ENGINE = 'regexp';
const app = (await import('@/app')).default;
@ -27,7 +27,7 @@ describe('filter-engine', () => {
expect(response.status).toBe(200);
});
it(`filter Regexp engine test config`, async () => {
it('filter Regexp engine test config', async () => {
process.env.FILTER_REGEX_ENGINE = 'somethingelse';
const app = (await import('@/app')).default;

View File

@ -17,7 +17,7 @@ afterAll(() => {
});
describe('header', () => {
it(`header`, async () => {
it('header', async () => {
const app = (await import('@/app')).default;
const { config } = await import('@/config');
const response = await app.request('/test/1');
@ -32,7 +32,7 @@ describe('header', () => {
expect(response.headers.get('x-rsshub-route')).toBe('/test/:id/:params?');
});
it(`etag`, async () => {
it('etag', async () => {
const app = (await import('@/app')).default;
const response = await app.request('/test/1', {
headers: {

View File

@ -11,7 +11,7 @@ const { default: app } = await import('@/app');
const parser = new Parser();
describe('filter', () => {
it(`filter`, async () => {
it('filter', async () => {
const response = await app.request('/test/1?filter=Description4|Title5');
const parsed = await parser.parseString(await response.text());
expect(parsed.items.length).toBe(2);
@ -19,13 +19,13 @@ describe('filter', () => {
expect(parsed.items[1].title).toBe('Title5');
});
it(`filter filter_case_sensitive default`, async () => {
it('filter filter_case_sensitive default', async () => {
const response = await app.request('/test/1?filter=description4|title5');
const parsed = await parser.parseString(await response.text());
expect(parsed.items.length).toBe(0);
});
it(`filter filter_case_sensitive=false`, async () => {
it('filter filter_case_sensitive=false', async () => {
const response = await app.request('/test/1?filter=description4|title5&filter_case_sensitive=false');
const parsed = await parser.parseString(await response.text());
expect(parsed.items.length).toBe(2);
@ -33,35 +33,35 @@ describe('filter', () => {
expect(parsed.items[1].title).toBe('Title5');
});
it(`filter_title`, async () => {
it('filter_title', async () => {
const response = await app.request('/test/1?filter_title=Description4|Title5');
const parsed = await parser.parseString(await response.text());
expect(parsed.items.length).toBe(1);
expect(parsed.items[0].title).toBe('Title5');
});
it(`filter_title filter_case_sensitive=false`, async () => {
it('filter_title filter_case_sensitive=false', async () => {
const response = await app.request('/test/1?filter_title=description4|title5&filter_case_sensitive=false');
const parsed = await parser.parseString(await response.text());
expect(parsed.items.length).toBe(1);
expect(parsed.items[0].title).toBe('Title5');
});
it(`filter_description`, async () => {
it('filter_description', async () => {
const response = await app.request('/test/1?filter_description=Description4|Title5');
const parsed = await parser.parseString(await response.text());
expect(parsed.items.length).toBe(1);
expect(parsed.items[0].title).toBe('Title4');
});
it(`filter_description filter_case_sensitive=false`, async () => {
it('filter_description filter_case_sensitive=false', async () => {
const response = await app.request('/test/1?filter_description=description4|title5&filter_case_sensitive=false');
const parsed = await parser.parseString(await response.text());
expect(parsed.items.length).toBe(1);
expect(parsed.items[0].title).toBe('Title4');
});
it(`filter_author`, async () => {
it('filter_author', async () => {
const response = await app.request('/test/1?filter_author=DIYgod4|DIYgod5');
const parsed = await parser.parseString(await response.text());
expect(parsed.items.length).toBe(2);
@ -69,13 +69,13 @@ describe('filter', () => {
expect(parsed.items[1].title).toBe('Title5');
});
it(`filter_author filter_case_sensitive default`, async () => {
it('filter_author filter_case_sensitive default', async () => {
const response = await app.request('/test/1?filter_author=diygod4|diygod5');
const parsed = await parser.parseString(await response.text());
expect(parsed.items.length).toBe(0);
});
it(`filter_author filter_case_sensitive=false`, async () => {
it('filter_author filter_case_sensitive=false', async () => {
const response = await app.request('/test/1?filter_author=diygod4|diygod5&filter_case_sensitive=false');
const parsed = await parser.parseString(await response.text());
expect(parsed.items.length).toBe(2);
@ -83,7 +83,7 @@ describe('filter', () => {
expect(parsed.items[1].title).toBe('Title5');
});
it(`filter_category`, async () => {
it('filter_category', async () => {
const response = await app.request('/test/filter?filter_category=Category0|Category1');
const parsed = await parser.parseString(await response.text());
expect(parsed.items.length).toBe(2);
@ -91,13 +91,13 @@ describe('filter', () => {
expect(parsed.items[1].title).toBe('Filter Title2');
});
it(`filter_category filter_case_sensitive default`, async () => {
it('filter_category filter_case_sensitive default', async () => {
const response = await app.request('/test/filter?filter_category=category0|category1');
const parsed = await parser.parseString(await response.text());
expect(parsed.items.length).toBe(0);
});
it(`filter_category filter_case_sensitive=false`, async () => {
it('filter_category filter_case_sensitive=false', async () => {
const response = await app.request('/test/filter?filter_category=category0|category1&filter_case_sensitive=false');
const parsed = await parser.parseString(await response.text());
expect(parsed.items.length).toBe(2);
@ -105,14 +105,14 @@ describe('filter', () => {
expect(parsed.items[1].title).toBe('Filter Title2');
});
it(`filter_category filter_case_sensitive=false category string`, async () => {
it('filter_category filter_case_sensitive=false category string', async () => {
const response = await app.request('/test/filter?filter_category=category3&filter_case_sensitive=false');
const parsed = await parser.parseString(await response.text());
expect(parsed.items.length).toBe(1);
expect(parsed.items[0].title).toBe('Filter Title3');
});
it(`filter_category illegal_category`, async () => {
it('filter_category illegal_category', async () => {
const response = await app.request('/test/filter-illegal-category?filter_category=CategoryIllegal');
const parsed = await parser.parseString(await response.text());
expect(parsed.items.length).toBe(1);
@ -120,7 +120,7 @@ describe('filter', () => {
expect(parsed.items[0].categories?.[0]).toBe('CategoryIllegal');
});
it(`filter_time`, async () => {
it('filter_time', async () => {
const response = await app.request('/test/current_time?filter_time=25');
const parsed = await parser.parseString(await response.text());
expect(parsed.items.length).toBe(2);
@ -128,7 +128,7 @@ describe('filter', () => {
expect(parsed.items[1].title).toBe('Title2');
});
it(`filterout`, async () => {
it('filterout', async () => {
const response = await app.request('/test/1?filterout=Description4|Title5');
const parsed = await parser.parseString(await response.text());
expect(parsed.items.length).toBe(3);
@ -137,7 +137,7 @@ describe('filter', () => {
expect(parsed.items[2].title).toBe('Title3');
});
it(`filterout filter_case_sensitive default`, async () => {
it('filterout filter_case_sensitive default', async () => {
const response = await app.request('/test/1?filterout=description4|title5');
const parsed = await parser.parseString(await response.text());
expect(parsed.items.length).toBe(5);
@ -146,7 +146,7 @@ describe('filter', () => {
expect(parsed.items[2].title).toBe('Title3');
});
it(`filterout filter_case_sensitive=false`, async () => {
it('filterout filter_case_sensitive=false', async () => {
const response = await app.request('/test/1?filterout=description4|title5&filter_case_sensitive=false');
const parsed = await parser.parseString(await response.text());
expect(parsed.items.length).toBe(3);
@ -155,7 +155,7 @@ describe('filter', () => {
expect(parsed.items[2].title).toBe('Title3');
});
it(`filterout_title`, async () => {
it('filterout_title', async () => {
const response = await app.request('/test/1?filterout_title=Description4|Title5');
const parsed = await parser.parseString(await response.text());
expect(parsed.items.length).toBe(4);
@ -165,7 +165,7 @@ describe('filter', () => {
expect(parsed.items[3].title).toBe('Title4');
});
it(`filterout_title filter_case_sensitive=false`, async () => {
it('filterout_title filter_case_sensitive=false', async () => {
const response = await app.request('/test/1?filterout_title=description4|title5&filter_case_sensitive=false');
const parsed = await parser.parseString(await response.text());
expect(parsed.items.length).toBe(4);
@ -175,7 +175,7 @@ describe('filter', () => {
expect(parsed.items[3].title).toBe('Title4');
});
it(`filterout_description`, async () => {
it('filterout_description', async () => {
const response = await app.request('/test/1?filterout_description=Description4|Title5');
const parsed = await parser.parseString(await response.text());
expect(parsed.items.length).toBe(4);
@ -185,7 +185,7 @@ describe('filter', () => {
expect(parsed.items[3].title).toBe('Title5');
});
it(`filterout_description filter_case_sensitive=false`, async () => {
it('filterout_description filter_case_sensitive=false', async () => {
const response = await app.request('/test/1?filterout_description=description4|title5&filter_case_sensitive=false');
const parsed = await parser.parseString(await response.text());
expect(parsed.items.length).toBe(4);
@ -195,7 +195,7 @@ describe('filter', () => {
expect(parsed.items[3].title).toBe('Title5');
});
it(`filterout_author`, async () => {
it('filterout_author', async () => {
const response = await app.request('/test/1?filterout_author=DIYgod4|DIYgod5');
const parsed = await parser.parseString(await response.text());
expect(parsed.items.length).toBe(3);
@ -204,7 +204,7 @@ describe('filter', () => {
expect(parsed.items[2].title).toBe('Title3');
});
it(`filterout_author filter_case_sensitive default`, async () => {
it('filterout_author filter_case_sensitive default', async () => {
const response = await app.request('/test/1?filterout_author=diygod4|diygod5');
const parsed = await parser.parseString(await response.text());
expect(parsed.items.length).toBe(5);
@ -213,7 +213,7 @@ describe('filter', () => {
expect(parsed.items[2].title).toBe('Title3');
});
it(`filterout_author filter_case_sensitive=false`, async () => {
it('filterout_author filter_case_sensitive=false', async () => {
const response = await app.request('/test/1?filterout_author=diygod4|diygod5&filter_case_sensitive=false');
const parsed = await parser.parseString(await response.text());
expect(parsed.items.length).toBe(3);
@ -222,7 +222,7 @@ describe('filter', () => {
expect(parsed.items[2].title).toBe('Title3');
});
it(`filterout_category`, async () => {
it('filterout_category', async () => {
const response = await app.request('/test/filter?filterout_category=Category0|Category1');
const parsed = await parser.parseString(await response.text());
expect(parsed.items.length).toBe(6);
@ -231,7 +231,7 @@ describe('filter', () => {
expect(parsed.items[2].title).toBe('Title2');
});
it(`filterout_category filter_case_sensitive default`, async () => {
it('filterout_category filter_case_sensitive default', async () => {
const response = await app.request('/test/filter?filterout_category=category0|category1');
const parsed = await parser.parseString(await response.text());
expect(parsed.items.length).toBe(8);
@ -241,7 +241,7 @@ describe('filter', () => {
expect(parsed.items[3].title).toBe('Title1');
});
it(`filterout_category filter_case_sensitive=false`, async () => {
it('filterout_category filter_case_sensitive=false', async () => {
const response = await app.request('/test/filter?filterout_category=category0|category1&filter_case_sensitive=false');
const parsed = await parser.parseString(await response.text());
expect(parsed.items.length).toBe(6);
@ -250,14 +250,14 @@ describe('filter', () => {
expect(parsed.items[2].title).toBe('Title2');
});
it(`filter combination`, async () => {
it('filter combination', async () => {
const response = await app.request('/test/filter?filter_title=Filter&filter_description=Description1');
const parsed = await parser.parseString(await response.text());
expect(parsed.items.length).toBe(1);
expect(parsed.items[0].title).toBe('Filter Title1');
});
it(`filterout combination`, async () => {
it('filterout combination', async () => {
const response = await app.request('/test/filter?filterout_title=Filter&filterout_description=Description1');
const parsed = await parser.parseString(await response.text());
expect(parsed.items.length).toBe(4);
@ -266,7 +266,7 @@ describe('filter', () => {
});
describe('limit', () => {
it(`limit`, async () => {
it('limit', async () => {
const response = await app.request('/test/1?limit=3');
const parsed = await parser.parseString(await response.text());
expect(parsed.items.length).toBe(3);
@ -289,16 +289,16 @@ describe('sorted', () => {
});
describe('tgiv', () => {
it(`tgiv`, async () => {
it('tgiv', async () => {
const response = await app.request('/test/1?tgiv=test');
const parsed = await parser.parseString(await response.text());
expect(parsed.items[0].link).toBe(`https://t.me/iv?url=https%3A%2F%2Fgithub.com%2FDIYgod%2FRSSHub%2Fissues%2F1&rhash=test`);
expect(parsed.items[1].link).toBe(`https://t.me/iv?url=https%3A%2F%2Fgithub.com%2FDIYgod%2FRSSHub%2Fissues%2F2&rhash=test`);
expect(parsed.items[0].link).toBe('https://t.me/iv?url=https%3A%2F%2Fgithub.com%2FDIYgod%2FRSSHub%2Fissues%2F1&rhash=test');
expect(parsed.items[1].link).toBe('https://t.me/iv?url=https%3A%2F%2Fgithub.com%2FDIYgod%2FRSSHub%2Fissues%2F2&rhash=test');
});
});
describe('empty', () => {
it(`empty`, async () => {
it('empty', async () => {
const response1 = await app.request('/test/empty');
expect(response1.status).toBe(503);
expect(await response1.text()).toMatch(/Error: this route is empty/);
@ -311,7 +311,7 @@ describe('empty', () => {
});
describe('allow_empty', () => {
it(`allow_empty`, async () => {
it('allow_empty', async () => {
const response = await app.request('/test/allow_empty');
expect(response.status).toBe(200);
const parsed = await parser.parseString(await response.text());
@ -320,7 +320,7 @@ describe('allow_empty', () => {
});
describe('wrong_path', () => {
it(`wrong_path`, async () => {
it('wrong_path', async () => {
const response = await app.request('/wrong');
expect(response.status).toBe(404);
expect(response.headers.get('cache-control')).toBe(`public, max-age=${config.cache.routeExpire}`);
@ -329,7 +329,7 @@ describe('wrong_path', () => {
});
describe('fulltext_mode', () => {
it(`fulltext`, async () => {
it('fulltext', async () => {
const response = await app.request('/test/1?mode=fulltext');
expect(response.status).toBe(200);
const parsed = await parser.parseString(await response.text());
@ -338,7 +338,7 @@ describe('fulltext_mode', () => {
});
describe('complicated_description', () => {
it(`complicated_description`, async () => {
it('complicated_description', async () => {
const response = await app.request('/test/complicated');
expect(response.status).toBe(200);
const parsed = await parser.parseString(await response.text());
@ -359,7 +359,7 @@ describe('complicated_description', () => {
});
describe('multimedia_description', () => {
it(`multimedia_description`, async () => {
it('multimedia_description', async () => {
const response = await app.request('/test/multimedia');
expect(response.status).toBe(200);
const parsed = await parser.parseString(await response.text());
@ -375,7 +375,7 @@ describe('multimedia_description', () => {
});
describe('sort', () => {
it(`sort`, async () => {
it('sort', async () => {
const response = await app.request('/test/sort');
expect(response.status).toBe(200);
const parsed = await parser.parseString(await response.text());
@ -387,7 +387,7 @@ describe('sort', () => {
});
describe('mess parameter', () => {
it(`date`, async () => {
it('date', async () => {
const response = await app.request('/test/mess');
expect(response.status).toBe(200);
const parsed = await parser.parseString(await response.text());
@ -397,7 +397,7 @@ describe('mess parameter', () => {
});
describe('opencc', () => {
it(`opencc`, async () => {
it('opencc', async () => {
const response = await app.request('/test/opencc?opencc=t2s');
const parsed = await parser.parseString(await response.text());
expect(parsed.items[0].title).toBe('小可爱');
@ -406,7 +406,7 @@ describe('opencc', () => {
});
describe('brief', () => {
it(`brief`, async () => {
it('brief', async () => {
const response = await app.request('/test/brief?brief=100');
const parsed = await parser.parseString(await response.text());
expect(parsed.items[0].title).toBe('小可愛');
@ -417,7 +417,7 @@ describe('brief', () => {
});
describe('multi parameter', () => {
it(`filter before limit`, async () => {
it('filter before limit', async () => {
const response = await app.request('/test/filter-limit?filterout_title=2&limit=2');
const parsed = await parser.parseString(await response.text());
expect(parsed.items.length).toBe(2);

View File

@ -414,7 +414,7 @@ const middleware: MiddlewareHandler = async (ctx, next) => {
}
}
} else {
throw new Error(`Invalid parameter brief. Please check the doc https://docs.rsshub.app/guide/parameters#shu-chu-jian-xun`);
throw new Error('Invalid parameter brief. Please check the doc https://docs.rsshub.app/guide/parameters#shu-chu-jian-xun');
}
}
// some parameters are processed in `anti-hotlink.js`

View File

@ -5,7 +5,7 @@ import { config } from '@/config';
describe('registry', () => {
// root
it(`/`, async () => {
it('/', async () => {
const response = await app.request('/');
expect(response.status).toBe(200);
expect(response.headers.get('content-type')).toBe('text/html; charset=UTF-8');

View File

@ -24,7 +24,7 @@ export const route: Route = {
async function handler(ctx) {
const id = ctx.req.param('id');
const { data } = await got(`https://music.163.com/api/v1/artist/songs`, {
const { data } = await got('https://music.163.com/api/v1/artist/songs', {
headers: {
Referer: 'https://music.163.com/',
},

View File

@ -52,49 +52,49 @@ async function handler(ctx) {
let type;
switch (selectedType) {
case 1:
type = `BD21K0DLwangning`; // 轻松一刻
type = 'BD21K0DLwangning'; // 轻松一刻
break;
case 2:
type = `CICMICLUwangning`; // 槽值
type = 'CICMICLUwangning'; // 槽值
break;
case 3:
type = `CICMOMBLwangning`; // 人间
type = 'CICMOMBLwangning'; // 人间
break;
case 4:
type = `CICMPVC5wangning`; // 大国小民
type = 'CICMPVC5wangning'; // 大国小民
break;
case 5:
type = `CICMLCOUwangning`; // 三三有梗
type = 'CICMLCOUwangning'; // 三三有梗
break;
case 6:
type = `D551V75Cwangning`; // 数读
type = 'D551V75Cwangning'; // 数读
break;
case 7:
type = `D55253RHwangning`; // 看客
type = 'D55253RHwangning'; // 看客
break;
case 8:
type = `D553A53Lwangning`; // 下划线
type = 'D553A53Lwangning'; // 下划线
break;
case 9:
type = `D553PGHQwangning`; // 谈心社
type = 'D553PGHQwangning'; // 谈心社
break;
case 10:
type = `CICMS5BIwangning`; // 哒哒
type = 'CICMS5BIwangning'; // 哒哒
break;
case 11:
type = `CQ9UDVKOwangning`; // 胖编怪聊
type = 'CQ9UDVKOwangning'; // 胖编怪聊
break;
case 12:
type = `CQ9UJIJNwangning`; // 曲一刀
type = 'CQ9UJIJNwangning'; // 曲一刀
break;
case 13:
type = `BD284UM8wangning`; // 今日之声
type = 'BD284UM8wangning'; // 今日之声
break;
case 14:
type = `CICMMGBHwangning`; // 浪潮
type = 'CICMMGBHwangning'; // 浪潮
break;
case 15:
type = `D5543R68wangning`; // 沸点
type = 'D5543R68wangning'; // 沸点
break;
default:
break;

View File

@ -41,7 +41,7 @@ async function handler(ctx: Context): Promise<Data> {
const response = await got(currentUrl);
const $ = load(response.data as any);
let selector = `.news`;
let selector = '.news';
if (tab !== 'all') {
selector = `#${tab} > ${selector}`;
}

View File

@ -82,7 +82,7 @@ async function handler(ctx: Context): Promise<Data> {
const response = await got(currentUrl);
const $ = load(response.data as any);
const selector = `form .newItem`;
const selector = 'form .newItem';
const items: DataItem[] = $(selector)
.toArray()
.map((item) => {

View File

@ -32,7 +32,7 @@ async function handler(ctx) {
const tag = ctx.req.param('tag');
const limit = ctx.req.query('limit') ? Number.parseInt(ctx.req.query('limit')) : 25;
const { data: response } = await got(`https://www.4gamers.com.tw/site/api/news/by-tag`, {
const { data: response } = await got('https://www.4gamers.com.tw/site/api/news/by-tag', {
searchParams: {
tag,
pageSize: limit,

View File

@ -49,7 +49,7 @@ function getPeriodConfig(period) {
}
return {
url: `${SUB_URL}most-view/`,
range: `all`,
range: 'all',
title: `${SUB_NAME_PREFIX} - Most views`,
};
}

View File

@ -64,7 +64,7 @@ async function handler() {
)
);
return {
title: `中国经济50人论坛专家文章`,
title: '中国经济50人论坛专家文章',
link: 'https://www.50forum.org.cn/portal/list/index.html?id=6',
description: '中国经济50人论坛专家文章',
item: out,

View File

@ -7,7 +7,7 @@ export const SUB_NAME_PREFIX = '8KCosplay';
export const SUB_URL = 'https://www.8kcosplay.com';
export const getPosts = async (limit: number, options?: { categories?: number; tags?: number }) => {
const data = await ofetch(`https://www.8kcosplay.com/wp-json/wp/v2/posts`, {
const data = await ofetch('https://www.8kcosplay.com/wp-json/wp/v2/posts', {
query: {
per_page: limit,
_embed: '',
@ -26,7 +26,7 @@ export const getPosts = async (limit: number, options?: { categories?: number; t
export const getCategoryInfo = (category: string) =>
cache.tryGet(`8kcosplay:category:${category}`, async () => {
const data = await ofetch(`https://www.8kcosplay.com/wp-json/wp/v2/categories`, {
const data = await ofetch('https://www.8kcosplay.com/wp-json/wp/v2/categories', {
query: {
slug: category,
},
@ -45,7 +45,7 @@ export const getCategoryInfo = (category: string) =>
export const getTagInfo = (tag: string) =>
cache.tryGet(`8kcosplay:tag:${tag}`, async () => {
const data = await ofetch(`https://www.8kcosplay.com/wp-json/wp/v2/tags`, {
const data = await ofetch('https://www.8kcosplay.com/wp-json/wp/v2/tags', {
query: {
slug: tag,
},

View File

@ -32,7 +32,7 @@ async function handler() {
const response = await got(`${host}/wp-json/wp/v2/posts?per_page=30`);
const list = response.data;
return {
title: `ACG17 - 全部文章`,
title: 'ACG17 - 全部文章',
link: `${host}/blog`,
description: 'ACG17 - 全部文章',
item: list.map((item) => ({

View File

@ -49,7 +49,7 @@ async function handler(ctx) {
return await buildData({
link,
url: link,
title: `%title%`,
title: '%title%',
params: {
title: 'AIEA Seminars',
},

View File

@ -30,7 +30,7 @@ export const route: Route = {
async function handler(ctx) {
const { type, name = 'newest' } = ctx.req.param();
const u = name === 'newest' ? `https://aijishu.com/` : `https://aijishu.com/${type}/${name}`;
const u = name === 'newest' ? 'https://aijishu.com/' : `https://aijishu.com/${type}/${name}`;
const html = await got(u);
const $ = load(html.data);

View File

@ -11,7 +11,7 @@ import { puppeteerGet, renderDesc } from './utils';
const handler = async (ctx) => {
const pub = ctx.req.param('pub');
const jrn = ctx.req.param('jrn');
const host = `https://pubs.aip.org`;
const host = 'https://pubs.aip.org';
const jrnlUrl = `${host}/${pub}/${jrn}/issue`;
if (!isValidHost(pub)) {
throw new InvalidParameterError('Invalid pub');

View File

@ -36,7 +36,7 @@ export const route: Route = {
async function handler(ctx) {
const pub = ctx.req.param('pub');
const jrn = ctx.req.param('jrn');
const host = `https://pubs.aip.org`;
const host = 'https://pubs.aip.org';
const jrnlUrl = `${host}/${pub}/${jrn}/issue`;
const { data: response } = await got.get(jrnlUrl);

View File

@ -36,8 +36,8 @@ async function handler() {
const data = await buildData({
link,
url: link,
title: `%title%`,
description: `%description%`,
title: '%title%',
description: '%description%',
params: {
title: '国航服务公告',
description: '中国国际航空公司服务公告',

View File

@ -14,7 +14,7 @@ export const route: Route = {
path: '/pkgs/:name/:routeParams?',
parameters: { name: 'Packages name', routeParams: 'Filters of packages type. E.g. branch=edge&repo=main&arch=armv7&maintainer=Jakub%20Jirutka' },
example: '/alpinelinux/pkgs/nodejs',
description: `Alpine Linux packages update`,
description: 'Alpine Linux packages update',
handler,
radar: [
{

View File

@ -27,7 +27,7 @@ export const route: Route = {
name: 'Platform Software',
maintainers: ['JimenezLi'],
handler,
description: `> routeParms can be copied from original site URL, example: \`/alternativeto/platform/firefox/license=free\``,
description: '> routeParms can be copied from original site URL, example: `/alternativeto/platform/firefox/license=free`',
};
async function handler(ctx) {

View File

@ -27,7 +27,7 @@ export const route: Route = {
name: 'Software Alternatives',
maintainers: ['JimenezLi'],
handler,
description: `> routeParms can be copied from original site URL, example: \`/alternativeto/software/cpp/license=opensource&platform=windows\``,
description: '> routeParms can be copied from original site URL, example: `/alternativeto/software/cpp/license=opensource&platform=windows`',
};
async function handler(ctx) {

View File

@ -37,7 +37,7 @@ async function handler(ctx) {
const id = ctx.req.param('id');
const rootUrl = 'https://www.annualreviews.org';
const apiRootUrl = `https://api.crossref.org`;
const apiRootUrl = 'https://api.crossref.org';
const feedUrl = `${rootUrl}/r/${id}_rss`;
const currentUrl = `${rootUrl}/toc/${id}/current`;

View File

@ -61,7 +61,7 @@ async function handler(ctx) {
.find(String.raw`news\:publication_date`)
.text()
);
const lastmod = timezone(parseDate($(e).find(`lastmod`).text()), -4);
const lastmod = timezone(parseDate($(e).find('lastmod').text()), -4);
const language = LANGUAGE_MAP.get(
$(e)
.find(String.raw`news\:language`)

View File

@ -37,7 +37,7 @@ async function handler(ctx) {
const { id, region } = ctx.req.param();
const numericId = id.match(/id(\d+)/)?.[1];
const baseUrl = 'https://podcasts.apple.com';
const link = `${baseUrl}/${region || `cn`}/podcast/${id}`;
const link = `${baseUrl}/${region || 'cn'}/podcast/${id}`;
const response = await ofetch(link);

View File

@ -34,7 +34,7 @@ async function handler(ctx) {
const params = { kw: encodeURIComponent(kw) };
ctx.req.path.includes('good') && (params.tab = 'good');
cid && (params.cid = cid);
const { data } = await got(`https://tieba.baidu.com/f`, {
const { data } = await got('https://tieba.baidu.com/f', {
headers: {
Referer: 'https://tieba.baidu.com/',
},

View File

@ -21,7 +21,7 @@ export const route: Route = {
name: '用户帖子',
maintainers: ['igxlin', 'nczitzk'],
handler,
description: `用户 ID 可以通过打开用户的主页后查看地址栏的 \`un\` 字段来获取。`,
description: '用户 ID 可以通过打开用户的主页后查看地址栏的 `un` 字段来获取。',
};
async function handler(ctx) {

View File

@ -59,7 +59,7 @@ async function handler(ctx) {
const title =
$('title')
.text()
.replace(/-爱上本地宝,生活会更好/, '') + `焦点资讯`;
.replace(/-爱上本地宝,生活会更好/, '') + '焦点资讯';
let items = $('ul.focus-news li')
.toArray()

View File

@ -100,8 +100,8 @@ async function handler(ctx) {
}));
return {
title: `Bestblogs.dev`,
link: `https://www.bestblogs.dev/feeds`,
title: 'Bestblogs.dev',
link: 'https://www.bestblogs.dev/feeds',
item: items,
};
}

View File

@ -196,7 +196,7 @@ const getUserInfoFromLiveID = (liveID) => {
const getVideoNameFromId = (aid, bvid) => {
const key = `bili-videoname-from-id-${bvid || aid}`;
return cache.tryGet(key, async () => {
const { data } = await got(`https://api.bilibili.com/x/web-interface/view`, {
const { data } = await got('https://api.bilibili.com/x/web-interface/view', {
searchParams: {
aid: aid || undefined,
bvid: bvid || undefined,

View File

@ -19,17 +19,17 @@ async function handler() {
};
}
const response = await ofetch(`https://api.bilibili.com/x/web-interface/nav`, {
const response = await ofetch('https://api.bilibili.com/x/web-interface/nav', {
headers: {
Referer: `https://space.bilibili.com/1/`,
Referer: 'https://space.bilibili.com/1/',
Cookie: cookie as string,
},
});
const isResponseValid = response.code === 0 && !!response.data.mid;
const subtitleResponse = await ofetch(`https://api.bilibili.com/x/player/wbi/v2?bvid=BV1iU411o7R2&cid=1550543560`, {
const subtitleResponse = await ofetch('https://api.bilibili.com/x/player/wbi/v2?bvid=BV1iU411o7R2&cid=1550543560', {
headers: {
Referer: `https://www.bilibili.com/video/BV1iU411o7R2`,
Referer: 'https://www.bilibili.com/video/BV1iU411o7R2',
Cookie: cookie,
},
});

View File

@ -75,7 +75,7 @@ async function handler(ctx) {
return {
title: `${name} 关注专栏动态`,
link: `https://t.bilibili.com/?tab=64`,
link: 'https://t.bilibili.com/?tab=64',
item: out,
};
}

View File

@ -212,7 +212,7 @@ async function handler(ctx) {
return {
title: `${name} 关注的动态`,
link: `https://t.bilibili.com`,
link: 'https://t.bilibili.com',
description: `${name} 关注的动态`,
item: items,
};

View File

@ -79,7 +79,7 @@ async function handler(ctx) {
return {
title: `${name} 关注视频动态`,
link: `https://t.bilibili.com/?tab=8`,
link: 'https://t.bilibili.com/?tab=8',
item: out,
};
}

View File

@ -39,7 +39,7 @@ async function handler() {
method: 'get',
url,
headers: {
Referer: `https://api.bilibili.com`,
Referer: 'https://api.bilibili.com',
},
});
const trending = response?.data?.data?.trending;

View File

@ -47,7 +47,7 @@ async function handler(ctx) {
const link = 'https://manga.bilibili.com/account-center';
const response = await got({
method: 'POST',
url: `https://manga.bilibili.com/twirp/bookshelf.v1.Bookshelf/ListFavorite?device=pc&platform=web`,
url: 'https://manga.bilibili.com/twirp/bookshelf.v1.Bookshelf/ListFavorite?device=pc&platform=web',
json: { page_num: 1, page_size, order: 2, wait_free: 0 },
headers: {
Referer: link,

View File

@ -27,7 +27,7 @@ async function handler(ctx) {
const embed = !ctx.req.param('embed');
const response = await got({
method: 'get',
url: `https://api.bilibili.com/x/web-interface/popular`,
url: 'https://api.bilibili.com/x/web-interface/popular',
headers: {
Referer: 'https://www.bilibili.com/',
},
@ -35,9 +35,9 @@ async function handler(ctx) {
const list = response.data.data.list;
return {
title: `bilibili 综合热门`,
title: 'bilibili 综合热门',
link: 'https://www.bilibili.com',
description: `bilibili 综合热门`,
description: 'bilibili 综合热门',
item:
list &&
list.map((item) => ({

View File

@ -56,7 +56,7 @@ async function handler(ctx) {
title: `[${item.new_ep.index_show}]${item.title}`,
description: `${item.evaluate}<br><img src="${item.cover}">`,
pubDate: new Date(item.new_ep.pub_time ?? Date.now()).toUTCString(),
link: `https://www.bilibili.com/bangumi/play/` + (item.new_ep.id ? `ep${item.new_ep.id}` : `ss${item.season_id}`),
link: 'https://www.bilibili.com/bangumi/play/' + (item.new_ep.id ? `ep${item.new_ep.id}` : `ss${item.season_id}`),
})),
};
}

View File

@ -53,7 +53,7 @@ async function handler(ctx: Context) {
const response = await got(`https://api.bilibili.com/x/space/wbi/arc/search?${params}`, {
headers: {
Referer: `https://space.bilibili.com/${uid}`,
origin: `https://space.bilibili.com`,
origin: 'https://space.bilibili.com',
Cookie: cookie,
},
});

View File

@ -49,7 +49,7 @@ async function handler(ctx) {
const response = await got({
method: 'get',
url: `https://api.bilibili.com/x/v2/history/toview`,
url: 'https://api.bilibili.com/x/v2/history/toview',
headers: {
Referer: `https://space.bilibili.com/${uid}/`,
Cookie: cookie,

View File

@ -466,8 +466,8 @@ const nodeRenderers = {
}
return nextNode(node.content);
},
br: () => `<br/>`,
hr: () => `<br/>`,
br: () => '<br/>',
hr: () => '<br/>',
ad: () => {},
blockquote: async (node, nextNode) => `<blockquote>${await nextNode(node.content)}</blockquote>`,
quote: async (node, nextNode) => `<blockquote>${await nextNode(node.content)}</blockquote>`,

View File

@ -26,7 +26,7 @@ export const route: Route = {
name: '党委学生工作部',
maintainers: ['Fatpandac'],
handler,
description: `\`https://dwxgb.bnu.edu.cn/xwzx/tzgg/index.html\` 则对应为 \`/bnu/dwxgb/xwzx/tzgg`,
description: '`https://dwxgb.bnu.edu.cn/xwzx/tzgg/index.html` 则对应为 `/bnu/dwxgb/xwzx/tzgg',
};
async function handler(ctx) {

View File

@ -18,7 +18,7 @@ export const route: Route = {
name: '教育学部-培养动态',
maintainers: ['etShaw-zh'],
handler,
description: `\`https://fe.bnu.edu.cn/pc/cms1info/list/1/18\` 则对应为 \`/bnu/fe/18`,
description: '`https://fe.bnu.edu.cn/pc/cms1info/list/1/18` 则对应为 `/bnu/fe/18',
};
async function handler(ctx) {

View File

@ -12,7 +12,7 @@ export const handler = async (ctx) => {
const limit = ctx.req.query('limit') ? Number.parseInt(ctx.req.query('limit'), 10) : 15;
const rootUrl = 'https://www.c114.com.cn';
const currentUrl = new URL(`news/roll.asp${original === 'true' ? `?o=true` : ''}`, rootUrl).href;
const currentUrl = new URL(`news/roll.asp${original === 'true' ? '?o=true' : ''}`, rootUrl).href;
const { data: response } = await got(currentUrl, {
responseType: 'buffer',

View File

@ -25,7 +25,7 @@ export const route: Route = {
name: '用户博客',
maintainers: [],
handler,
description: `通过提取文章全文,以提供比官方源更佳的阅读体验.`,
description: '通过提取文章全文,以提供比官方源更佳的阅读体验.',
};
async function handler(ctx) {
@ -94,7 +94,7 @@ async function handler(ctx) {
const items = await Promise.all(posts.map((item) => cache.tryGet(item.link, () => parseBlogArticle(item))));
return {
title: `财新博客 - 全部`,
title: '财新博客 - 全部',
link: 'https://blog.caixin.com',
// description: introduce,
// image: avatar,

View File

@ -29,7 +29,7 @@ export const route: Route = {
maintainers: ['tpnonthealps'],
handler,
url: 'caixin.com/',
description: `说明:此 RSS feed 会自动抓取财新网的最新文章,但不包含 FM 及视频内容。订阅用户可根据文档设置环境变量后在url传入\`fulltext=\`以解锁全文。`,
description: '说明:此 RSS feed 会自动抓取财新网的最新文章,但不包含 FM 及视频内容。订阅用户可根据文档设置环境变量后在url传入`fulltext=`以解锁全文。',
};
async function handler(ctx) {

View File

@ -3,6 +3,7 @@ import type { Namespace } from '@/types';
export const namespace: Namespace = {
name: '财新博客',
url: 'caixin.com',
description: `> 网站部分内容需要付费订阅RSS 仅做更新提醒,不含付费内容。若需要得到付费内容全文,请使用订阅账户在手机网页版登录,然后设置\`CAIXIN_COOKIE\`为至少包含cookie中的以下字段: \`SA_USER_UID\`, \`SA_USER_UNIT\`, \`SA_USER_DEVICE_TYPE\`, \`USER_LOGIN_CODE\``,
description:
'> 网站部分内容需要付费订阅RSS 仅做更新提醒,不含付费内容。若需要得到付费内容全文,请使用订阅账户在手机网页版登录,然后设置`CAIXIN_COOKIE`为至少包含cookie中的以下字段: `SA_USER_UID`, `SA_USER_UNIT`, `SA_USER_DEVICE_TYPE`, `USER_LOGIN_CODE`',
lang: 'zh-CN',
};

View File

@ -34,7 +34,7 @@ export async function getFulltext(url: string) {
const sigValueHex = hextob64(sig.sign());
const isWeekly = url.includes('weekly');
const res = await ofetch(`https://gateway.caixin.com/api/newauth/checkAuthByIdJsonp`, {
const res = await ofetch('https://gateway.caixin.com/api/newauth/checkAuthByIdJsonp', {
query: {
type: 1,
page: isWeekly ? 0 : 1,

View File

@ -3,5 +3,5 @@ import type { Namespace } from '@/types';
export const namespace: Namespace = {
name: 'Castbox',
url: 'castbox.fm',
description: `Castbox is a podcast distribution network and producer.`,
description: 'Castbox is a podcast distribution network and producer.',
};

View File

@ -26,7 +26,7 @@ export const route: Route = {
maintainers: ['shengmaosu'],
handler,
url: 'ciee.cau.edu.cn/col/col26712/index.html',
description: `#### 信电学院 {#zhong-guo-nong-ye-da-xue-yan-zhao-wang-tong-zhi-gong-gao-xin-dian-xue-yuan}`,
description: '#### 信电学院 {#zhong-guo-nong-ye-da-xue-yan-zhao-wang-tong-zhi-gong-gao-xin-dian-xue-yuan}',
};
async function handler() {

View File

@ -4,69 +4,69 @@ import got from '@/utils/got';
const categories = {
jgdt: {
baseUrl: `http://www.cbirc.gov.cn`,
baseUrl: 'http://www.cbirc.gov.cn',
description: '监管动态',
link: `http://www.cbirc.gov.cn/cn/static/data/DocInfo/SelectDocByItemIdAndChild/data_itemId=915,pageIndex=1,pageSize=18.json`,
link: 'http://www.cbirc.gov.cn/cn/static/data/DocInfo/SelectDocByItemIdAndChild/data_itemId=915,pageIndex=1,pageSize=18.json',
title: '监管动态',
},
ggtz: {
baseUrl: `http://www.cbirc.gov.cn`,
baseUrl: 'http://www.cbirc.gov.cn',
description: '公告通知',
link: `http://www.cbirc.gov.cn/cn/static/data/DocInfo/SelectDocByItemIdAndChild/data_itemId=925,pageIndex=1,pageSize=18.json`,
link: 'http://www.cbirc.gov.cn/cn/static/data/DocInfo/SelectDocByItemIdAndChild/data_itemId=925,pageIndex=1,pageSize=18.json',
title: '公告通知',
},
zcfg: {
baseUrl: `http://www.cbirc.gov.cn`,
baseUrl: 'http://www.cbirc.gov.cn',
description: '政策法规',
link: `http://www.cbirc.gov.cn/cn/static/data/DocInfo/SelectDocByItemIdAndChild/data_itemId=926,pageIndex=1,pageSize=18.json`,
link: 'http://www.cbirc.gov.cn/cn/static/data/DocInfo/SelectDocByItemIdAndChild/data_itemId=926,pageIndex=1,pageSize=18.json',
title: '政策法规',
},
zcjd: {
baseUrl: `http://www.cbirc.gov.cn`,
baseUrl: 'http://www.cbirc.gov.cn',
description: '政策解读',
link: `http://www.cbirc.gov.cn/cn/static/data/DocInfo/SelectDocByItemIdAndChild/data_itemId=916,pageIndex=1,pageSize=18.json`,
link: 'http://www.cbirc.gov.cn/cn/static/data/DocInfo/SelectDocByItemIdAndChild/data_itemId=916,pageIndex=1,pageSize=18.json',
title: '政策解读',
},
zqyj: {
baseUrl: `http://www.cbirc.gov.cn`,
baseUrl: 'http://www.cbirc.gov.cn',
description: '征求意见',
link: `http://www.cbirc.gov.cn/cn/static/data/DocInfo/SelectDocByItemIdAndChild/data_itemId=951,pageIndex=1,pageSize=18.json`,
link: 'http://www.cbirc.gov.cn/cn/static/data/DocInfo/SelectDocByItemIdAndChild/data_itemId=951,pageIndex=1,pageSize=18.json',
title: '征求意见',
},
xzxk: {
baseUrl: `http://www.cbirc.gov.cn`,
baseUrl: 'http://www.cbirc.gov.cn',
description: '行政许可',
link: `http://www.cbirc.gov.cn/cn/static/data/DocInfo/SelectDocByItemIdAndChild/data_itemId=930,pageIndex=1,pageSize=18.json`,
link: 'http://www.cbirc.gov.cn/cn/static/data/DocInfo/SelectDocByItemIdAndChild/data_itemId=930,pageIndex=1,pageSize=18.json',
title: '行政许可',
},
xzcf: {
baseUrl: `http://www.cbirc.gov.cn`,
baseUrl: 'http://www.cbirc.gov.cn',
description: '行政处罚',
link: `http://www.cbirc.gov.cn/cn/static/data/DocInfo/SelectDocByItemIdAndChild/data_itemId=931,pageIndex=1,pageSize=18.json`,
link: 'http://www.cbirc.gov.cn/cn/static/data/DocInfo/SelectDocByItemIdAndChild/data_itemId=931,pageIndex=1,pageSize=18.json',
title: '行政处罚',
},
xzjgcs: {
baseUrl: `http://www.cbirc.gov.cn`,
baseUrl: 'http://www.cbirc.gov.cn',
description: '行政监管措施',
link: `http://www.cbirc.gov.cn/cn/static/data/DocInfo/SelectDocByItemIdAndChild/data_itemId=932,pageIndex=1,pageSize=18.json`,
link: 'http://www.cbirc.gov.cn/cn/static/data/DocInfo/SelectDocByItemIdAndChild/data_itemId=932,pageIndex=1,pageSize=18.json',
title: '行政监管措施',
},
gzlw: {
baseUrl: `http://www.cbirc.gov.cn`,
baseUrl: 'http://www.cbirc.gov.cn',
description: '工作论文',
link: `http://www.cbirc.gov.cn/cn/static/data/DocInfo/SelectDocByItemIdAndChild/data_itemId=934,pageIndex=1,pageSize=18.json`,
link: 'http://www.cbirc.gov.cn/cn/static/data/DocInfo/SelectDocByItemIdAndChild/data_itemId=934,pageIndex=1,pageSize=18.json',
title: '工作论文',
},
jrzgyj: {
baseUrl: `http://www.cbirc.gov.cn`,
baseUrl: 'http://www.cbirc.gov.cn',
description: '金融监管研究',
link: `http://www.cbirc.gov.cn/cn/static/data/DocInfo/SelectDocByItemIdAndChild/data_itemId=935,pageIndex=1,pageSize=18.json`,
link: 'http://www.cbirc.gov.cn/cn/static/data/DocInfo/SelectDocByItemIdAndChild/data_itemId=935,pageIndex=1,pageSize=18.json',
title: '金融监管研究',
},
tjxx: {
baseUrl: `http://www.cbirc.gov.cn`,
baseUrl: 'http://www.cbirc.gov.cn',
description: '统计信息',
link: `http://www.cbirc.gov.cn/cn/static/data/DocInfo/SelectDocByItemIdAndChild/data_itemId=954,pageIndex=1,pageSize=18.json`,
link: 'http://www.cbirc.gov.cn/cn/static/data/DocInfo/SelectDocByItemIdAndChild/data_itemId=954,pageIndex=1,pageSize=18.json',
title: '统计信息',
},
};
@ -101,7 +101,7 @@ async function handler(ctx) {
method: 'get',
url: cat.link,
headers: {
Referer: `http://www.cbirc.gov.cn`,
Referer: 'http://www.cbirc.gov.cn',
},
});
return resp.data;

View File

@ -44,7 +44,7 @@ export const route: Route = {
maintainers: ['zengxs'],
handler,
url: 'tv.cctv.com/lm/xwlb',
description: `新闻联播内容摘要。`,
description: '新闻联播内容摘要。',
};
async function handler(ctx) {

View File

@ -28,7 +28,7 @@ export const route: Route = {
};
async function handler() {
const rootUrl = `https://chaping.cn/`;
const rootUrl = 'https://chaping.cn/';
const response = await got({
method: 'get',
url: rootUrl,

View File

@ -67,7 +67,7 @@ async function handler() {
);
return {
title: `中国研究生招生信息网 - 热点`,
title: '中国研究生招生信息网 - 热点',
link: host,
description: '中国研究生招生信息网 - 热点',
item: items,

View File

@ -65,7 +65,7 @@ async function handler() {
);
return {
title: `中国研究生招生信息网 - 考研动态`,
title: '中国研究生招生信息网 - 考研动态',
link: `${host}/kyzx/kydt/`,
description: '中国研究生招生信息网 - 考研动态',
item: items,

View File

@ -71,7 +71,7 @@ async function handler() {
link: `${hostURL}/${item.fullPath}`,
author: String(item.fullPath.split('/', 1)),
enclosure_url: item.max_res_url,
enclosure_type: `image/png`,
enclosure_type: 'image/png',
category: item.topics,
})),
};

View File

@ -70,7 +70,7 @@ async function handler(ctx) {
return {
title: `Civitai model ${params.modelId} discussions`,
link: `https://civitai.com/`,
link: 'https://civitai.com/',
item: items,
};
}

View File

@ -28,7 +28,7 @@ export const route: Route = {
};
async function handler() {
const { data } = await got(`https://civitai.com/api/v1/models`, {
const { data } = await got('https://civitai.com/api/v1/models', {
searchParams: {
limit: 20,
sort: 'Newest',
@ -45,8 +45,8 @@ async function handler() {
}));
return {
title: `Civitai latest models`,
link: `https://civitai.com/`,
title: 'Civitai latest models',
link: 'https://civitai.com/',
item: items,
};
}

View File

@ -28,7 +28,7 @@ export const route: Route = {
maintainers: ['hujingnb'],
handler,
url: 'www.cnblogs.com/pick',
description: `在博客园主页的分类出可查看所有类型。例如go 的分类地址为: \`https://www.cnblogs.com/cate/go/\`, 则: [\`/cnblogs/cate/go\`](https://rsshub.app/cnblogs/cate/go)`,
description: '在博客园主页的分类出可查看所有类型。例如go 的分类地址为: `https://www.cnblogs.com/cate/go/`, 则: [`/cnblogs/cate/go`](https://rsshub.app/cnblogs/cate/go)',
};
async function handler(ctx) {

View File

@ -47,7 +47,7 @@ async function handler() {
);
return {
title: `CNCF - Reports`,
title: 'CNCF - Reports',
link: url,
item: items,
};

View File

@ -23,7 +23,7 @@ export const route: Route = {
name: '学习时报',
maintainers: ['nczitzk'],
handler,
description: `如订阅 **第 A1 版:国内大局**,路由为 [\`/cntheory/paper/国内大局\`](https://rsshub.app/cntheory/paper/国内大局)。`,
description: '如订阅 **第 A1 版:国内大局**,路由为 [`/cntheory/paper/国内大局`](https://rsshub.app/cntheory/paper/国内大局)。',
};
async function handler(ctx) {

View File

@ -30,7 +30,7 @@ export const route: Route = {
const { id } = ctx.req.param();
const baseUrl = 'https://comic-fuz.com';
const openUrl = `${baseUrl}/magazine/${id}`;
const imgUrl = `https://img.comic-fuz.com`;
const imgUrl = 'https://img.comic-fuz.com';
const response = await ofetch(openUrl, {
headers: {

View File

@ -30,7 +30,7 @@ export const route: Route = {
const { id } = ctx.req.param();
const baseUrl = 'https://comic-fuz.com';
const openUrl = `${baseUrl}/manga/${id}`;
const imgUrl = `https://img.comic-fuz.com`;
const imgUrl = 'https://img.comic-fuz.com';
const response = await ofetch(openUrl, {
headers: {

View File

@ -58,11 +58,11 @@ const getLinkAndTitle = (type, period) => {
statDays: '30days',
},
};
link = `#/feed/coolPictureList?statDays=` + trans[period].statDays + `&listType=statFavNum&buildCard=1&title=` + trans[period].description + `&page=1`;
link = '#/feed/coolPictureList?statDays=' + trans[period].statDays + '&listType=statFavNum&buildCard=1&title=' + trans[period].description + '&page=1';
res.title = '酷图榜-' + trans[period].description;
} else {
link = `#/feed/statList?statType=` + periods[period].statType + `&sortField=` + types[type].sortField + `&title=` + periods[period].description + `&page=1`;
res.title = types[type].title + `-` + periods[period].description;
link = '#/feed/statList?statType=' + periods[period].statType + '&sortField=' + types[type].sortField + '&title=' + periods[period].description + '&page=1';
res.title = types[type].title + '-' + periods[period].description;
}
res.link = baseURL + encodeURIComponent(link);
return res;
@ -129,7 +129,7 @@ async function handler(ctx) {
return {
title,
link: 'https://www.coolapk.com/',
description: `热榜-` + title,
description: '热榜-' + title,
item: out,
};
}

View File

@ -44,7 +44,7 @@ async function handler(ctx) {
}
return {
title: `酷安话题-${tag}`,
link: `https://www.coolapk.com/`,
link: 'https://www.coolapk.com/',
description: `酷安话题-${tag}`,
item: out,
};

View File

@ -88,13 +88,13 @@ const parseDynamic = async (item) => {
const result = await ofetch(itemUrl, {
headers: getHeaders(),
});
const message = `<p>` + result.data?.message.split('\n').join('<br>') + `</p>`;
const message = '<p>' + result.data?.message.split('\n').join('<br>') + '</p>';
const picArr = item.picArr.filter(Boolean).map((i) => `<img src="${i}">`); // 若无图片item.picArr=[""]
return message + picArr.join('');
});
} else {
const picArr = item.picArr.filter(Boolean).map((i) => `<img src="${i}">`);
description = `<p>` + item.message + `</p>` + picArr.join('');
description = '<p>' + item.message + '</p>' + picArr.join('');
}
const $ = load('<div class="title-filter">' + description + '</div>');
title = $('.title-filter').text().trim(); // no need to perform substring because it's will be handled by RSSHub 'TITLE_LENGTH_LIMIT'
@ -103,7 +103,7 @@ const parseDynamic = async (item) => {
if (type === 17) {
const keys = item.extra_key.split(',');
description += `<p>` + item.vote.message_title + ` 已选${keys.length}项</p>`;
description += '<p>' + item.vote.message_title + ` 已选${keys.length}项</p>`;
for (const i of item.vote.options) {
if (keys.includes(String(i.id))) {
description += `<p>${i.title}√</p>`;

View File

@ -121,12 +121,12 @@ export const route: Route = {
{
title: '中国人事考试网通知公告',
source: ['www.cpta.com.cn/notice.html', 'www.cpta.com.cn'],
target: `/notice`,
target: '/notice',
},
{
title: '中国人事考试网成绩发布',
source: ['www.cpta.com.cn/performance.html', 'www.cpta.com.cn'],
target: `/performance`,
target: '/performance',
},
],
example: '/cpta/notice',

View File

@ -8,7 +8,7 @@ import ofetch from '@/utils/ofetch';
import { parseDate } from '@/utils/parse-date';
export const baseUrl = 'https://app.daily.dev';
const gqlUrl = `https://api.daily.dev/graphql`;
const gqlUrl = 'https://api.daily.dev/graphql';
export const variables = {
version: 54,
loggedIn: false,

View File

@ -21,7 +21,7 @@ export const route: Route = {
name: '票务更新',
maintainers: ['hoilc', 'Konano'],
handler,
description: `城市、分类名、子分类名,请参见[大麦网搜索页面](https://search.damai.cn/search.htm)`,
description: '城市、分类名、子分类名,请参见[大麦网搜索页面](https://search.damai.cn/search.htm)',
};
async function handler(ctx) {

View File

@ -63,7 +63,7 @@ async function handler(ctx) {
return {
title: `当当开放平台 - ${typeMap[type] || typeMap[0]}`,
link: `https://open.dangdang.com/home/notice/message/1`,
link: 'https://open.dangdang.com/home/notice/message/1',
item: result,
};
}

View File

@ -28,16 +28,16 @@ async function handler(ctx) {
const limit = ctx.req.query('limit') ? Number(ctx.req.query('limit')) : 30;
const browser = await puppeteer();
let link = `https://www.dcard.tw/f`;
let api = `https://www.dcard.tw/service/api/v2`;
let title = `Dcard - `;
let link = 'https://www.dcard.tw/f';
let api = 'https://www.dcard.tw/service/api/v2';
let title = 'Dcard - ';
if (section !== 'posts' && section !== 'popular' && section !== 'latest') {
link += `/${section}`;
api += `/forums/${section}`;
title += `${section} - `;
}
api += `/posts`;
api += '/posts';
if (type === 'popular') {
link += '?latest=false';
api += '?popular=true';

View File

@ -50,7 +50,7 @@ async function handler() {
});
return {
title: `雨苁`,
title: '雨苁',
link: String(url),
item: items,
};

View File

@ -79,7 +79,7 @@ async function handler(ctx) {
const headers = {
Accept: 'application/json, text/plain, */*',
'Content-Type': 'application/json;charset=UTF-8',
Referer: `https://m.igetget.com/share/course/free/detail?id=nb9L2q1e3OxKBPNsdoJrgN8P0Rwo6B`,
Referer: 'https://m.igetget.com/share/course/free/detail?id=nb9L2q1e3OxKBPNsdoJrgN8P0Rwo6B',
Origin: 'https://m.igetget.com',
};
const max_id = 0;

View File

@ -28,7 +28,7 @@ export const handler = async (ctx: Context): Promise<Data> => {
const items: DataItem[] = ProcessFeedItems(limit, response.data.dataList, $);
const title: string | undefined = $(`div.tags-detail-top-1 h2`).text();
const title: string | undefined = $('div.tags-detail-top-1 h2').text();
return {
title: `${$('title').text().trim().split(/\s/)[0]}${title ? ` - ${title}` : id}`,

View File

@ -69,9 +69,9 @@ async function handler(ctx) {
});
return {
title: `二柄APP`,
link: `https://www.diershoubing.com`,
description: `二柄APP新闻`,
title: '二柄APP',
link: 'https://www.diershoubing.com',
description: '二柄APP新闻',
item: items,
};
}

View File

@ -16,7 +16,7 @@ export const route: Route = {
requireConfig: [
{
name: 'DISCOURSE_CONFIG_*',
description: `Configure the Discourse environment variables referring to [https://docs.rsshub.app/deploy/config#discourse](https://docs.rsshub.app/deploy/config#discourse).`,
description: 'Configure the Discourse environment variables referring to [https://docs.rsshub.app/deploy/config#discourse](https://docs.rsshub.app/deploy/config#discourse).',
},
],
requirePuppeteer: false,

View File

@ -8,7 +8,7 @@ import { getItemList as detailItemList } from './detail';
import { ensureDomain } from './utils';
function getItemList($) {
const list = $(`#vod .list-group-item`)
const list = $('#vod .list-group-item')
.toArray()
.map((item) => {
item = $(item);

View File

@ -65,7 +65,7 @@ const ProcessImg = (content) => {
const ProcessFeed = async (ctx, type, id) => {
const link = `https://www.dongqiudi.com/${type}/${id}.html`;
const apiUrl = `https://api.dongqiudi.com/v3/archive/app/channel/feeds`;
const apiUrl = 'https://api.dongqiudi.com/v3/archive/app/channel/feeds';
const { data: response } = await got(link);
let name;

View File

@ -38,7 +38,7 @@ async function handler(ctx) {
return {
title: `豆瓣电影分类${score ? `超过 ${score} 分的` : ''}影视`,
link: `https://movie.douban.com/tag/#/?sort=U&range=0,10&tags=`,
link: 'https://movie.douban.com/tag/#/?sort=U&range=0,10&tags=',
item: movies
.map((item) => {
const itemScore = Number.parseFloat(item.rate) || 0;

View File

@ -25,13 +25,13 @@ async function handler(ctx) {
const score = Number.parseFloat(ctx.req.param('score')) || 0;
const response = await got({
method: 'get',
url: `https://movie.douban.com/cinema/nowplaying/beijing`,
url: 'https://movie.douban.com/cinema/nowplaying/beijing',
});
const $ = load(response.data);
return {
title: `正在上映的${score ? `超过 ${score} 分的` : ''}电影`,
link: `https://movie.douban.com/cinema/nowplaying/`,
link: 'https://movie.douban.com/cinema/nowplaying/',
item: $('.list-item')
.toArray()
.map((i) => {

View File

@ -50,7 +50,7 @@ export const route: Route = {
<img loading="lazy" src="/img/readable-douban.png" alt="豆瓣读书的可读豆瓣广播 RSS" />`,
};
const headers = { Referer: `https://m.douban.com/` };
const headers = { Referer: 'https://m.douban.com/' };
function tryFixStatus(status) {
let result = { isFixSuccess: true, why: '' };
@ -222,20 +222,20 @@ function getContentByActivity(ctx, item, params = {}, picsPrefixes = []) {
activityInDesc += `<a href="${status.reshared_status.author.url}" target="_blank" rel="noopener noreferrer">`;
}
if (authorNameBold) {
activityInDesc += `<strong>`;
activityInDesc += '<strong>';
}
activityInDesc += status.reshared_status.author.name;
if (authorNameBold) {
activityInDesc += `</strong>`;
activityInDesc += '</strong>';
}
if (readable) {
activityInDesc += `</a>`;
activityInDesc += '</a>';
}
activityInDesc += ` 的广播`;
activityInDesc += ' 的广播';
activityInTitle = `转发 ${status.reshared_status.author.name} 的广播`;
} else {
activityInDesc = `转发广播`;
activityInTitle = `转发广播`;
activityInDesc = '转发广播';
activityInTitle = '转发广播';
}
} else {
activityInDesc = status.activity;
@ -251,16 +251,16 @@ function getContentByActivity(ctx, item, params = {}, picsPrefixes = []) {
usernameAndAvatar += `<img width="${sizeOfAuthorAvatar}" height="${sizeOfAuthorAvatar}" src="${status.author.avatar}" ${readable ? 'hspace="8" vspace="8" align="left"' : ''} />`;
}
if (authorNameBold) {
usernameAndAvatar += `<strong>`;
usernameAndAvatar += '<strong>';
}
usernameAndAvatar += status.author.name;
if (authorNameBold) {
usernameAndAvatar += `</strong>`;
usernameAndAvatar += '</strong>';
}
if (readable) {
usernameAndAvatar += `</a>`;
usernameAndAvatar += '</a>';
}
usernameAndAvatar += `&ensp;`;
usernameAndAvatar += '&ensp;';
description += usernameAndAvatar + activityInDesc + (showColonInDesc ? ': ' : '');
}
@ -299,7 +299,7 @@ function getContentByActivity(ctx, item, params = {}, picsPrefixes = []) {
}
if (status.images && status.images.length) {
description += readable ? `<br clear="both" /><div style="clear: both"></div>` : `<br>`;
description += readable ? '<br clear="both" /><div style="clear: both"></div>' : '<br>';
// 一些RSS Reader会识别所有<img>标签作为内含图片显示,我们不想要头像也作为内含图片之一
// 让所有配图在description的最前面再次出现一次但宽高设为0
@ -320,7 +320,7 @@ function getContentByActivity(ctx, item, params = {}, picsPrefixes = []) {
}
if (status.video_info) {
description += readable ? `<br clear="both" /><div style="clear: both"></div>` : `<br>`;
description += readable ? '<br clear="both" /><div style="clear: both"></div>' : '<br>';
const videoCover = status.video_info.cover_url;
const videoSrc = status.video_info.video_url;
if (videoSrc) {
@ -350,16 +350,16 @@ function getContentByActivity(ctx, item, params = {}, picsPrefixes = []) {
usernameAndAvatar += `<a href="${status.parent_status.author.url}">`;
}
if (authorNameBold) {
usernameAndAvatar += `<strong>`;
usernameAndAvatar += '<strong>';
}
usernameAndAvatar += status.parent_status.author.name;
if (authorNameBold) {
usernameAndAvatar += `</strong>`;
usernameAndAvatar += '</strong>';
}
if (readable) {
usernameAndAvatar += `</a>`;
usernameAndAvatar += '</a>';
}
usernameAndAvatar += `:&ensp;`;
usernameAndAvatar += ':&ensp;';
description += usernameAndAvatar + status.parent_status.text;
if (showRetweetTextInTitle) {
title += status.parent_status.author.name + ': ' + status.parent_status.text;
@ -376,8 +376,8 @@ function getContentByActivity(ctx, item, params = {}, picsPrefixes = []) {
if (status.card) {
if (description) {
description += readable
? `<br clear="both" /><div style="clear: both"></div><blockquote style="background: #80808010;border-top:1px solid #80808030;border-bottom:1px solid #80808030;margin:0;padding:5px 20px;">`
: `<br>`;
? '<br clear="both" /><div style="clear: both"></div><blockquote style="background: #80808010;border-top:1px solid #80808030;border-bottom:1px solid #80808030;margin:0;padding:5px 20px;">'
: '<br>';
}
if (!status.card.images_block && status.card.image) {
description += `<img src="${status.card.image.large.url}" ${readable ? 'vspace="0" hspace="12" align="left" height="75" style="height: 75px;"' : ''} />`;
@ -408,7 +408,7 @@ function getContentByActivity(ctx, item, params = {}, picsPrefixes = []) {
}
description += cardContents.join('<br>');
if (readable) {
description += `<br clear="both" /><div style="clear: both"></div></blockquote>`;
description += '<br clear="both" /><div style="clear: both"></div></blockquote>';
}
if (status.card.images_block) {
const imageUrls: Array<string | undefined> = [];
@ -421,7 +421,7 @@ function getContentByActivity(ctx, item, params = {}, picsPrefixes = []) {
// video_card
if (status.video_card) {
description += readable ? `<br clear="both" /><div style="clear: both"></div><blockquote style="background: #80808010;border-top:1px solid #80808030;border-bottom:1px solid #80808030;margin:0;padding:5px 20px;">` : `<br>`;
description += readable ? '<br clear="both" /><div style="clear: both"></div><blockquote style="background: #80808010;border-top:1px solid #80808030;border-bottom:1px solid #80808030;margin:0;padding:5px 20px;">' : '<br>';
const videoCover = status.video_card.video_info && status.video_card.video_info.cover_url;
const videoSrc = status.video_card.video_info && status.video_card.video_info.video_url;
@ -431,13 +431,13 @@ function getContentByActivity(ctx, item, params = {}, picsPrefixes = []) {
description += `${videoSrc ? `<video src="${videoSrc}" ${videoCover ? `poster="${videoCover}"` : ''}></video>` : ''}<br>${status.video_card.title ? `<a href="${status.video_card.url}">${status.video_card.title}</a>` : ''}`;
if (readable) {
description += `</blockquote>`;
description += '</blockquote>';
}
}
// reshared_status
if (status.reshared_status) {
description += readable ? `<br clear="both" /><div style="clear: both"></div><blockquote style="background: #80808010;border-top:1px solid #80808030;border-bottom:1px solid #80808030;margin:0;padding:5px 20px;">` : `<br>`;
description += readable ? '<br clear="both" /><div style="clear: both"></div><blockquote style="background: #80808010;border-top:1px solid #80808030;border-bottom:1px solid #80808030;margin:0;padding:5px 20px;">' : '<br>';
if (showRetweetTextInTitle) {
title += ' | ';

View File

@ -38,7 +38,7 @@ For the site https://www.dw.com/de/deutschland/s-12321 the language code would b
],
};
const defaultUrl = `https://www.dw.com/graph-api/en/content/navigation/9097`;
const defaultUrl = 'https://www.dw.com/graph-api/en/content/navigation/9097';
const typenames = new Set(['Article', 'Liveblog', 'Video']);
async function handler(ctx) {

View File

@ -26,7 +26,7 @@ export const route: Route = {
maintainers: ['LogicJake'],
handler,
url: 'www.cea.gov.cn/cea/xwzx/zqsd/index.html',
description: `可通过全局过滤参数订阅您感兴趣的地区.`,
description: '可通过全局过滤参数订阅您感兴趣的地区.',
};
async function handler(ctx) {

View File

@ -36,7 +36,7 @@ async function handler() {
const response = await got({
method: 'get',
url: `https://apin.eastday.com/apiplus/special/specialnewslistbyurl?specialUrl=1632798465040016&skipCount=0&limitCount=20`,
url: 'https://apin.eastday.com/apiplus/special/specialnewslistbyurl?specialUrl=1632798465040016&skipCount=0&limitCount=20',
});
const result = await Promise.all(
@ -69,7 +69,7 @@ async function handler() {
);
return {
title: `东方网-上海`,
title: '东方网-上海',
link: `${domain}/wap/sh.html`,
item: result,
};

View File

@ -46,7 +46,7 @@ async function handler(ctx) {
};
const cb = `jQuery${('3.5.1' + Math.random()).replaceAll(/\D/g, '')}_${Date.now()}`;
const url = `https://search-api-web.eastmoney.com/search/jsonp`;
const url = 'https://search-api-web.eastmoney.com/search/jsonp';
const response = await got(url, {
searchParams: {

View File

@ -5,7 +5,7 @@ import got from '@/utils/got';
const getCateName = async (cid = 0) => {
const key = 'eleduck-categories';
const cates = await cache.tryGet(key, async () => {
const res = await got(`https://svc.eleduck.com/api/v1/categories`);
const res = await got('https://svc.eleduck.com/api/v1/categories');
const map = {};
for (const item of res.data.categories) {
map[item.id] = item.name;

View File

@ -29,7 +29,7 @@ export const route: Route = {
};
async function handler() {
const url = `https://europechinese.blogspot.com/`;
const url = 'https://europechinese.blogspot.com/';
const { data: response } = await got(url);
const $ = load(response);
const list = $('h3.post-title');
@ -60,7 +60,7 @@ async function handler() {
);
return {
title: `歐洲動態(國際)| 最新`,
title: '歐洲動態(國際)| 最新',
link: url,
item: out,
};

View File

@ -42,8 +42,8 @@ function passageConv(p) {
p.styles.map((s) => {
switch (s.type) {
case 'bold':
seg[s.offset] = `<b>` + seg[s.offset];
seg[s.offset + s.length - 1] += `</b>`;
seg[s.offset] = '<b>' + seg[s.offset];
seg[s.offset + s.length - 1] += '</b>';
break;
default:
}
@ -53,7 +53,7 @@ function passageConv(p) {
if (p.links) {
p.links.map((l) => {
seg[l.offset] = `<a href="${l.url}">` + seg[l.offset];
seg[l.offset + l.length - 1] += `</a>`;
seg[l.offset + l.length - 1] += '</a>';
return l;
});
}
@ -171,7 +171,7 @@ export function parseItem(item: PostItem) {
return cache.tryGet(`fanbox-${item.id}-${item.updatedDatetime}`, async () => {
const postDetail = (await ofetch(`https://api.fanbox.cc/post.info?postId=${item.id}`, { headers: { ...getHeaders(), 'User-Agent': config.trueUA } })) as PostDetailResponse;
return {
title: item.title || `No title`,
title: item.title || 'No title',
description: await parseDetail(postDetail.body),
pubDate: parseDate(item.updatedDatetime),
link: `https://${item.creatorId}.fanbox.cc/posts/${item.id}`,

View File

@ -47,7 +47,7 @@ async function handler(ctx) {
const id = ctx.req.param('id');
const count = ctx.req.query('limit') || 99999;
const cdnNum = ctx.req.param('cdn') || 5;
const cdn = !Number.isNaN(Number.parseInt(cdnNum)) && 1 <= Number.parseInt(cdnNum) && Number.parseInt(cdnNum) <= 5 ? `https://p${cdnNum}.fzacg.com` : `https://p5.fzacg.com`;
const cdn = !Number.isNaN(Number.parseInt(cdnNum)) && 1 <= Number.parseInt(cdnNum) && Number.parseInt(cdnNum) <= 5 ? `https://p${cdnNum}.fzacg.com` : 'https://p5.fzacg.com';
// 获取漫画清单
const response = await got(`${host}/api/manhua/${id}`);

View File

@ -44,7 +44,7 @@ async function handler(ctx: Context) {
const extra = {
description: (topic: string) => `Articles for your research and knowledge under ${topic}`,
date: true,
selector: `div.card`,
selector: 'div.card',
};
return await commonHandler('https://insider.finology.in', `/${category}`, extra);
}

View File

@ -22,7 +22,7 @@ async function handler() {
const extra = {
description: (topic: string) => `Check out the most talked-about articles among our readers! ${topic}`,
date: false,
selector: `div.card`,
selector: 'div.card',
};
return await commonHandler('https://insider.finology.in', '/most-viewed', extra);
}

View File

@ -57,7 +57,7 @@ async function handler(ctx: Context) {
const extra = {
description: (topic: string) => `Everything that Insider has to offer about ${topic} for you to read and learn.`,
date: true,
selector: `div.card`,
selector: 'div.card',
};
return await commonHandler('https://insider.finology.in', `/tag/${topic}`, extra);
}

View File

@ -21,7 +21,7 @@ export const route: Route = {
async function handler(ctx) {
const limit = ctx.req.query('limit') ? Number.parseInt(ctx.req.query('limit'), 10) : 50;
const apiUrl = new URL(`v2/feed`, apiRootUrl).href;
const apiUrl = new URL('v2/feed', apiRootUrl).href;
const { items } = await processItems(apiUrl, limit);

View File

@ -69,9 +69,9 @@ async function handler(ctx) {
);
return {
title: `FT.com - myFT`,
title: 'FT.com - myFT',
link,
description: `FT.com - myFT`,
description: 'FT.com - myFT',
item: items,
};
}

View File

@ -27,7 +27,7 @@ export const route: Route = {
};
async function handler(ctx) {
const { data: response } = await got(`https://fuliba2023.net/wp-json/wp/v2/posts`, {
const { data: response } = await got('https://fuliba2023.net/wp-json/wp/v2/posts', {
searchParams: {
per_page: ctx.req.query('limit') ?? 100,
_embed: 1,
@ -44,7 +44,7 @@ async function handler(ctx) {
return {
title: '福利吧',
link: `https://fuliba2023.net`,
link: 'https://fuliba2023.net',
item: items,
};
}

View File

@ -53,7 +53,7 @@ async function handler(ctx) {
return {
title: 'Fur Affinity | Browse',
link: 'https://www.furaffinity.net/browse/',
description: `Fur Affinity Browsing Artwork`,
description: 'Fur Affinity Browsing Artwork',
item: items,
};
}

View File

@ -75,7 +75,7 @@ async function handler(ctx) {
return {
title: 'Fur Affinity | Home',
link: 'https://www.furaffinity.net/',
description: `Fur Affinity Index`,
description: 'Fur Affinity Index',
item: items,
};
}

View File

@ -67,7 +67,7 @@ async function handler(ctx) {
allowEmpty: true,
title: 'Fur Affinity | Search',
link: `https://www.furaffinity.net/Search/?q=${query}`,
description: `Fur Affinity Search`,
description: 'Fur Affinity Search',
item: items,
};
}

Some files were not shown because too many files have changed in this diff Show More