diff --git a/src/config/index.mjs b/src/config/index.mjs index 4dbf384..9fa38d5 100644 --- a/src/config/index.mjs +++ b/src/config/index.mjs @@ -127,6 +127,8 @@ export const defaultConfig = { 'youtube', 'zhihu', 'stackoverflow', + 'juejin', + 'mp.weixin.qq', ], accessToken: '', tokenSavedOn: 0, @@ -166,6 +168,8 @@ export const defaultConfig = { 'youtube', 'zhihu', 'stackoverflow', + 'juejin', + 'mp.weixin.qq', ], } diff --git a/src/content-script/site-adapters/index.mjs b/src/content-script/site-adapters/index.mjs index 7df43a4..acf0a98 100644 --- a/src/content-script/site-adapters/index.mjs +++ b/src/content-script/site-adapters/index.mjs @@ -7,6 +7,8 @@ import zhihu from './zhihu' import reddit from './reddit' import quora from './quora' import stackoverflow from './stackoverflow' +import juejin from './juejin' +import weixin from './weixin' /** * @typedef {object} SiteConfigAction @@ -171,4 +173,16 @@ export const config = { appendContainerQuery: [], resultsContainerQuery: ['#sidebar'], }, + juejin: { + inputQuery: juejin.inputQuery, + sidebarContainerQuery: ['div.sidebar'], + appendContainerQuery: [], + resultsContainerQuery: ['div.main-area.article-area > article > div.article-content'], + }, + 'mp.weixin.qq': { + inputQuery: weixin.inputQuery, + sidebarContainerQuery: [], + appendContainerQuery: [], + resultsContainerQuery: ['#js_content'], + }, } diff --git a/src/content-script/site-adapters/juejin/index.mjs b/src/content-script/site-adapters/juejin/index.mjs new file mode 100644 index 0000000..37eb094 --- /dev/null +++ b/src/content-script/site-adapters/juejin/index.mjs @@ -0,0 +1,37 @@ +import { cropText } from '../../../utils' + +export default { + inputQuery: async () => { + try { + const title = document.querySelector( + '#juejin > div.view-container > main > div > div.main-area.article-area > article > h1', + )?.textContent + const description = document.querySelector( + '#juejin > div.view-container > main > div > div.main-area.article-area > article > div.article-content', + )?.textContent + if (title && description) { + const author = document.querySelector( + '#juejin > div.view-container > main > div > div.main-area.article-area > article > div.author-info-block > div > div.author-name > a > span.name', + )?.textContent + const comments = document.querySelectorAll( + 'div.content-box > div.comment-main > div.content', + ) + let comment = '' + for (let i = 1; i <= comments.length && i <= 4; i++) { + comment += `answer${i}: ${comment[i - 1].textContent}|` + } + return cropText( + `以下是一篇文章,标题是:"${title}",作者是:"${author}",内容是:\n"${description}".各个评论如下:\n${comment}.请以如下格式输出你的回答: + {文章摘要和文章作者} + ====== + {文章总结和对文章的看法} + ====== + {对评论的总结} + `, + ) + } + } catch (e) { + console.log(e) + } + }, +} diff --git a/src/content-script/site-adapters/weixin/index.mjs b/src/content-script/site-adapters/weixin/index.mjs new file mode 100644 index 0000000..2b99aa5 --- /dev/null +++ b/src/content-script/site-adapters/weixin/index.mjs @@ -0,0 +1,25 @@ +import { cropText } from '../../../utils' + +export default { + inputQuery: async () => { + try { + const title = document.querySelector('#activity-name')?.textContent + const description = document.querySelector('#js_content')?.textContent + if (title && description) { + const author = document.querySelector('#js_name')?.textContent + + return cropText( + `以下是一篇文章,标题是:"${title}",文章来源是:"${author}公众号",内容是:\n"${description}".请以如下格式输出你的回答: + {文章来源和文章摘要} + ====== + {文章总结} + ====== + {对文章的看法} + `, + ) + } + } catch (e) { + console.log(e) + } + }, +}