Repository Analysis

DIYgod/RSSHub

🧡 Everything is RSSible

1.0 Likely human-written View on GitHub
1.0
Adjusted Score
1.0
Raw Score
100%
Time Factor
2026-05-30
Last Push
44,361
Stars
TypeScript
Language
459,610
Lines of Code
6427
Files
103
Pattern Hits
2026-05-31
Scan Date

Score History

Severity Breakdown

CRITICAL 40HIGH 0MEDIUM 2LOW 61

Pattern Findings

103 matches across 7 categories. Click a row to expand file-level details.

Hallucination Indicators40 hits · 400 pts
SeverityFileLineSnippet
CRITICALlib/routes-deprecated/hackerone/search.js33 item: response.data.data.hacktivity_items.edges.map((item) => {
CRITICALlib/routes-deprecated/missevan/drama.js10 dramaResp.data.info.episodes.episode.map((item) =>
CRITICALlib/routes-deprecated/itslaw/judgements.js15 const items = response.data.data.searchResult.judgements.map((item) => {
CRITICALlib/routes-deprecated/touhougarakuta/index.js31 item: response.data.result.pageContext.articles.map((article, i) => {
CRITICALlib/routes/konghq/blog-posts.ts44 const posts = nextData.props.pageProps.cardsPaged.cards.map((item) => {
CRITICALlib/routes/civitai/user.ts59 const list = article.result.data.json.items.map((item) => ({
CRITICALlib/routes/thepaper/utils.tsx81 ChannelIdToName: (nodeId, next_data) => next_data.props.appProps.menu.channelList.find((c) => c.nodeId.toString() ==
CRITICALlib/routes/thepaper/utils.tsx82 ListIdToName: (listId, next_data) => next_data.props.appProps.menu.channelList.flatMap((c) => c.childNodeList || [])
CRITICALlib/routes/vice/topic.tsx56 const list = nextData.props.pageProps.listPageData.articles.map((item) => ({
CRITICALlib/routes/futunn/video.ts37 const items = response.data.data.videoList.list.map((item) => ({
CRITICALlib/routes/futunn/live.ts67 const items = response.data.data.data.news.map((item) => {
CRITICALlib/routes/deltaio/blog.ts45 const items = data.result.data.allMdx.edges.map(({ node }) => ({
CRITICALlib/routes/bilibili/mall-new.ts44 const type = response.data.data.vo.cateTabs.find((item) => item.cateType === response.data.data.vo.currentCateType).
CRITICALlib/routes/odaily/activity.ts43 let items = response.data.data.items.data.map((item) => ({
CRITICALlib/routes/odaily/user.ts46 let items = response.data.data.items.data.map((item) => ({
CRITICALlib/routes/sustainabilitymag/articles.ts117 const list = results.data.paginatedWidget.articles.results.map((item) => ({
CRITICALlib/routes/youtube/community.tsx61 (tab) => tab.tabRenderer.endpoint.commandMetadata.webCommandMetadata.url.endsWith('/posts') || tab.tabRenderer.e
CRITICALlib/routes/scmp/topic.ts67 const list = apiResponse.data.node.contents.edges.map(({ node }) => ({
CRITICALlib/routes/taptap/common/review.ts77 description: review.moment.review.contents.text + (review.moment.review.contents.images ? review.moment.revi
CRITICALlib/routes/gocn/news.ts27 const items = response.data.data.articlePageList.list.map((item) => ({
CRITICALlib/routes/guancha/member.ts65 items = response.data.data.courses.data.map((item) => {
CRITICALlib/routes/github/star.ts65 const data = response.data.data.repository.stargazers.edges.toReversed();
CRITICALlib/routes/github/discussions.ts113 const categoryItem = response.data.data.repository.discussionCategories.nodes.find((item) => item.name === categ
CRITICALlib/routes/github/discussions.ts147 const data = response.data.data.repository.discussions.nodes.filter((item) => (closed === null ? item : item.closed
CRITICALlib/routes/xiaoyuzhou/podcast.ts73 let episodes = page_data.props.pageProps.podcast.episodes.map((item) => ({
CRITICALlib/routes/wired/tag.ts83 item.category = [...new Set([...item.category, ...preloadedState.transformed.article.tagCloud.tags.map((
CRITICALlib/routes/rattibha/user.tsx60 title: item.thread.t.info.text.split('\n')[0],
CRITICALlib/routes/rattibha/user.tsx80 {raw(item.thread.t.info.text.replaceAll('\n', '<br>'))}
CRITICALlib/routes/houxu/index.tsx45 <p>{raw(item.object.last.link.description.replaceAll('\r\n', '<br>'))}</p>
CRITICALlib/routes/theverge/index.ts61 return b.images.map((i) => `<figure><img src="${i.image.thumbnails.horizontal.url.split('?')[0]}" alt="${i.a
CRITICALlib/routes/theverge/index.ts81 return `<figure><img src="${b.leftImage.thumbnails.horizontal.url.split('?')[0]}" alt="${b.leftImage.alt}" /
CRITICALlib/routes/theverge/index.ts88 return `<div><figure><img src="${product.image.thumbnails.horizontal.url.split('?')[0]}" alt="${product.imag
CRITICALlib/routes/theverge/index.ts110 const node = nextData.props.pageProps.hydration.responses.find((x) => x.operationName === 'PostLayoutQue
CRITICALlib/routes/nikkei/asia/index.ts39 const list = response.data.data.getLatestHeadlines.items.map((item) => ({ ...item, link: new URL(item.path, 'https:/
CRITICALlib/routes/zcool/top.ts50 const list = data.props.pageProps.listResult.data.map((item) => ({
CRITICALlib/routes/zcool/user.ts84 image: data.props.pageProps.userInfo.avatar.includes('?x-oss-process') ? data.props.pageProps.userInfo.avatar.sp
CRITICALlib/routes/matters/latest.ts52 const item = response.data.viewer.recommendation.feed.edges.map(({ node }) => parseItem(node));
CRITICALlib/routes/linkedin/cn/utils.tsx93 jobs: resp.data.data.searchSearchHitsByJob.elements.map((e) => e.target.jobPosting),
CRITICALlib/routes/binance/launchpool.ts34 const articles = appData.appState.loader.dataByRouteId.d969.catalogs.find((catalog) => catalog.catalogId === 48).art
CRITICALlib/routes/afr/navigation.ts53 const list = response.data.pageByNavigationPath.page.latestStoriesConnection.edges.map(({ node }) => ({
Over-Commented Block27 hits · 27 pts
SeverityFileLineSnippet
LOW.oxlintrc.json121 "@typescript-eslint/consistent-generic-constructors": "error",
LOW.github/workflows/codeql.yml1# For most projects, this workflow file will not need changing; you simply need
LOW.github/workflows/codeql.yml61
LOWlib/shims/dotenv-config.ts1// No-op shim for dotenv/config in Cloudflare Workers
LOWlib/routes/chnmuseum/xwzt.ts41 });
LOWlib/routes/pixiv/token.ts41 }
LOWlib/routes/pixiv/token.ts61// await tickToken(tryGet); // 启动tickToken
LOWlib/routes/pixiv/novel-api/content/utils.ts81 }
LOWlib/routes/twitter/user.ts21 // description: 'Please see above for details.',
LOWlib/routes/twitter/api/web-api/utils.ts141 // 1. ofetch does not forward `dispatcher` to its internal fetch() call
LOWlib/routes/bilibili/ranking.ts21// 10 kichiku https://api.bilibili.com/x/web-interface/ranking/v2?rid=1007&type=all&web_location=333.934&w_rid=&wts=
LOWlib/routes/bilibili/cache.ts101 const subUrl = navResponse.data.wbi_img.sub_url;
LOWlib/routes/1point3acres/offer.tsx61
LOWlib/routes/1point3acres/offer.tsx81 // );
LOWlib/routes/the/util.ts1// This file is intentionally left minimal after migration from the.bi (WordPress) to river.to (custom SSR).
LOWlib/routes/jump/discount.tsx141
LOWlib/routes/nature/news-and-comment.ts1// example usage: `/nature/news-and-comment/ng`
LOWlib/routes/nature/research.ts1// example usage: `/nature/research/ng`
LOWlib/routes/nature/cover.ts1import { load } from 'cheerio';
LOWlib/routes/cockroachlabs/blog.ts41 // <a href="href..">
LOWlib/routes/cockroachlabs/blog.ts61 const items = await Promise.all(
LOWlib/routes/wechat/tgchannel.ts61 for (let mark of highlightMarks) {
LOWlib/routes/wechat/tgchannel.ts81 // 第 4 个元素: <a href="${用于 link priview 的预览图 url}"><i><b>🔗</b></i></a>
LOWlib/routes/wechat/tgchannel.ts101 if (authorNode && authorNode.type === 'text') {
LOWlib/routes/jike/utils.ts101 // 5. 图片
LOWlib/routes/gov/general/general.ts1import { load } from 'cheerio';
LOWlib/routes/gov/general/general.ts21// defaultPath: 'zwgk/zcjd/', // 默认路径。假设网址是 a.b.gov.cn/c/d/ 则输入 c/d/。访问 gov/b/
Hyper-Verbose Identifiers24 hits · 26 pts
SeverityFileLineSnippet
LOWscripts/workflow/format-description.ts113function remarkLiftClosingDirective() {
LOWlib/routes/zju/sis/index.ts68async function enrichNewsItemWithDetails(item: DataItem, refererUrl: string): Promise<DataItem> {
LOWlib/routes/pixiv/novel-api/content/utils.ts8export function convertPixivProtocolExtended(caption: string): string {
LOWlib/routes/wikipedia/current-events.ts47function parseCurrentEventsTemplate(wikitext: string): string | null {
LOWlib/routes/wikipedia/current-events.ts118function closeAllListsAndAddParagraph(state: ListProcessorState): void {
LOWlib/routes/sdo/ff14risingstones/api.ts35export async function getNoviceNetworkRecruitDetail(recruitID: number) {
LOWlib/routes/sdo/ff14risingstones/api.ts53export async function getFreeCompanyRecruitDetail(recruitID: number) {
LOWlib/routes/bilibili/video.ts174async function fetchVideoListFromBrowser(uid: string): Promise<VideoListData> {
LOWlib/routes/jimmyspa/news.ts92function convertHtmlDateToStandardFormat(htmlContent: string): Date | undefined {
LOWlib/routes/medium/graphql.ts38async function getWebInlineRecommendedFeedQuery(user, cookie, pagingLimit = 20) {
LOWlib/routes/medium/graphql.ts42async function getWebInlineTopicFeedQuery(user, tagSlug, cookie, pagingLimit = 20) {
LOWlib/routes/medium/graphql.ts46async function getUserCatalogMainContentQuery(user, catalogId, cookie, pagingLimit = 20) {
LOWlib/routes/medium/graphql.ts88function newWebInlineRecommendedFeedQuery(pagingLimit = 5) {
LOWlib/routes/medium/graphql.ts124function newWebInlineTopicFeedQuery(tagSlug, pagingLimit = 5) {
LOWlib/routes/medium/graphql.ts162function newUserCatalogMainContentQuery(catalogId, pagingLimit = 20) {
LOWlib/routes/the/index.ts157function extractFromMaterialBlocks($: CheerioAPI, pageUrl: string): DataItem[] {
LOWlib/routes/youtube/api/subtitles.ts52function createSrtAttachmentFromSrt(srt: string): Array<{ url: string; mime_type: string; title: string }> {
LOWlib/routes/misskey/utils.tsx99async function getUserTimelineByUsername(username, site, { withRenotes = false, mediaOnly = false }) {
LOWlib/routes/dailypush/utils.ts264export async function enhanceItemsWithSummaries(browser: Browser, items: ArticleItem[]): Promise<DataItem[]> {
LOWlib/routes/mrdx/utils.ts1function getElementChildrenInnerText(element) {
LOWlib/routes/sohu/mobile.ts86function extractPlateBlockNewsLists(jsonData: any) {
LOWlib/routes/linkedin/utils.ts46function parseParamsToSearchParams(params, map) {
LOWlib/routes/linkedin/utils.ts178function parseRelativeShorthandDate(shorthand) {
LOWlib/routes/gov/moa/moa.ts232async function getLatestDataArticleDetail(id) {
AI Slop Vocabulary2 hits · 6 pts
SeverityFileLineSnippet
MEDIUMlib/routes/uber/blog.ts70 // Traverse the JSON to find the content node, which is more robust against format changes.
MEDIUMlib/routes/freecomputerbooks/index.tsx51 // Needing more robust processing if some day more such elements show up.
Overly Generic Function Names5 hits · 5 pts
SeverityFileLineSnippet
LOWlib/routes-deprecated/dcinside/board.js22async function getData(ctx, link) {
LOWlib/routes/oreno3d/main.tsx72 async function getData(response) {
LOWlib/routes/szse/notice.ts39 function getData(jscontent, option) {
LOWlib/routes/cgtn/podcast.ts6async function getData(category, id) {
LOWlib/routes/nber/common.tsx11async function getData(url) {
Verbosity Indicators3 hits · 4 pts
SeverityFileLineSnippet
LOWlib/routes/perplexity/blog.ts57 // Step 1: Extract featured article using data-framer-name attribute
LOWlib/routes/perplexity/blog.ts71 // Step 2: Extract regular articles using data-framer-name="Article Card"
LOWlib/routes/perplexity/blog.ts106 // Step 3: Fetch detail pages for items missing pubDate (e.g., featured article)
Fake / Example Data2 hits · 2 pts
SeverityFileLineSnippet
LOWlib/routes/google/alerts.ts29 params: `[null,[null,null,null,[null,"${keyword}","com",[null,"en","US"],null,null,null,0,0],null,3,[[null,1
LOWlib/routes/mrdx/daily.ts52 // eg: `<a class="foo" daoxiang="foo-bar.htm">Lorem ipsum</a>`