const got = require('@/utils/got'); const cheerio = require('cheerio'); const { parseDate } = require('@/utils/parse-date'); const { art } = require('@/utils/render'); const path = require('path'); 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(resourceUrl); const $ = cheerio.load(data); const list = $('.tgme_widget_message_wrap'); if (list.length === 0 && $('.tgme_channel_history').length === 0) { throw `Unable to fetch message feed from this channel. Please check this URL to see if you can view the message preview: https://t.me/s/${username}`; } const feedTitle = searchQuery ? `「${searchQuery}」- ` + $('.tgme_channel_info_header_title').text() + ' - Telegram 频道' : $('.tgme_channel_info_header_title').text() + ' - Telegram 频道'; ctx.state.data = { title: feedTitle, description: $('.tgme_channel_info_description').text(), link: resourceUrl, allowEmpty: true, itunes_author: $('.tgme_channel_info_header_title').text(), image: $('.tgme_page_photo_image > img').attr('src'), item: list && list .map((index, item) => { item = $(item); /* media tag */ const mediaTag = () => { let mediaTag = ''; if (item.find('.tgme_widget_message_photo').length > 0) { mediaTag += '🖼'; } if (item.find('.tgme_widget_message_video').length > 0) { mediaTag += '📹'; } if (item.find('.tgme_widget_message_poll').length > 0) { mediaTag += '📊'; } if (item.find('.tgme_widget_message_voice').length > 0) { mediaTag += '🎤'; } if (item.find('.tgme_widget_message_document').length > 0) { mediaTag += '📎'; } if (item.find('.tgme_widget_message_location').length > 0) { mediaTag += '📍'; } if (item.find('.tgme_widget_message_sticker').length > 0) { mediaTag += '[Sticker]'; } return mediaTag; }; /* "Forwarded From" tag */ const fwdFrom = () => { const fwdFromNameObject = item.find('.tgme_widget_message_forwarded_from_name'); if (fwdFromNameObject.length) { if (fwdFromNameObject.attr('href') !== undefined) { return `
Forwarded From ${fwdFromNameObject.text()}
`; } else { return `Forwarded From ${fwdFromNameObject.text()}
`; } } else { return ''; } }; /* reply */ const replyContent = () => { if (item.find('.tgme_widget_message_reply').length !== 0) { const replyObject = item.find('.tgme_widget_message_reply'); 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()}
` : ''; if (replyLink !== '') { return `${replyMetatext} ${replyText}`; } else { return `
`; } } else { return ''; } }; /* images */ const generateImg = (selector) => { let tag_images = ''; if (item.find(selector).length) { item.find(selector).each(function () { tag_images += `${replyAuthor}:
${replyMetatext} ${replyText}
${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}`; } else { return ''; } }; /* poll */ const pollQuestion = item.find('.tgme_widget_message_poll_question').length ? item.find('.tgme_widget_message_poll_question').text() : ''; /* attachment */ const attachmentTitle = item.find('.tgme_widget_message_document_title').length ? item.find('.tgme_widget_message_document_title').text() + ' / ' + item.find('.tgme_widget_message_document_extra').text() : ''; /* pubDate */ const pubDate = parseDate(item.find('.tgme_widget_message_date time').attr('datetime')); /* message text & title */ const messageTextObject = item.find('.tgme_widget_message_bubble > .tgme_widget_message_text'); let messageText = '', messageTitle = ''; if (messageTextObject.length > 0) { messageText = `
${messageTextObject.html()}
`; } if (pollQuestion !== '') { messageTitle = pollQuestion; } else if (attachmentTitle !== '') { messageTitle = attachmentTitle; } else if (messageTextObject.length > 0) { messageTitle = messageTextObject.text(); } else { messageTitle = pubDate; } return { title: mediaTag() + messageTitle, description: fwdFrom() + replyContent() + messageAudioText + messageText + linkPreview() + messageImgs + messageVideos(), pubDate, link: item.find('.tgme_widget_message_date').attr('href'), author: item.find('.tgme_widget_message_from_author').text(), enclosure_url: messageAudioUrl, enclosure_length: messageAudioDuration(), enclosure_type: 'audio/ogg', }; }) .get() .reverse(), }; };