From 7efb4d88a0dfb04f1fffe100e21e8bef3625fc3e Mon Sep 17 00:00:00 2001 From: notofoe <43095406+notofoe@users.noreply.github.com> Date: Tue, 7 Jul 2020 17:42:18 +0800 Subject: [PATCH] feat: tg-chan search, trivial dom/format (#5127) --- docs/en/social-media.md | 2 +- docs/social-media.md | 4 ++-- lib/router.js | 2 +- lib/routes/telegram/channel.js | 26 +++++++++++++++----------- 4 files changed, 19 insertions(+), 15 deletions(-) diff --git a/docs/en/social-media.md b/docs/en/social-media.md index e7b19d08d7..4968256734 100644 --- a/docs/en/social-media.md +++ b/docs/en/social-media.md @@ -92,7 +92,7 @@ Only for self-hosted ### Channel - + ::: tip diff --git a/docs/social-media.md b/docs/social-media.md index 6f12ffec53..640ebe4a4a 100644 --- a/docs/social-media.md +++ b/docs/social-media.md @@ -384,13 +384,13 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性 ### 瞬间更新 - + ## Telegram ### 频道 - + ::: tip 提示 diff --git a/lib/router.js b/lib/router.js index 3cbd837073..ebea80ff2a 100644 --- a/lib/router.js +++ b/lib/router.js @@ -262,7 +262,7 @@ router.get('/v2ex/post/:postid', require('./routes/v2ex/post')); router.get('/v2ex/tab/:tabid', require('./routes/v2ex/tab')); // Telegram -router.get('/telegram/channel/:username', require('./routes/telegram/channel')); +router.get('/telegram/channel/:username/:searchQuery?', require('./routes/telegram/channel')); router.get('/telegram/stickerpack/:name', require('./routes/telegram/stickerpack')); router.get('/telegram/blog', require('./routes/telegram/blog')); diff --git a/lib/routes/telegram/channel.js b/lib/routes/telegram/channel.js index c47ed50e8e..375acf8ab8 100644 --- a/lib/routes/telegram/channel.js +++ b/lib/routes/telegram/channel.js @@ -3,15 +3,19 @@ const cheerio = require('cheerio'); module.exports = async (ctx) => { const username = ctx.params.username; + const searchQuery = ctx.params.searchQuery; + const resourceUrl = searchQuery ? `https://t.me/s/${username}?q=${encodeURIComponent(searchQuery)}` : `https://t.me/s/${username}`; - const { data } = await got.get(`https://t.me/s/${username}`); + const { data } = await got.get(resourceUrl); const $ = cheerio.load(data); const list = $('.tgme_widget_message_wrap'); + const feedTitle = searchQuery ? `「${searchQuery}」- ` + $('.tgme_channel_info_header_title').text() + ' - Telegram 频道' : $('.tgme_channel_info_header_title').text() + ' - Telegram 频道'; + ctx.state.data = { - title: $('.tgme_channel_info_header_title').text() + ' - Telegram 频道', + title: feedTitle, description: $('.tgme_channel_info_description').text(), - link: `https://t.me/s/${username}`, + link: resourceUrl, item: list && list @@ -65,20 +69,20 @@ module.exports = async (ctx) => { const replyAuthor = replyObject.find('.tgme_widget_message_author_name').length ? replyObject.find('.tgme_widget_message_author_name').text() : ''; const replyLink = replyObject.attr('href').length ? replyObject.attr('href') : ''; - const replyMetatext = replyObject.find('.tgme_widget_message_metatext').length ? replyObject.find('tgme_widget_message_metatext').html() : ''; - const replyText = replyObject.find('.tgme_widget_message_text').length ? replyObject.find('.tgme_widget_message_text').html() : ''; + const replyMetatext = replyObject.find('.tgme_widget_message_metatext').length ? `

${replyObject.find('.tgme_widget_message_metatext').html()}

` : ''; + const replyText = replyObject.find('.tgme_widget_message_text').length ? `

${replyObject.find('.tgme_widget_message_text').html()}

` : ''; if (replyLink !== '') { return `

${replyAuthor}:

-

${replyMetatext}

-

${replyText}

+ ${replyMetatext} + ${replyText}
`; } else { return `

${replyAuthor}:

-

${replyMetatext}

-

${replyText}

+ ${replyMetatext} + ${replyText}
`; } } else { @@ -134,11 +138,11 @@ module.exports = async (ctx) => { } else { linkPreviewTitle = ''; } - const linkPreviewDescription = item.find('.link_preview_description').length ? item.find('.link_preview_description').html() : ''; + const linkPreviewDescription = item.find('.link_preview_description').length ? `

${item.find('.link_preview_description').html()}

` : ''; const linkPreviewImage = generateImg('.link_preview_image') + generateImg('.link_preview_right_image'); if (linkPreviewSite.length > 0 || linkPreviewTitle.length > 0 || linkPreviewDescription.length > 0 || linkPreviewImage.length > 0) { - return `
${linkPreviewSite}${linkPreviewTitle}

${linkPreviewDescription}

${linkPreviewImage}
`; + return `
${linkPreviewSite}${linkPreviewTitle}${linkPreviewDescription}${linkPreviewImage}
`; } else { return ''; }