forked from timqian/chinese-independent-blogs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
script.js
119 lines (83 loc) · 4.84 KB
/
script.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
const fs = require('fs');
const axios = require('axios');
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 > 1 && i !== 0)
.map(row => {
if (row[2]) {
const feedlyId = encodeURIComponent(`feed/${row[2]}`);
row.push(feedlyId);
}
return row;
})
console.log(table)
async function getResultAndUpdateREADME() {
// add count to row
for (const row of table) {
if (row[4]) {
try {
const feedlyAPI = `http://cloud.feedly.com/v3/feeds/${row[4]}`;
try {
const jsonStr = fs.readFileSync(`./blogs/${encodeURIComponent(row[1])}.json`, 'utf8');
const subscribers = JSON.parse(jsonStr).subscribers;
row[5] = subscribers;
} catch (e) {
// cloudquery: github.com/t9tio/cloudquery
const cloudqueryAPI = `https://cloudquery.t9t.io/query?url=${encodeURIComponent(feedlyAPI)}&selectors=*:nth-child(2)%20>%20*`;
const res = await axios.get(cloudqueryAPI);
const subscribers = JSON.parse(res.data.contents[0].innerText).subscribers ? JSON.parse(res.data.contents[0].innerText).subscribers : 0;
fs.writeFileSync(`./blogs/${encodeURIComponent(row[1])}.json`, res.data.contents[0].innerText);
row[5] = subscribers;
await new Promise(res => setTimeout(res, 1000));
}
} catch (error) {
console.log(error);
row[5] = 0;
}
console.log(row[5])
}
}
table.sort((a, b) => b[5] - a[5]);
const newTable = table.map(row => {
const subscribeCount = row[5] >= 1000 ? row[5] : (row[5] + '').replace(/\d/g, '*');
return [`[![](https://badgen.net/badge/icon/${subscribeCount}?icon=rss&label)](${row[2]})`, row[0], `${row[1]}`, row[3]]
})
console.log(newTable)
// update README
const tableContentInMD = markdownTable([['RSS 订阅数', '简介', '链接', '标签'], ...newTable]);
const readmeContent = `# 中文独立博客列表
[![](https://badgen.net/badge/icon/website?icon=chrome&label)](https://mailchi.mp/7585311373a3/indieblogs) [![](https://badgen.net/badge/icon/telegram?icon=telegram&label)](https://t.me/indieBlogs) [![](https://badgen.net/badge/icon/patrons/orange?icon=patreon&label)](https://www.patreon.com/timqian)
## 目录
- [博客列表](#博客列表)
- [什么是独立博客](#什么是独立博客)
- [如何提交](#如何提交)
- [为什么要收集这张列表](#为什么要收集这张列表)
## 博客列表
> 暂时粗暴得按照 feedly 上的订阅数据排了个先后顺序. 关于如何更好得组织博客和推荐内容, 欢迎加入 [Telegram 群](https://t.me/indieBlog) 讨论或者通过 email [订阅更新](https://mailchi.mp/7585311373a3/indieblogs)
${tableContentInMD}
## 什么是独立博客
- 拥有自己的域名
- 作者本人原创内容
### 如何提交
1. 在 [./blogs-original.csv](./blogs-original.csv) 中填入博客 URL, RSS 及简介
2. 提交 PR
3. PR 被 merge 之后 README 通过 [./script.js](./script.js) 生成
## 为什么要收集这张列表
不止一次听到有人说: “在中国, 独立博客得时代已经过去了”. 确实, 很多博主都转到了公众号, 知乎专栏, 小密圈, 微博... 因为读者比较多; 平台的推荐算法让内容可以被更多人看到; 因为大厂更专业的 SEO (甚至直接与搜索引擎合作😅), 你的内容更容易被搜索到.
但我还是更喜欢独立博客, 因为属于自己的域名, 因为可以自由的排版, 自由的说话.
不得不说, 独立博客在获取新读者方面确实存在问题. 即使你内容再好, 总是需要自己发到各个论坛才能让没有订阅你博客的读者看到你的内容.
是否可以做一个工具, 可以连接这些独立博主, 在保持独立博客的自由得同时, 组织一个独立博客的创作和读者群体, 让独立博客们也有一个稳定的被发现的渠道. 这个工具可能是一个带个性化推荐系统的 RSS 客户端, 可能是一个类似微博, twitter 但是主要内容是独立博客的新东西, 读者可以点赞, 评论. 可以知道我们 follow 的博主 follow 了谁...
这个列表是一个开始, 先把独立博客们收集起来, 欢迎加入 [Telegram 群](https://t.me/indieBlogs)一起思考和讨论如何构建这样一个工具. 或者你也可以通过 email [订阅更新](https://mailchi.mp/7585311373a3/indieblogs)
## Thanks
- https://feedly.com
- t9t.io community: https://wewe.t9t.io/chat/t9t.io%20community%202 https://wewe.t9t.io/chat/t9t.io%20community
- https://github.com/DIYgod/RSSHub
- https://ohmyrss.com/
- https://github.com/tangqiaoboy/iOSBlogCN
`
fs.writeFileSync('./README.md', readmeContent, 'utf8');
}
getResultAndUpdateREADME()