From 5113f7ccbf82e78159be5c94fd9d7e499cfca479 Mon Sep 17 00:00:00 2001 From: yzqzss Date: Sun, 15 Sep 2024 18:03:44 +0800 Subject: [PATCH] new python README render --- .github/workflows/updateInfo.yml | 9 +-- script.js => readme_render.py | 104 +++++++------------------------ 2 files changed, 23 insertions(+), 90 deletions(-) rename script.js => readme_render.py (58%) mode change 100755 => 100644 diff --git a/.github/workflows/updateInfo.yml b/.github/workflows/updateInfo.yml index d693f49d319..7d0e2e6afd7 100644 --- a/.github/workflows/updateInfo.yml +++ b/.github/workflows/updateInfo.yml @@ -9,7 +9,7 @@ on: - 'blogs-original.csv' - 'linter.py' - 'opml_generator.py' - - 'script.js' + - 'readme_render.py' - '.github/workflows/updateInfo.yml' schedule: - cron: '0 0 * * MON' @@ -21,10 +21,6 @@ jobs: steps: - uses: actions/checkout@v4.1.7 - - name: Use Node.js - uses: actions/setup-node@v3.2.0 - with: - node-version: 16.x - name: Set up Python 3.12 uses: actions/setup-python@v5.1.0 with: @@ -34,8 +30,7 @@ jobs: python linter.py - name: update readme run: | - npm install - node script.js + python readme_render.py > README.md - name: Generate feed.opml run: | python opml_generator.py diff --git a/script.js b/readme_render.py old mode 100755 new mode 100644 similarity index 58% rename from script.js rename to readme_render.py index d574c158308..f17a89ffc4a --- a/script.js +++ b/readme_render.py @@ -1,75 +1,9 @@ -/** - * 1. Get original CSV of feeds - * 2. Get follower counts for each feed - * 3. Order by follower count - */ - -const fs = require('fs'); -const markdownTable = require('markdown-table'); - -const data = fs.readFileSync('./blogs-original.csv'); -const rows = data.toString().split('\n'); - -const table = rows - .map(row => row.split(',').map(column => column.trim())) - .filter((row, i) => row.length === 4 && i !== 0) - .map(row => row.push(-1) && row) // row[4] to store count of RSS subscribers - -const { GraphQLClient } = require('graphql-request'); - -const endpoint = 'https://api.feeds.pub/graphql' -const client = new GraphQLClient(endpoint, {errorPolicy: "ignore"}); - - -const pageSize = 60; -async function getResultAndUpdateREADME() { - // Get follower counts - const feedLinks = table.map(row => row[2]); - const queries = feedLinks.map((feedLink, i) => { - if (feedLink) { - return `f${i}: feed(id: "${feedLink}") { - followerCount - }` - } else return ''; - }).filter(query => query.trim().length > 0); - - for (let i = 0; i < queries.length; i += pageSize) { - const query = `{ - ${queries.slice(i, i + pageSize).join('\n')} - }` - - try { - const data = await client.request(query); - - Object.keys(data).forEach(key => { - const index = Number(key.replace('f', '')); - const count = data[key] ? data[key].followerCount : 0; - table[index][4] = count; - }); - console.log(`Got followerCount for ${i} to ${i + pageSize}`); - } catch (error) { - console.log(error) - } - } - - // Order by follower count - table.sort((a, b) => (b[4] - a[4]) || (a[0] - b[0])); - - const getFeedsPubBtn = (feedLink, followCount) => - `[](https://feeds.pub/feed/${encodeURIComponent(feedLink)})`; - const newTable = table.map(row => { - return [ - row[2] ? getFeedsPubBtn(row[2], row[4]) : '', - row[0].replace(/\|/g, '|'), - row[1], - row[3] - ] - }); - - // update README - const tableContentInMD = markdownTable([['

                    RSS 订阅数

', '简介', '链接', '标签'], ...newTable]); - - const readmeContent = ` +import csv + +csv_file_path = 'blogs-original.csv' + +def main(): + print("""\ # 中文独立博客列表 [![](https://badgen.net/badge/icon/Website?icon=chrome&label)](https://feeds.pub/cn-indie) [![](https://badgen.net/badge/icon/Telegram?icon=telegram&label)](https://t.me/indieBlogs) [![](https://badgen.net/badge/icon/Blog?icon=chrome&label)](https://blog.t9t.io/cn-indie-blogs-2019-10-29/) @@ -90,9 +24,17 @@ ## 博客列表 > 暂时根据各 RSS 服务订阅数据排了个先后顺序。 欢迎加入 [Telegram 群](https://t.me/indieBlogs) 讨论如何更好地组织和利用这个列表 - -${tableContentInMD} - +""") + with open(csv_file_path, mode='r', encoding='utf-8') as file: + reader = csv.DictReader(file,skipinitialspace=True) + print("| RSS feed | Introduction | Address | tags |") + print("| --- | --- | --- | --- |") + for row in reader: + mdlink = f'[Feed]({row["RSS feed"]})' + print( + f"| {mdlink if row['RSS feed'] else 'None'} | {row['Introduction']} | {row['Address']} | {row['tags']} |" + ) + print("""\ ## 什么是独立博客 - 拥有自己的域名 @@ -102,7 +44,7 @@ 1. 在 [./blogs-original.csv](./blogs-original.csv) 尾部添加一行,填入博客的 名称、URL、RSS以及标签 2. 提交 PR -3. (自动) PR 被 merge 之后 README 通过 [./script.js](./script.js) 生成 +3. (自动) PR 被 merge 之后 README 通过 [./readme_render.py](./readme_render.py) 生成 ## 为什么要收集这张列表 @@ -151,11 +93,7 @@ - [Netlify](https://www.netlify.com/) - [Vercel](https://vercel.com/) - [Cloudflare Pages](https://pages.cloudflare.com/) -` - - fs.writeFileSync('./README.md', readmeContent, 'utf8'); - - console.log('README.md 文件生成成功!'); -} +""") -getResultAndUpdateREADME() +if __name__ == "__main__": + main() \ No newline at end of file