From 16f14998ed52fc8dc3064929aa644c8bc91d642e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=87=89=E5=87=89?= Date: Mon, 11 Mar 2019 10:52:08 +0800 Subject: [PATCH] Add: douyin like (#1710) - Closes #1694 --- docs/README.md | 2 ++ lib/router.js | 1 + lib/routes/douyin/like.js | 71 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 74 insertions(+) create mode 100644 lib/routes/douyin/like.js diff --git a/docs/README.md b/docs/README.md index 8b47eac449..d71fe3bb80 100755 --- a/docs/README.md +++ b/docs/README.md @@ -590,6 +590,8 @@ RSSHub 提供下列 API 接口: + + ### 美拍 diff --git a/lib/router.js b/lib/router.js index 9859314778..446f8c350a 100755 --- a/lib/router.js +++ b/lib/router.js @@ -727,6 +727,7 @@ router.get('/curseforge/files/:project', require('./routes/curseforge/files')); // 抖音 router.get('/douyin/user/:id', require('./routes/douyin/user')); +router.get('/douyin/like/:id', require('./routes/douyin/like')); // 少数派 sspai router.get('/sspai/series', require('./routes/sspai/series')); diff --git a/lib/routes/douyin/like.js b/lib/routes/douyin/like.js new file mode 100644 index 0000000000..7ba09cd43a --- /dev/null +++ b/lib/routes/douyin/like.js @@ -0,0 +1,71 @@ +const cheerio = require('cheerio'); + +module.exports = async (ctx) => { + const id = ctx.params.id; + const browser = await require('../../utils/puppeteer')(); + const page = await browser.newPage(); + + 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}`) + .then(() => { + page.click('.like-tab').catch(() => {}); + }) + .catch(() => {}); + + 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); + browser.close(); + } + }); + } else if (req.url().match('www.douyin.com/aweme/v1/aweme/favorite')) { + response.json().then((data) => { + result.list = data; + if (result.name) { + resolve(result); + browser.close(); + } + }); + } + }); + }); + + 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: ` +

${item.share_info.share_desc}

+

APP 内打开

+

+

`, + link: item.video.play_addr.url_list[0], + })), + }; +};