rss: add douyin user

This commit is contained in:
DIYgod
2018-09-04 18:33:32 +08:00
parent a55bc19b02
commit 63cb0ea837
10 changed files with 181 additions and 7 deletions

3
.gitignore vendored
View File

@@ -7,8 +7,7 @@ package-lock.json
.idea .idea
.DS_Store .DS_Store
docs/.vuepress/dist docs/.vuepress/dist
config/app.json config/app.json
config/config.js config/config.js
yarn-error.log yarn-error.log
tmp

View File

@@ -1,3 +1,4 @@
package.json package.json
docs/.vuepress/dist docs/.vuepress/dist
package-lock.json package-lock.json
routes/douyin/fuck-byted-acrawler.js

0
cache/.gitkeep vendored
View File

View File

@@ -2674,3 +2674,15 @@ GitHub 官方也提供了一些 RSS:
举例: <https://rsshub.app/xkcd/what-if> 举例: <https://rsshub.app/xkcd/what-if>
路由: `/xkcd/what-if` 路由: `/xkcd/what-if`
## 抖音
### 用户动态 <Author uid="DIYgod"/>
举例: <https://rsshub.app/douyin/user/93610979153>
路由: `/douyin/user/:id`
参数:
- id, 用户 id, 可在 分享出去获得的用户主页 URL 中找到

View File

@@ -62,6 +62,7 @@
"luxon": "^1.3.3", "luxon": "^1.3.3",
"markdown-it": "^8.4.2", "markdown-it": "^8.4.2",
"path-to-regexp": "2.4.0", "path-to-regexp": "2.4.0",
"puppeteer": "^1.7.0",
"raven": "^2.6.3", "raven": "^2.6.3",
"readall": "1.0.0", "readall": "1.0.0",
"redis": "2.8.0", "redis": "2.8.0",

View File

@@ -525,4 +525,7 @@ router.get('/xkcd/what-if', require('./routes/xkcd/what-if'));
// Minecraft CurseForge // Minecraft CurseForge
router.get('/curseforge/files/:project', require('./routes/curseforge/files')); router.get('/curseforge/files/:project', require('./routes/curseforge/files'));
// 抖音
router.get('/douyin/user/:id', require('./routes/douyin/user'));
module.exports = router; module.exports = router;

65
routes/douyin/user.js Normal file
View File

@@ -0,0 +1,65 @@
const cheerio = require('cheerio');
module.exports = async (ctx) => {
const id = ctx.params.id;
const getPage = await require('../../utils/puppeteer');
const page = await getPage();
const timerPromise = new Promise((resolve) => setTimeout(resolve, 1000));
await timerPromise;
const data = await new Promise((resolve) => {
const result = {
name: null,
description: null,
list: null,
};
page.goto(`https://www.douyin.com/share/user/${id}`);
page.on('response', (response) => {
const req = response.request();
if (req.url().match(`www.douyin.com/share/user/${id}`)) {
response.text().then((text) => {
const $ = cheerio.load(text);
result.name = $('.nickname').text();
result.description = $('.signature').text();
if (result.list) {
resolve(result);
}
});
} else if (req.url().match('www.douyin.com/aweme/v1/aweme/post')) {
response.json().then((data) => {
result.list = data;
if (result.name) {
resolve(result);
}
});
}
});
});
ctx.state.data = {
title: `${data.name}的抖音`,
link: `https://www.douyin.com/share/user/${id}`,
description: data.description,
item:
data.list &&
data.list.aweme_list.map((item) => ({
title: item.share_info.share_desc,
description: `
<p>${item.share_info.share_desc}</p>
<p><a href="https://www.amemv.com/redirect/?redirect_url=aweme%3A%2F%2Faweme%2Fdetail%2F${item.aweme_id}%3Frefer%3Dweb%26gd_label%3Dclick_wap_profile_feature%26appParam%3D%26needlaunchlog%3D1">APP 内打开</a></p>
<p>
<video
controls="controls"
width="${item.video.width}"
height="${item.video.height}"
poster="${item.video.cover.url_list[0]}"
src="${item.video.play_addr.url_list[0]}"
>
</p>`,
link: item.video.play_addr.url_list[0],
})),
};
};

View File

@@ -39,7 +39,7 @@ module.exports = async (ctx) => {
responseType: 'arraybuffer', responseType: 'arraybuffer',
}); });
const filePath = `cache/${item.file_id}.png`; const filePath = `tmp/${item.file_id}.png`;
await sharp(fileResponse.data) await sharp(fileResponse.data)
.png() .png()

26
utils/puppeteer.js Normal file
View File

@@ -0,0 +1,26 @@
const puppeteer = require('puppeteer');
const logger = require('./logger');
const config = require('../config');
const options = {
args: ['--no-sandbox', '--disable-setuid-sandbox', '--disable-infobars', '--window-position=0,0', '--ignore-certifcate-errors', '--ignore-certifcate-errors-spki-list', `--user-agent=${config.ua}`],
headless: true,
ignoreHTTPSErrors: true,
userDataDir: './tmp',
};
module.exports = (async () => {
const browser = await puppeteer.launch(options);
logger.info('Puppeteer launched.');
return async () => {
const page = await browser.newPage();
// 防止 page 未正确关闭,一分钟后自行关闭
setTimeout(() => {
page.close();
}, 60000);
return page;
};
})();

View File

@@ -877,6 +877,12 @@ acorn@^5.6.0:
version "5.7.1" version "5.7.1"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.1.tgz#f095829297706a7c9776958c0afc8930a9b9d9d8" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.1.tgz#f095829297706a7c9776958c0afc8930a9b9d9d8"
agent-base@^4.1.0:
version "4.2.1"
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9"
dependencies:
es6-promisify "^5.0.0"
agentkeepalive@^2.2.0: agentkeepalive@^2.2.0:
version "2.2.0" version "2.2.0"
resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-2.2.0.tgz#c5d1bd4b129008f1163f236f86e5faea2026e2ef" resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-2.2.0.tgz#c5d1bd4b129008f1163f236f86e5faea2026e2ef"
@@ -1872,7 +1878,7 @@ concat-map@0.0.1:
version "0.0.1" version "0.0.1"
resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
concat-stream@^1.5.0: concat-stream@1.6.2, concat-stream@^1.5.0:
version "1.6.2" version "1.6.2"
resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
dependencies: dependencies:
@@ -2242,7 +2248,7 @@ debug@0.7.4:
version "0.7.4" version "0.7.4"
resolved "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39" resolved "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39"
debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.1, debug@^2.6.3, debug@^2.6.8: debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.1, debug@^2.6.3, debug@^2.6.8:
version "2.6.9" version "2.6.9"
resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
dependencies: dependencies:
@@ -2629,7 +2635,7 @@ es6-promise@^3.2.1:
version "3.3.1" version "3.3.1"
resolved "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" resolved "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613"
es6-promise@^4.1.0: es6-promise@^4.0.3, es6-promise@^4.1.0:
version "4.2.4" version "4.2.4"
resolved "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz#dc4221c2b16518760bd8c39a52d8f356fc00ed29" resolved "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz#dc4221c2b16518760bd8c39a52d8f356fc00ed29"
@@ -2639,6 +2645,12 @@ es6-promisify@^4.1.0:
dependencies: dependencies:
es6-promise "^3.2.1" es6-promise "^3.2.1"
es6-promisify@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203"
dependencies:
es6-promise "^4.0.3"
es6-symbol@^3.1.1, es6-symbol@~3.1.1: es6-symbol@^3.1.1, es6-symbol@~3.1.1:
version "3.1.1" version "3.1.1"
resolved "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" resolved "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77"
@@ -2933,6 +2945,15 @@ extglob@^2.0.4:
snapdragon "^0.8.1" snapdragon "^0.8.1"
to-regex "^3.0.1" to-regex "^3.0.1"
extract-zip@^1.6.6:
version "1.6.7"
resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.7.tgz#a840b4b8af6403264c8db57f4f1a74333ef81fe9"
dependencies:
concat-stream "1.6.2"
debug "2.6.9"
mkdirp "0.5.1"
yauzl "2.4.1"
extsprintf@1.3.0: extsprintf@1.3.0:
version "1.3.0" version "1.3.0"
resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
@@ -2980,6 +3001,12 @@ fastparse@^1.1.1:
version "1.1.1" version "1.1.1"
resolved "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" resolved "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8"
fd-slicer@~1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65"
dependencies:
pend "~1.2.0"
fecha@^2.3.3: fecha@^2.3.3:
version "2.3.3" version "2.3.3"
resolved "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz#948e74157df1a32fd1b12c3a3c3cdcb6ec9d96cd" resolved "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz#948e74157df1a32fd1b12c3a3c3cdcb6ec9d96cd"
@@ -3625,6 +3652,13 @@ https-browserify@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" resolved "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
https-proxy-agent@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0"
dependencies:
agent-base "^4.1.0"
debug "^3.1.0"
iconv-lite@0.4.24: iconv-lite@0.4.24:
version "0.4.24" version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
@@ -4989,7 +5023,7 @@ mkdirp@0.3.0:
version "0.3.0" version "0.3.0"
resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e" resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e"
mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1:
version "0.5.1" version "0.5.1"
resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
dependencies: dependencies:
@@ -5582,6 +5616,10 @@ pbkdf2@^3.0.3:
safe-buffer "^5.0.1" safe-buffer "^5.0.1"
sha.js "^2.4.8" sha.js "^2.4.8"
pend@~1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
performance-now@^2.1.0: performance-now@^2.1.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
@@ -6019,6 +6057,10 @@ promise-inflight@^1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
proxy-from-env@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee"
prr@~1.0.1: prr@~1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" resolved "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
@@ -6087,6 +6129,19 @@ punycode@^1.2.4, punycode@^1.4.1:
version "1.4.1" version "1.4.1"
resolved "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" resolved "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
puppeteer@^1.7.0:
version "1.7.0"
resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-1.7.0.tgz#edcba2300a50847202c0f19fd15e7a96171ff3bd"
dependencies:
debug "^3.1.0"
extract-zip "^1.6.6"
https-proxy-agent "^2.2.1"
mime "^2.0.3"
progress "^2.0.0"
proxy-from-env "^1.0.0"
rimraf "^2.6.1"
ws "^5.1.1"
q@^1.0.1, q@^1.1.2: q@^1.0.1, q@^1.1.2:
version "1.5.1" version "1.5.1"
resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
@@ -8010,6 +8065,12 @@ ws@^4.0.0:
async-limiter "~1.0.0" async-limiter "~1.0.0"
safe-buffer "~5.1.0" safe-buffer "~5.1.0"
ws@^5.1.1:
version "5.2.2"
resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f"
dependencies:
async-limiter "~1.0.0"
xdg-basedir@^3.0.0: xdg-basedir@^3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" resolved "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4"
@@ -8047,6 +8108,12 @@ yargs-parser@^10.0.0:
dependencies: dependencies:
camelcase "^4.1.0" camelcase "^4.1.0"
yauzl@2.4.1:
version "2.4.1"
resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005"
dependencies:
fd-slicer "~1.0.1"
ylru@^1.2.0: ylru@^1.2.0:
version "1.2.1" version "1.2.1"
resolved "https://registry.yarnpkg.com/ylru/-/ylru-1.2.1.tgz#f576b63341547989c1de7ba288760923b27fe84f" resolved "https://registry.yarnpkg.com/ylru/-/ylru-1.2.1.tgz#f576b63341547989c1de7ba288760923b27fe84f"