mirror of
https://github.com/DIYgod/RSSHub.git
synced 2026-09-24 23:12:34 +08:00
feat(route): add FurAffinity routes (#6912)
* Add files via upload * Add files via upload * Create .env * Update followings_dynamic.js * Update followings_dynamic.js * Update followings_dynamic.js * Update social-media.md * Delete .env * Update social-media.md * Update followings_dynamic.js * Update followings_dynamic.js * Add files via upload 添加作者信息 * [CodeFactor] Apply fixes to commit57935d0[ci skip] [skip ci] * Update followings_dynamic.js * Update router.js * Update followings_dynamic.js * Update social-media.md * Update social-media.md * Update followings_dynamic.js * Update followings_dynamic.js * Create .env * Update .env * Update followings_dynamic.js * Update router.js * Update followings_dynamic.js * Delete .env * [CodeFactor] Apply fixes [ci skip] [skip ci] * Update followings_dynamic.js 优化代码 * Update followings_dynamic.js * [CodeFactor] Apply fixes to commit7a43db0[ci skip] [skip ci] * Create .env * Update followings_dynamic.js * [CodeFactor] Apply fixes to commit14dfa49[ci skip] [skip ci] * Update followings_dynamic.js * Update followings_dynamic.js * [CodeFactor] Apply fixes to commitd60fc51[ci skip] [skip ci] * Delete .env * Update followings_dynamic.js 优化代码 * [CodeFactor] Apply fixes to commit8086726[ci skip] [skip ci] * [CodeFactor] Apply fixes to commite1c8843[ci skip] [skip ci] * Update social-media.md * Update router.js * Update router.js * Create browse.js * Create commissions.js * Create favorites.js * Create gallery.js * Create home.js * Create scraps.js * Create search.js * Create shouts.js * Create status * Create watchers * Create watching * Update social-media.md * Update social-media.md * Update social-media.md * Update social-media.md * [CodeFactor] Apply fixes [ci skip] [skip ci] * Update browse.js fix * Update favorites.js * Update gallery.js * Update home.js * Update scraps.js * Update search.js * Update and rename status to status.js * [CodeFactor] Apply fixes to commit29a0f7b[ci skip] [skip ci] * Update home.js * Update status.js * Update status.js * Update browse.js * Update favorites.js * Update gallery.js * Update home.js * Update scraps.js * Update search.js * Rename watchers to watchers.js * [CodeFactor] Apply fixes to commit099bd34[ci skip] [skip ci] * Rename watching to watching.js * [CodeFactor] Apply fixes to commit3c18a88[ci skip] [skip ci] * Update social-media.md * Update browse.js * Update favorites.js * Update gallery.js * Update home.js * Update scraps.js * Update search.js * Update social-media.md * Update social-media.md * Update social-media.md * Update router.js * Update social-media.md * Update social-media.md * Update search.js * [CodeFactor] Apply fixes to commit2b13a90[ci skip] [skip ci] * Update scraps.js * Create user.js * Update watchers.js * [CodeFactor] Apply fixes to commit6636a44[ci skip] [skip ci] * Update watching.js * Update watchers.js * Update watching.js * [CodeFactor] Apply fixes to commit9b713a6[ci skip] [skip ci] * Update watchers.js * Update router.js * Create journals.js * Update social-media.md * Update social-media.md * Create submission_comments.js * Create journal_comments.js * Update router.js * Update social-media.md * Update social-media.md * Update social-media.md * Update user.js * [CodeFactor] Apply fixes to commita31f50f[ci skip] [skip ci] * Update user.js Co-authored-by: TigerDen96 <55782476+TigerDen96@users.noreply.github.com> Co-authored-by: 小虎故洞 <55782476+XiaoHuGuDong@users.noreply.github.com> Co-authored-by: codefactor-io <support@codefactor.io> Co-authored-by: 小虎故洞 <55782476+TigerWolfDen@users.noreply.github.com>
This commit is contained in:
co-authored by
TigerDen96
小虎故洞
codefactor-io
小虎故洞
parent
8d03d86866
commit
9d9d8698a3
@@ -275,3 +275,73 @@ YouTube provides official RSS feeds for channels, for instance <https://www.yout
|
||||
### Playlist
|
||||
|
||||
<RouteEn path="/youtube/playlist/:id/:embed?" example="/youtube/playlist/PLqQ1RwlxOgeLTJ1f3fNMSwhjVgaWKo_9Z" :paramsDesc="['YouTube playlist id', 'Default to embed the video, set to any value to disable embedding']" radar="1" rssbud="1"/>
|
||||
|
||||
## Fur Affinity
|
||||
|
||||
### Home
|
||||
|
||||
<Route author="TigerCubDen" example="/furaffinity/home" path="/furaffinity/:type?/:nsfw?" :paramsDesc="['Type,Default to be artwork', 'NSFW Mode, do not filter NSFW Contents when value set to 1']">
|
||||
|
||||
Type
|
||||
|
||||
| artwork | crafts | music | writing |
|
||||
| ---- | ---- | ---- | ---- |
|
||||
| artwork | crafts | music | writing |
|
||||
|
||||
</Route>
|
||||
|
||||
### Browse
|
||||
|
||||
<Route author="TigerCubDen" example="/furaffinity/browse" path="/furaffinity/:nsfw?" :paramsDesc="['NSFW Mode, do not filter NSFW Contents when value set to 1']"/>
|
||||
|
||||
### Website Status
|
||||
|
||||
<Route author="TigerCubDen" example="/furaffinity/status" path="/furaffinity/status"/>
|
||||
|
||||
### Userpage Profile
|
||||
|
||||
<Route author="TigerCubDen" example="/furaffinity/user/tiger-jungle" path="/furaffinity/user/:username" :paramsDesc="['Username, Can find in userpage']"/>
|
||||
|
||||
### Search
|
||||
|
||||
<Route author="TigerCubDen" example="/furaffinity/search/tiger" path="/furaffinity/:keyword/:nsfw?" :paramsDesc="['keyword, Enter any words you want to search, require English', 'NSFW Mode,do not filter NSFW Contents when value set to 1']"/>
|
||||
|
||||
### User's Watching List
|
||||
|
||||
<Route author="TigerCubDen" example="/furaffinity/watching/okami9312" path="/furaffinity/watching/:username" :paramsDesc="['Username, Can find in userpage']"/>
|
||||
|
||||
### User's Watcher List
|
||||
|
||||
<Route author="TigerCubDen" example="/furaffinity/watchers/malikshadowclaw" path="/furaffinity/watchers/:username" :paramsDesc="['Username, Can find in userpage']"/>
|
||||
|
||||
### User's Commission Information
|
||||
|
||||
<Route author="TigerCubDen" example="/furaffinity/commissions/flashlioness" path="/furaffinity/commissions/:username" :paramsDesc="['Username, Can find in userpage']"/>
|
||||
|
||||
### User's Shouts
|
||||
|
||||
<Route author="TigerCubDen" example="/furaffinity/shouts/redodgft" path="/furaffinity/shouts/:username" :paramsDesc="['Username, Can find in userpage']"/>
|
||||
|
||||
### User's Journals
|
||||
|
||||
<Route author="TigerCubDen" example="/furaffinity/journals/rukis" path="/furaffinity/journals/:username" :paramsDesc="['Username, Can find in userpage']"/>
|
||||
|
||||
### User's Gallery
|
||||
|
||||
<Route author="TigerCubDen" example="/furaffinity/gallery/flashlioness" path="/furaffinity/gallery/:username/:nsfw?" :paramsDesc="['Username, Can find in userpage', 'NSFW Mode, do not filter NSFW Contents when value set to 1']"/>
|
||||
|
||||
### User's Scraps
|
||||
|
||||
<Route author="TigerCubDen" example="/furaffinity/scraps/flashlioness" path="/furaffinity/scraps/:username/:nsfw?" :paramsDesc="['Username, Can find in userpage', 'NSFW Mode, do not filter NSFW Contents when value set to 1']"/>
|
||||
|
||||
### User's Favorites
|
||||
|
||||
<Route author="TigerCubDen" example="/furaffinity/favorites/tiger-jungle" path="/furaffinity/favorites/:username/:nsfw?" :paramsDesc="['Username, Can find in userpage', 'NSFW Mode, do not filter NSFW Contents when value set to 1']"/>
|
||||
|
||||
### Submission Comments
|
||||
|
||||
<Route author="TigerCubDen" example="/furaffinity/submission_comments/tiger-jungle" path="/furaffinity/submission_comments/:id" :paramsDesc="['id, Can find in URL of submission page']"/>
|
||||
|
||||
### Journal Comments
|
||||
|
||||
<Route author="TigerCubDen" example="/furaffinity/journal_comments/tiger-jungle" path="/furaffinity/journal_comments/:id" :paramsDesc="['id, Can find in URL of journal page']"/>
|
||||
|
||||
+71
-1
@@ -208,7 +208,7 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性
|
||||
|
||||
### 用户关注动态
|
||||
|
||||
<Route author="TigerWolfDen" example="/bilibili/followings/dynamic/109937383" path="/bilibili/followings/dynamic/:uid/:disableEmbed?" :paramsDesc="['用户 id', '默认为开启内嵌视频, 任意值为关闭']" selfhost="1">
|
||||
<Route author="TigerCubDen" example="/bilibili/followings/dynamic/109937383" path="/bilibili/followings/dynamic/:uid/:disableEmbed?" :paramsDesc="['用户 id', '默认为开启内嵌视频, 任意值为关闭']" selfhost="1">
|
||||
::: warning 注意
|
||||
|
||||
用户动态需要 b 站登录后的 Cookie 值,所以只能自建,详情见部署页面的配置模块。
|
||||
@@ -1180,3 +1180,73 @@ rule
|
||||
用户关注动态需要登录后的 Cookie 值,所以只能自建,详情见部署页面的配置模块。
|
||||
|
||||
:::
|
||||
|
||||
## Fur Affinity
|
||||
|
||||
### 主页
|
||||
|
||||
<Route author="TigerCubDen" example="/furaffinity/home" path="/furaffinity/:type?/:nsfw?" :paramsDesc="['类型,默认为artwork', 'NSFW开关, 当值为 1 时不过滤NSFW内容']">
|
||||
|
||||
类型 type
|
||||
|
||||
| 艺术品 | 手工制品 | 音乐 | 文学 |
|
||||
| ---- | ---- | ---- | ---- |
|
||||
| artwork | crafts | music | writing |
|
||||
|
||||
</Route>
|
||||
|
||||
### 浏览
|
||||
|
||||
<Route author="TigerCubDen" example="/furaffinity/browse" path="/furaffinity/:nsfw?" :paramsDesc="['NSFW开关, 当值为 1 时不过滤NSFW内容']"/>
|
||||
|
||||
### 站点状态
|
||||
|
||||
<Route author="TigerCubDen" example="/furaffinity/status" path="/furaffinity/status"/>
|
||||
|
||||
### 搜索
|
||||
|
||||
<Route author="TigerCubDen" example="/furaffinity/search/tiger" path="/furaffinity/:keyword/:nsfw?" :paramsDesc="['搜索关键词,仅限英文搜索', 'NSFW开关, 当值为 1 时不过滤NSFW内容']"/>
|
||||
|
||||
### 用户主页简介
|
||||
|
||||
<Route author="TigerCubDen" example="/furaffinity/user/tiger-jungle" path="/furaffinity/user/:username" :paramsDesc="['用户名, 可在用户主页的链接处找到']"/>
|
||||
|
||||
### 用户关注列表
|
||||
|
||||
<Route author="TigerCubDen" example="/furaffinity/watching/okami9312" path="/furaffinity/watching/:username" :paramsDesc="['用户名, 可在用户主页的链接处找到']"/>
|
||||
|
||||
### 用户被关注列表
|
||||
|
||||
<Route author="TigerCubDen" example="/furaffinity/watchers/malikshadowclaw" path="/furaffinity/watchers/:username" :paramsDesc="['用户名, 可在用户主页的链接处找到']"/>
|
||||
|
||||
### 用户接受委托信息
|
||||
|
||||
<Route author="TigerCubDen" example="/furaffinity/commissions/flashlioness" path="/furaffinity/commissions/:username" :paramsDesc="['用户名, 可在用户主页的链接处找到']"/>
|
||||
|
||||
### 用户的Shouts留言
|
||||
|
||||
<Route author="TigerCubDen" example="/furaffinity/shouts/redodgft" path="/furaffinity/shouts/:username" :paramsDesc="['用户名, 可在用户主页的链接处找到']"/>
|
||||
|
||||
### 用户的日记
|
||||
|
||||
<Route author="TigerCubDen" example="/furaffinity/journals/rukis" path="/furaffinity/shouts/:username" :paramsDesc="['用户名, 可在用户主页的链接处找到']"/>
|
||||
|
||||
### 用户的创作画廊
|
||||
|
||||
<Route author="TigerCubDen" example="/furaffinity/gallery/flashlioness" path="/furaffinity/gallery/:username/:nsfw?" :paramsDesc="['用户名, 可在用户主页的链接处找到', 'NSFW开关,当值为 1 时不过滤NSFW内容']"/>
|
||||
|
||||
### 用户的零碎(非正式)作品
|
||||
|
||||
<Route author="TigerCubDen" example="/furaffinity/scraps/flashlioness" path="/furaffinity/scraps/:username/:nsfw?" :paramsDesc="['用户名, 可在用户主页的链接处找到', 'NSFW开关,当值为 1 时不过滤NSFW内容']"/>
|
||||
|
||||
### 用户的喜爱列表
|
||||
|
||||
<Route author="TigerCubDen" example="/furaffinity/favorites/tiger-jungle" path="/furaffinity/favorites/:username/:nsfw?" :paramsDesc="['用户名, 可在用户主页的链接处找到', 'NSFW开关,当值为 1 时不过滤NSFW内容']"/>
|
||||
|
||||
### 作品评论区
|
||||
|
||||
<Route author="TigerCubDen" example="/furaffinity/submission_comments/34909983" path="/furaffinity/submission_comments/:id" :paramsDesc="['作品id, 可在作品所在页面对应的链接处找到']"/>
|
||||
|
||||
### 日记评论区
|
||||
|
||||
<Route author="TigerCubDen" example="/furaffinity/journal_comments/9750669" path="/furaffinity/journal_comments/:id" :paramsDesc="['日记id, 可在作品所在页面对应的链接处找到']"/>
|
||||
|
||||
@@ -3944,4 +3944,21 @@ router.get('/macked/app/:name', require('./routes/macked/app'));
|
||||
// 美国劳工联合会-产业工会联合会
|
||||
router.get('/aflcio/blog', require('./routes/aflcio/blog'));
|
||||
|
||||
// Fur Affinity
|
||||
router.get('/furaffinity/home/:type?/:nsfw?', require('./routes/furaffinity/home'));
|
||||
router.get('/furaffinity/browse/:nsfw?', require('./routes/furaffinity/browse'));
|
||||
router.get('/furaffinity/status', require('./routes/furaffinity/status'));
|
||||
router.get('/furaffinity/search/:keyword/:nsfw?', require('./routes/furaffinity/search'));
|
||||
router.get('/furaffinity/user/:username', require('./routes/furaffinity/user'));
|
||||
router.get('/furaffinity/watching/:username', require('./routes/furaffinity/watching'));
|
||||
router.get('/furaffinity/watchers/:username', require('./routes/furaffinity/watchers'));
|
||||
router.get('/furaffinity/commissions/:username', require('./routes/furaffinity/commissions'));
|
||||
router.get('/furaffinity/shouts/:username', require('./routes/furaffinity/shouts'));
|
||||
router.get('/furaffinity/journals/:username', require('./routes/furaffinity/journals'));
|
||||
router.get('/furaffinity/gallery/:username/:nsfw?', require('./routes/furaffinity/gallery'));
|
||||
router.get('/furaffinity/scraps/:username/:nsfw?', require('./routes/furaffinity/scraps'));
|
||||
router.get('/furaffinity/favorites/:username/:nsfw?', require('./routes/furaffinity/favorites'));
|
||||
router.get('/furaffinity/submission_comments/:id', require('./routes/furaffinity/submission_comments'));
|
||||
router.get('/furaffinity/journal_comments/:id', require('./routes/furaffinity/journal_comments'));
|
||||
|
||||
module.exports = router;
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
const got = require('@/utils/got');
|
||||
|
||||
// 发起 HTTP GET 请求
|
||||
module.exports = async (ctx) => {
|
||||
// 传入参数
|
||||
const nsfw = String(ctx.params.nsfw);
|
||||
|
||||
// 判断传入的参数nsfw
|
||||
let url = 'https://faexport.spangle.org.uk/browse.json?sfw=1';
|
||||
if (nsfw === '1') {
|
||||
url = 'https://faexport.spangle.org.uk/browse.json';
|
||||
}
|
||||
|
||||
const response = await got({
|
||||
method: 'get',
|
||||
url: url,
|
||||
headers: {
|
||||
Referer: `https://faexport.spangle.org.uk/`,
|
||||
},
|
||||
});
|
||||
|
||||
const data = response.data;
|
||||
|
||||
ctx.state.data = {
|
||||
// 源标题
|
||||
title: `Fur Affinity Browse`,
|
||||
// 源链接
|
||||
link: `https://www.furaffinity.net/browse/`,
|
||||
// 源说明
|
||||
description: `Fur Affinity Browse`,
|
||||
|
||||
// 遍历此前获取的数据
|
||||
item: data.map((item) => ({
|
||||
// 标题
|
||||
title: item.title,
|
||||
// 正文
|
||||
description: `<img src="${item.thumbnail}">`,
|
||||
// 链接
|
||||
link: item.link,
|
||||
// 作者
|
||||
author: item.name,
|
||||
// 由于源API未提供日期,故无pubDate
|
||||
})),
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,39 @@
|
||||
const got = require('@/utils/got');
|
||||
|
||||
// 发起 HTTP GET 请求
|
||||
module.exports = async (ctx) => {
|
||||
// 传入参数
|
||||
const username = String(ctx.params.username);
|
||||
|
||||
const response = await got({
|
||||
method: 'get',
|
||||
url: `https://faexport.spangle.org.uk/user/${username}/commissions.json`,
|
||||
headers: {
|
||||
Referer: `https://faexport.spangle.org.uk/`,
|
||||
},
|
||||
});
|
||||
|
||||
const data = response.data;
|
||||
|
||||
ctx.state.data = {
|
||||
// 源标题
|
||||
title: `${username}'s Commissions`,
|
||||
// 源链接
|
||||
link: `https://www.furaffinity.net/commissions/${username}/`,
|
||||
// 源说明
|
||||
description: `Fur Affinity ${username}'s Commissions`,
|
||||
|
||||
// 遍历此前获取的数据
|
||||
item: data.map((item) => ({
|
||||
// 标题
|
||||
title: item.title,
|
||||
// 正文
|
||||
description: `${item.description} <br> <img src="${item.submission.thumbnail}"> `,
|
||||
// 链接
|
||||
link: item.submission.link,
|
||||
// 作者
|
||||
author: username,
|
||||
// 由于源API未提供日期,故无pubDate
|
||||
})),
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,55 @@
|
||||
const got = require('@/utils/got');
|
||||
const cheerio = require('cheerio');
|
||||
|
||||
// 发起 HTTP GET 请求
|
||||
module.exports = async (ctx) => {
|
||||
// 传入参数
|
||||
const nsfw = String(ctx.params.nsfw);
|
||||
const username = String(ctx.params.username);
|
||||
|
||||
// 添加参数username以及判断传入的参数nsfw
|
||||
let url = `https://faexport.spangle.org.uk/user/${username}/favorites.rss?sfw=1`;
|
||||
if (nsfw === '1') {
|
||||
url = `https://faexport.spangle.org.uk/user/${username}/favorites.rss`;
|
||||
}
|
||||
|
||||
const response = await got({
|
||||
method: 'get',
|
||||
url: url,
|
||||
headers: {
|
||||
Referer: `https://faexport.spangle.org.uk/`,
|
||||
},
|
||||
});
|
||||
|
||||
// 使用 cheerio 加载返回的 HTML
|
||||
|
||||
const data = response.data;
|
||||
const $ = cheerio.load(data, {
|
||||
xmlMode: true
|
||||
});
|
||||
|
||||
const list = $('item');
|
||||
|
||||
ctx.state.data = {
|
||||
// 源标题
|
||||
title: `${username}'s Favorites`,
|
||||
// 源链接
|
||||
link: `https://www.furaffinity.net/favorites/${username}/`,
|
||||
// 源说明
|
||||
description: `Fur Affinity ${username}'s Favorites`,
|
||||
|
||||
// 遍历此前获取的数据
|
||||
item:
|
||||
list &&
|
||||
list.map((index, item) => {
|
||||
item = $(item);
|
||||
return {
|
||||
title: item.find("title").text(),
|
||||
description: item.find("description").text(),
|
||||
link: item.find("link").text(),
|
||||
pubDate: new Date(item.find("pubDate").text()).toUTCString(),
|
||||
};
|
||||
})
|
||||
.get(),
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,56 @@
|
||||
const got = require('@/utils/got');
|
||||
const cheerio = require('cheerio');
|
||||
|
||||
// 发起 HTTP GET 请求
|
||||
module.exports = async (ctx) => {
|
||||
// 传入参数
|
||||
const nsfw = String(ctx.params.nsfw);
|
||||
const username = String(ctx.params.username);
|
||||
|
||||
// 添加参数username以及判断传入的参数nsfw
|
||||
let url = `https://faexport.spangle.org.uk/user/${username}/gallery.rss?sfw=1`;
|
||||
if (nsfw === '1') {
|
||||
url = `https://faexport.spangle.org.uk/user/${username}/gallery.rss`;
|
||||
}
|
||||
|
||||
const response = await got({
|
||||
method: 'get',
|
||||
url: url,
|
||||
headers: {
|
||||
Referer: `https://faexport.spangle.org.uk/`,
|
||||
},
|
||||
});
|
||||
|
||||
// 使用 cheerio 加载返回的 HTML
|
||||
|
||||
const data = response.data;
|
||||
const $ = cheerio.load(data, {
|
||||
xmlMode: true
|
||||
});
|
||||
|
||||
const list = $('item');
|
||||
|
||||
ctx.state.data = {
|
||||
// 源标题
|
||||
title: `${username}'s Gallery`,
|
||||
// 源链接
|
||||
link: `https://www.furaffinity.net/gallery/${username}/`,
|
||||
// 源说明
|
||||
description: `Fur Affinity ${username}'s Gallery`,
|
||||
|
||||
// 遍历此前获取的数据
|
||||
item:
|
||||
list &&
|
||||
list.map((index, item) => {
|
||||
item = $(item);
|
||||
return {
|
||||
title: item.find("title").text(),
|
||||
description: item.find("description").text(),
|
||||
link: item.find("link").text(),
|
||||
pubDate: new Date(item.find("pubDate").text()).toUTCString(),
|
||||
author: username,
|
||||
};
|
||||
})
|
||||
.get(),
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,60 @@
|
||||
const got = require('@/utils/got');
|
||||
|
||||
// 发起 HTTP GET 请求
|
||||
module.exports = async (ctx) => {
|
||||
// 传入参数
|
||||
const type = String(ctx.params.type);
|
||||
const nsfw = String(ctx.params.nsfw);
|
||||
|
||||
// 判断传入的参数nsfw
|
||||
let url = 'https://faexport.spangle.org.uk/home.json?sfw=1';
|
||||
if (nsfw === '1' || type === '1') {
|
||||
url = 'https://faexport.spangle.org.uk/home.json';
|
||||
}
|
||||
|
||||
const response = await got({
|
||||
method: 'get',
|
||||
url: url,
|
||||
headers: {
|
||||
Referer: `https://faexport.spangle.org.uk/`,
|
||||
},
|
||||
});
|
||||
|
||||
let data = response.data;
|
||||
|
||||
// 判断传入的参数type,分别为:artwork、crafts、music、writing
|
||||
if (type === 'artwork') {
|
||||
data = data.artwork;
|
||||
}
|
||||
else if (type === 'crafts') {
|
||||
data = data.crafts;
|
||||
} else if (type === 'music') {
|
||||
data = data.music;
|
||||
} else if (type === 'writing') {
|
||||
data = data.writing;
|
||||
} else {
|
||||
data = data.artwork;
|
||||
}
|
||||
|
||||
ctx.state.data = {
|
||||
// 源标题
|
||||
title: `Fur Affinity Home`,
|
||||
// 源链接
|
||||
link: `https://www.furaffinity.net/`,
|
||||
// 源说明
|
||||
description: `Fur Affinity Home`,
|
||||
|
||||
// 遍历此前获取的数据
|
||||
item: data.map((item) => ({
|
||||
// 标题
|
||||
title: item.title,
|
||||
// 正文
|
||||
description: `<img src="${item.thumbnail}">`,
|
||||
// 链接
|
||||
link: item.link,
|
||||
// 作者
|
||||
author: item.name,
|
||||
// 由于源API未提供日期,故无pubDate
|
||||
})),
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,50 @@
|
||||
const got = require('@/utils/got');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
//传入参数
|
||||
const id = String(ctx.params.id);
|
||||
|
||||
// 发起 HTTP GET 请求
|
||||
const response = await got({
|
||||
method: 'get',
|
||||
url: `https://faexport.spangle.org.uk/journal/${id}/comments.json`,
|
||||
headers: {
|
||||
Referer: `https://faexport.spangle.org.uk/`,
|
||||
},
|
||||
});
|
||||
|
||||
//发起第二个 HTTP GET 请求,用于获取该日记的标题
|
||||
const response2 = await got({
|
||||
method: 'get',
|
||||
url: `https://faexport.spangle.org.uk/journal/${id}.json`,
|
||||
headers: {
|
||||
Referer: `https://faexport.spangle.org.uk/`,
|
||||
},
|
||||
});
|
||||
|
||||
const data = response.data;
|
||||
const data2 = response2.data;
|
||||
|
||||
ctx.state.data = {
|
||||
// 源标题
|
||||
title: `${data2.title} - Journal Comments`,
|
||||
// 源链接
|
||||
link: `https://www.furaffinity.net/journal/${id}/`,
|
||||
// 源说明
|
||||
description: `Fur Affinity ${data2.title} - Journal Comments`,
|
||||
|
||||
//遍历此前获取的数据
|
||||
item: data.map((item) => ({
|
||||
// 标题
|
||||
title: item.text,
|
||||
// 正文
|
||||
description: `<img src="${item.avatar}"> <br> ${item.name}: ${item.text}`,
|
||||
// 链接
|
||||
link: `https://www.furaffinity.net/journal/${id}/`,
|
||||
//作者
|
||||
author: item.name,
|
||||
//日期
|
||||
pubDate: new Date(item.posted_at).toUTCString(),
|
||||
})),
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,49 @@
|
||||
const got = require('@/utils/got');
|
||||
const cheerio = require('cheerio');
|
||||
|
||||
// 发起 HTTP GET 请求
|
||||
module.exports = async (ctx) => {
|
||||
//传入参数
|
||||
const username = String(ctx.params.username);
|
||||
|
||||
//添加参数username
|
||||
const response = await got({
|
||||
method: 'get',
|
||||
url: `https://faexport.spangle.org.uk/user/${username}/journals.rss`,
|
||||
headers: {
|
||||
Referer: `https://faexport.spangle.org.uk/`,
|
||||
},
|
||||
});
|
||||
|
||||
// 使用 cheerio 加载返回的 HTML
|
||||
const data = response.data;
|
||||
const $ = cheerio.load(data, {
|
||||
xmlMode: true
|
||||
});
|
||||
|
||||
const list = $('item');
|
||||
|
||||
ctx.state.data = {
|
||||
// 源标题
|
||||
title: `${username}'s Journals`,
|
||||
// 源链接
|
||||
link: `https://www.furaffinity.net/journals/${username}/`,
|
||||
// 源说明
|
||||
description: `Fur Affinity ${username}'s Journals`,
|
||||
|
||||
//遍历此前获取的数据
|
||||
item:
|
||||
list &&
|
||||
list.map((index, item) => {
|
||||
item = $(item);
|
||||
return {
|
||||
title: item.find("title").text(),
|
||||
description: item.find("description").text(),
|
||||
link: item.find("link").text(),
|
||||
pubDate: new Date(item.find("pubDate").text()).toUTCString(),
|
||||
author: username,
|
||||
};
|
||||
})
|
||||
.get(),
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,55 @@
|
||||
const got = require('@/utils/got');
|
||||
const cheerio = require('cheerio');
|
||||
|
||||
// 发起 HTTP GET 请求
|
||||
module.exports = async (ctx) => {
|
||||
// 传入参数
|
||||
const nsfw = String(ctx.params.nsfw);
|
||||
const username = String(ctx.params.username);
|
||||
|
||||
// 添加参数username以及判断传入的参数nsfw
|
||||
let url = `https://faexport.spangle.org.uk/user/${username}/scraps.rss?sfw=1`;
|
||||
if (nsfw === '1') {
|
||||
url = `https://faexport.spangle.org.uk/user/${username}/scraps.rss`;
|
||||
}
|
||||
|
||||
const response = await got({
|
||||
method: 'get',
|
||||
url: url,
|
||||
headers: {
|
||||
Referer: `https://faexport.spangle.org.uk/`,
|
||||
},
|
||||
});
|
||||
|
||||
// 使用 cheerio 加载返回的 HTML
|
||||
const data = response.data;
|
||||
const $ = cheerio.load(data, {
|
||||
xmlMode: true
|
||||
});
|
||||
|
||||
const list = $('item');
|
||||
|
||||
ctx.state.data = {
|
||||
// 源标题
|
||||
title: `${username}'s Scraps`,
|
||||
// 源链接
|
||||
link: `https://www.furaffinity.net/scraps/${username}/`,
|
||||
// 源说明
|
||||
description: `Fur Affinity ${username}'s Scraps`,
|
||||
|
||||
// 遍历此前获取的数据
|
||||
item:
|
||||
list &&
|
||||
list.map((index, item) => {
|
||||
item = $(item);
|
||||
return {
|
||||
title: item.find("title").text(),
|
||||
description: item.find("description").text(),
|
||||
link: item.find("link").text(),
|
||||
pubDate: new Date(item.find("pubDate").text()).toUTCString(),
|
||||
author: username,
|
||||
};
|
||||
})
|
||||
.get(),
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,55 @@
|
||||
const got = require('@/utils/got');
|
||||
const cheerio = require('cheerio');
|
||||
|
||||
// 发起 HTTP GET 请求
|
||||
module.exports = async (ctx) => {
|
||||
// 传入参数
|
||||
const nsfw = String(ctx.params.nsfw);
|
||||
const keyword = String(ctx.params.keyword);
|
||||
|
||||
// 添加参数keyword以及判断传入的参数nsfw
|
||||
let url = `https://faexport.spangle.org.uk/search.rss?q=${keyword}?sfw=1`;
|
||||
if (nsfw === '1' || keyword === '1') {
|
||||
url = `https://faexport.spangle.org.uk/search.rss?q=${keyword}`;
|
||||
}
|
||||
|
||||
const response = await got({
|
||||
method: 'get',
|
||||
url: url,
|
||||
headers: {
|
||||
Referer: `https://faexport.spangle.org.uk/`,
|
||||
},
|
||||
});
|
||||
|
||||
// 使用 cheerio 加载返回的 HTML
|
||||
const data = response.data;
|
||||
const $ = cheerio.load(data, {
|
||||
xmlMode: true
|
||||
});
|
||||
|
||||
const list = $('item');
|
||||
|
||||
ctx.state.data = {
|
||||
// 源标题
|
||||
title: `FA ${keyword}'s Search List`,
|
||||
// 源链接
|
||||
link: `https://www.furaffinity.net/search/?q=${keyword}`,
|
||||
// 源说明
|
||||
description: `Fur Affinity ${keyword}'s Search List`,
|
||||
|
||||
// 遍历此前获取的数据
|
||||
item:
|
||||
list &&
|
||||
list.map((index, item) => {
|
||||
item = $(item);
|
||||
return {
|
||||
title: item.find("title").text(),
|
||||
description: item.find("description").text(),
|
||||
link: item.find("link").text(),
|
||||
pubDate: new Date(item.find("pubDate").text()).toUTCString(),
|
||||
// 由于源API未提供作者信息,故无author
|
||||
};
|
||||
})
|
||||
.get(),
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,40 @@
|
||||
const got = require('@/utils/got');
|
||||
|
||||
// 发起 HTTP GET 请求
|
||||
module.exports = async (ctx) => {
|
||||
// 传入参数
|
||||
const username = String(ctx.params.username);
|
||||
|
||||
const response = await got({
|
||||
method: 'get',
|
||||
url: `https://faexport.spangle.org.uk/user/${username}/shouts.json`,
|
||||
headers: {
|
||||
Referer: `https://faexport.spangle.org.uk/`,
|
||||
},
|
||||
});
|
||||
|
||||
const data = response.data;
|
||||
|
||||
ctx.state.data = {
|
||||
// 源标题
|
||||
title: `${username}'s Shouts`,
|
||||
// 源链接
|
||||
link: `https://www.furaffinity.net/user/${username}/`,
|
||||
// 源说明
|
||||
description: `Fur Affinity ${username}'s Shouts`,
|
||||
|
||||
// 遍历此前获取的数据
|
||||
item: data.map((item) => ({
|
||||
// 标题
|
||||
title: item.text,
|
||||
// 正文
|
||||
description: `<img src="${item.avatar}"> <br> ${item.text} `,
|
||||
// 链接
|
||||
link: `https://www.furaffinity.net/user/${username}/`,
|
||||
// 作者
|
||||
author: item.name,
|
||||
// 日期
|
||||
pubDate: new Date(item.posted_at).toUTCString(),
|
||||
})),
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,41 @@
|
||||
const got = require('@/utils/got');
|
||||
|
||||
// 发起 HTTP GET 请求
|
||||
module.exports = async (ctx) => {
|
||||
const response = await got({
|
||||
method: 'get',
|
||||
url: `https://faexport.spangle.org.uk/status.json`,
|
||||
headers: {
|
||||
Referer: `https://faexport.spangle.org.uk/`,
|
||||
},
|
||||
});
|
||||
|
||||
const data = response.data;
|
||||
const status = data.online;
|
||||
|
||||
let description = '';
|
||||
if (Object.keys(data)[0] === "online") {
|
||||
description = `Status: ${Object.keys(data)[0]} <br> Guests: ${status.guests} <br>Registered: ${status.registered} <br> Other: ${status.other} <br>Total: ${status.total} <br> Fa Server Time: ${data.fa_server_time} <br> Fa Server Time at: ${data.fa_server_time_at} `;
|
||||
} else {
|
||||
description = "offline";
|
||||
}
|
||||
const item = [];
|
||||
item.push({
|
||||
title: `Status:${Object.keys(data)[0]}`,
|
||||
description,
|
||||
link: `https://www.furaffinity.net/`,
|
||||
});
|
||||
|
||||
|
||||
ctx.state.data = {
|
||||
// 源标题
|
||||
title: `Fur Affinity Status`,
|
||||
// 源链接
|
||||
link: `https://www.furaffinity.net/`,
|
||||
// 源说明
|
||||
description: `Fur Affinity Status`,
|
||||
|
||||
item: item,
|
||||
};
|
||||
|
||||
};
|
||||
@@ -0,0 +1,50 @@
|
||||
const got = require('@/utils/got');
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
//传入参数
|
||||
const id = String(ctx.params.id);
|
||||
|
||||
// 发起 HTTP GET 请求
|
||||
const response = await got({
|
||||
method: 'get',
|
||||
url: `https://faexport.spangle.org.uk/submission/${id}/comments.json`,
|
||||
headers: {
|
||||
Referer: `https://faexport.spangle.org.uk/`,
|
||||
},
|
||||
});
|
||||
|
||||
//发起第二个 HTTP GET 请求,用于获取该作品的标题
|
||||
const response2 = await got({
|
||||
method: 'get',
|
||||
url: `https://faexport.spangle.org.uk/submission/${id}.json`,
|
||||
headers: {
|
||||
Referer: `https://faexport.spangle.org.uk/`,
|
||||
},
|
||||
});
|
||||
|
||||
const data = response.data;
|
||||
const data2 = response2.data;
|
||||
|
||||
ctx.state.data = {
|
||||
// 源标题
|
||||
title: `${data2.title} - Submission Comments`,
|
||||
// 源链接
|
||||
link: `https://www.furaffinity.net/view/${id}/`,
|
||||
// 源说明
|
||||
description: `Fur Affinity ${data2.title} - Submission Comments`,
|
||||
|
||||
//遍历此前获取的数据
|
||||
item: data.map((item) => ({
|
||||
// 标题
|
||||
title: item.text,
|
||||
// 正文
|
||||
description: `<img src="${item.avatar}"> <br> ${item.name}: ${item.text}`,
|
||||
// 链接
|
||||
link: `https://www.furaffinity.net/view/${id}/`,
|
||||
//作者
|
||||
author: item.name,
|
||||
//日期
|
||||
pubDate: new Date(item.posted_at).toUTCString(),
|
||||
})),
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,102 @@
|
||||
const got = require('@/utils/got');
|
||||
|
||||
// 发起 HTTP GET 请求
|
||||
module.exports = async (ctx) => {
|
||||
// 传入参数
|
||||
const username = String(ctx.params.username);
|
||||
// 添加参数username
|
||||
const response = await got({
|
||||
method: 'get',
|
||||
url: `https://faexport.spangle.org.uk/user/${username}.json`,
|
||||
headers: {
|
||||
Referer: `https://faexport.spangle.org.uk/`,
|
||||
},
|
||||
});
|
||||
|
||||
const data = response.data;
|
||||
|
||||
// 收集传入的数据
|
||||
const id = data.id;
|
||||
const name = data.name;
|
||||
const profile = data.profile;
|
||||
const account_type = data.profile;
|
||||
const avatar = `<img src="${data.avatar}">`;
|
||||
const full_name = data.full_name;
|
||||
const artist_type = data.artist_type;
|
||||
const user_title = data.user_title;
|
||||
const registered_since = data.registered_since;
|
||||
const registered_at = data.registered_at;
|
||||
const current_mood = data.current_mood;
|
||||
const artist_profile = data.artist_profile;
|
||||
const pageviews = data.pageviews;
|
||||
const submissions = data.submissions;
|
||||
const comments_received = data.comments_received;
|
||||
const comments_given = data.comments_given;
|
||||
const journals = data.journals;
|
||||
const favorite = data.favorites;
|
||||
const watchers_count = data.watchers.count;
|
||||
const watching_count = data.watching.count;
|
||||
|
||||
const artist_information = data.artist_information;
|
||||
const species = artist_information.Species;
|
||||
const personal_quote = artist_information['Personal Quote'];
|
||||
const music_type_genre = artist_information['Music Type/Genre'];
|
||||
const favorites_movie = artist_information['Favorite Movie'];
|
||||
const favorites_game = artist_information['Favorite Game'];
|
||||
const favorites_game_platform = artist_information['Favorite Game Platform'];
|
||||
const favorites_artist = artist_information['Favorite Artist'];
|
||||
const favorites_animal = artist_information['Favorite Animal'];
|
||||
const favorites_website = artist_information['Favorite Website'];
|
||||
const favorites_food = artist_information['Favorite Food'];
|
||||
|
||||
const contact_information = data.contact_information;
|
||||
let contact_result = "null";
|
||||
|
||||
// 对一个或多个用户联系方式进行遍历
|
||||
if (contact_information !== "null") {
|
||||
contact_result = "";
|
||||
for (let i = 0; i < contact_information.length; i++) {
|
||||
for (const j in contact_information[i]) {
|
||||
if (j === "title") {
|
||||
contact_result += `Title: ${contact_information[i][j]} <br> `;
|
||||
}
|
||||
else if (j === "name") {
|
||||
contact_result += `Name: ${contact_information[i][j]} <br> `;
|
||||
}
|
||||
else if (j === "link") {
|
||||
contact_result += `Link: ${contact_information[i][j]} <br> `;
|
||||
}
|
||||
}
|
||||
contact_result += `<br> `;
|
||||
}
|
||||
}
|
||||
|
||||
const description = `Id: ${id} <br> Name: ${name} <br> Profile: ${profile} <br> Account Type: ${account_type} <br>
|
||||
Avatar: ${avatar} <br> Full Name: ${full_name} <br> Artist Type: ${artist_type} <br> User Title: ${user_title} <br>
|
||||
Registered Since: ${registered_since} <br> Registered at: ${registered_at} <br> Current Mood: ${current_mood} <br> <br> Artist Profile: <br> ${artist_profile} <br> <br>
|
||||
Pageviews: ${pageviews} <br> Submissions: ${submissions} <br> Comments_Received: ${comments_received} <br> Comments Given: ${comments_given} <br>
|
||||
Journals: ${journals} <br> Favorite: ${favorite} <br> <br> Artist Information: <br> Species: ${species} <br> Personal Quote: ${personal_quote} <br> Music Type/Genre: ${music_type_genre} <br>
|
||||
Favorite Movie: ${favorites_movie} <br> Favorite Game: ${favorites_game} <br> Favorite Game Platform: ${favorites_game_platform} <br> Favorite Artist: ${favorites_artist} <br>
|
||||
Favorite Animal: ${favorites_animal} <br> Favorite Website: ${favorites_website} <br> Favorite Food: ${favorites_food} <br> <br> Contact Information: <br> ${contact_result}
|
||||
Watchers Count: ${watchers_count} <br> Watching Count: ${watching_count} `;
|
||||
|
||||
const item = [];
|
||||
item.push({
|
||||
title: `${data.name}'s Current Profile`,
|
||||
description,
|
||||
link: `https://www.furaffinity.net/user/${username}/`,
|
||||
});
|
||||
|
||||
|
||||
ctx.state.data = {
|
||||
// 源标题
|
||||
title: `Userpage of ${data.name}`,
|
||||
// 源链接
|
||||
link: `https://www.furaffinity.net/`,
|
||||
// 源说明
|
||||
description: `Fur Affinity Userpage Profile of ${data.name}`,
|
||||
|
||||
item: item,
|
||||
};
|
||||
|
||||
};
|
||||
@@ -0,0 +1,48 @@
|
||||
const got = require('@/utils/got');
|
||||
|
||||
// 发起 HTTP GET 请求
|
||||
module.exports = async (ctx) => {
|
||||
// 传入参数
|
||||
const username = String(ctx.params.username);
|
||||
|
||||
// 添加参数username
|
||||
const response = await got({
|
||||
method: 'get',
|
||||
url: `https://faexport.spangle.org.uk/user/${username}/watchers.json`,
|
||||
headers: {
|
||||
Referer: `https://faexport.spangle.org.uk/`,
|
||||
},
|
||||
});
|
||||
|
||||
// 发起第二个HTTP GET请求,用于获取该用户被关注总数
|
||||
const response2 = await got({
|
||||
method: 'get',
|
||||
url: `https://faexport.spangle.org.uk/user/${username}.json`,
|
||||
headers: {
|
||||
Referer: `https://faexport.spangle.org.uk/`,
|
||||
},
|
||||
});
|
||||
|
||||
const data = response.data;
|
||||
const data2 = response2.data;
|
||||
|
||||
ctx.state.data = {
|
||||
// 源标题
|
||||
title: `${username}'s Watcher List`,
|
||||
// 源链接
|
||||
link: `https://www.furaffinity.net/watchlist/to/${username}/`,
|
||||
// 源说明
|
||||
description: `Fur Affinity ${username}'s Watcher List`,
|
||||
|
||||
// 遍历此前获取的数据
|
||||
item: data.map((item) => ({
|
||||
// 标题
|
||||
title: item,
|
||||
// 正文
|
||||
description: `${username} was watched by ${item} <br> Totall: ${data2.watchers.count} `,
|
||||
// 链接
|
||||
link: `https://www.furaffinity.net/user/${item}/`,
|
||||
// 由于源API未提供日期,故无pubDate
|
||||
})),
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,48 @@
|
||||
const got = require('@/utils/got');
|
||||
|
||||
// 发起 HTTP GET 请求
|
||||
module.exports = async (ctx) => {
|
||||
// 传入参数
|
||||
const username = String(ctx.params.username);
|
||||
|
||||
// 添加参数username
|
||||
const response = await got({
|
||||
method: 'get',
|
||||
url: `https://faexport.spangle.org.uk/user/${username}/watching.json`,
|
||||
headers: {
|
||||
Referer: `https://faexport.spangle.org.uk/`,
|
||||
},
|
||||
});
|
||||
|
||||
// 发起第二个HTTP GET请求,用于获取该用户关注总数
|
||||
const response2 = await got({
|
||||
method: 'get',
|
||||
url: `https://faexport.spangle.org.uk/user/${username}.json`,
|
||||
headers: {
|
||||
Referer: `https://faexport.spangle.org.uk/`,
|
||||
},
|
||||
});
|
||||
|
||||
const data = response.data;
|
||||
const data2 = response2.data;
|
||||
|
||||
ctx.state.data = {
|
||||
// 源标题
|
||||
title: `${username}'s Watching List`,
|
||||
// 源链接
|
||||
link: `https://www.furaffinity.net/watchlist/by/${username}/`,
|
||||
// 源说明
|
||||
description: `Fur Affinity ${username}}'s Search List`,
|
||||
|
||||
// 遍历此前获取的数据
|
||||
item: data.map((item) => ({
|
||||
// 标题
|
||||
title: item,
|
||||
// 正文
|
||||
description: `${username} watched ${item} <br> Totall: ${data2.watching.count}`,
|
||||
// 链接
|
||||
link: `https://www.furaffinity.net/user/${item}/`,
|
||||
// 由于源API未提供日期,故无pubDate
|
||||
})),
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user