rock-candy-tea / hexo-circle-of-friends Goto Github PK
View Code? Open in Web Editor NEWPython gets the friend's articles from hexo's friend-links
License: Apache License 2.0
Python gets the friend's articles from hexo's friend-links
License: Apache License 2.0
如题。
打开是这样子,感觉错位了,出现了avatar
字样:
点击Created
又正常了:
不过只要一刷新就又错位了。
还有一个问题就是博客卡片不能显示博客名称,而是显示undefined
看了一圈貌似没有找到更改密码的方式,请问是否在可视化面板中增添该项功能
可以复现的链接:fc.liynw.top
可以发现在后面加上 /all
有数据,但是加上 /friend
显示 Not Found
部署方式:GitHub+vercel+leancloud
https://friends.guole.fun/post
部署方式:github+vercel+mongodb
https://fcircle.panghai.top/post
这两种部署方式中,使用一样的接口,返回的statistical_data数据不一致
sakura
樱花主题分包,友链规则可以正常使用,主页规则有点问题,我怀疑是获取文章发布时间的字符串需要截取,但咱也不会截啊,等冰老师来看看怎么搞。
使用volantis策略抓取友链页面,将第一个友链的简介误判成了第二个友链的作者。示例站点:https://bowenyoung.cn/fcircle
2022-03-20 18:57:09 [scrapy.downloadermiddlewares.retry] ERROR: Gave up retrying <GET https://blog.vincent1230.top/rss.xml> (failed 3 times): User timeout caused connection failure: Getting https://blog.vincent1230.top/rss.xml took longer than 15.0 seconds..
2022-03-20 18:57:09 [scrapy.downloadermiddlewares.retry] ERROR: Gave up retrying <GET https://sqdpt.top/atom.xml> (failed 3 times): Connection was refused by other side: 111: Connection refused.
2022-03-20 18:57:09 [scrapy.downloadermiddlewares.retry] ERROR: Gave up retrying <GET https://sqdpt.top/> (failed 3 times): Connection was refused by other side: 111: Connection refused.
2022-03-20 18:57:09 [scrapy.downloadermiddlewares.retry] ERROR: Gave up retrying <GET https://blog.vincent1230.top/feed/atom> (failed 3 times): User timeout caused connection failure: Getting https://blog.vincent1230.top/feed/atom took longer than 15.0 seconds..
2022-03-20 18:57:09 [scrapy.downloadermiddlewares.retry] ERROR: Gave up retrying <GET https://blog.vincent1230.top/feed/> (failed 3 times): User timeout caused connection failure: Getting https://blog.vincent1230.top/feed/ took longer than 15.0 seconds..
2022-03-20 18:57:09 [scrapy.downloadermiddlewares.retry] ERROR: Gave up retrying <GET https://throwx.cn/rss2.xml> (failed 3 times): User timeout caused connection failure: Getting https://throwx.cn/rss2.xml took longer than 15.0 seconds..
2022-03-20 18:57:09 [scrapy.downloadermiddlewares.retry] ERROR: Gave up retrying <GET https://throwx.cn/rss.xml> (failed 3 times): User timeout caused connection failure: Getting https://throwx.cn/rss.xml took longer than 15.0 seconds..
错误详细
----------------------
Vincent文朔
《[宝塔面板] v7.9.0 面板主题美化包》
文章发布时间:2021-12-22 采取的爬虫规则为:sakura
2022-03-20 18:57:09 [scrapy.downloadermiddlewares.retry] ERROR: Gave up retrying <GET https://blog.vincent1230.top/rss.xml> (failed 3 times): User timeout caused connection failure: Getting https://blog.vincent1230.top/rss.xml took longer than 15.0 seconds..
2022-03-20 18:57:09 [scrapy.downloadermiddlewares.retry] ERROR: Gave up retrying <GET https://sqdpt.top/atom.xml> (failed 3 times): Connection was refused by other side: 111: Connection refused.
2022-03-20 18:57:09 [scrapy.downloadermiddlewares.retry] ERROR: Gave up retrying <GET https://sqdpt.top/> (failed 3 times): Connection was refused by other side: 111: Connection refused.
2022-03-20 18:57:09 [scrapy.downloadermiddlewares.retry] ERROR: Gave up retrying <GET https://blog.vincent1230.top/feed/atom> (failed 3 times): User timeout caused connection failure: Getting https://blog.vincent1230.top/feed/atom took longer than 15.0 seconds..
2022-03-20 18:57:09 [scrapy.downloadermiddlewares.retry] ERROR: Gave up retrying <GET https://blog.vincent1230.top/feed/> (failed 3 times): User timeout caused connection failure: Getting https://blog.vincent1230.top/feed/ took longer than 15.0 seconds..
2022-03-20 18:57:09 [scrapy.downloadermiddlewares.retry] ERROR: Gave up retrying <GET https://throwx.cn/rss2.xml> (failed 3 times): User timeout caused connection failure: Getting https://throwx.cn/rss2.xml took longer than 15.0 seconds..
2022-03-20 18:57:09 [scrapy.downloadermiddlewares.retry] ERROR: Gave up retrying <GET https://throwx.cn/rss.xml> (failed 3 times): User timeout caused connection failure: Getting https://throwx.cn/rss.xml took longer than 15.0 seconds..
----------------------
完整版
这个作者的文章只有一篇没报错,其他的都报错。很奇怪
我给博客套了Cloudflare,对国外ip进行质询
如何设置WAF能使GitHub Action正常访问?
当点击活跃后,界面将无法在加载。试图修复但依然失败,排除过一些问题,但仍然未解决。
百分百复现。
博客对应链接🔗:https://lanyundev.vercel.app/fcircle/
仓库相应链接🔗:https://github.com/LanYunDev/hexo-circle-of-friends
API:https://hexo-circle-of-friends-five.vercel.app/
##### # # ##### ##### ###### ##### ###### # # #
# # # # # # # # # # # # #
##### # # # # ##### # # ##### # #
# # # # # # # ##### # # #
# # # # # # # # # # # #
##### #### # # ###### # # # ###### #
4.2.1
===================================================================
hexo: 6.2.0
hexo-cli: 4.3.0
os: darwin 21.4.0 12.3.1
node: 18.0.0
v8: 10.1.124.8-node.13
uv: 1.44.1
zlib: 1.2.11
brotli: 1.0.9
ares: 1.18.1
modules: 108
nghttp2: 1.47.0
napi: 8
llhttp: 6.0.4
openssl: 1.1.1n
cldr: 40.0
icu: 70.1
tz: 2021a3
unicode: 14.0
按照教程部署fcircle后,访问fcircle界面布局异常。没有对butterfly主题做大规模魔改。fcircle界面如下:
---
title: 朋友圈
date:
updated:
type:
comments:
description:
keywords:
top_img:
mathjax:
katex:
aside:
aplayer:
highlight_shrink:
---
<!-- 挂载友链朋友圈的容器 -->
<div class="post-content"><div id="cf-container">与主机通讯中……</div></div>
<!-- 加样式和功能代码 -->
<!-- 将apiurl改成你后端生成的api地址 -->
<script type="text/javascript">
var fdataUser = {
apiurl: 'https://hexo-circle-of-friends.vercel.app/'
}
</script>
<link rel="stylesheet" href="https://fastly.jsdelivr.net/gh/lmm214/immmmm/themes/hello-friend/static/fcircle-beta.css">
<script type="text/javascript" src="https://fastly.jsdelivr.net/gh/lmm214/immmmm/themes/hello-friend/static/fcircle-beta.js"></script>
发生错误的网站:https://www.felixchen0707.cn/fcircle/请问一下可能的解决方式。
部署成功的同学可以把地址留在这里哦~
运行一段时间就会出现问题,发布时间稍微早点的文章会重复。
采用 Leancloud 部署。
博客链接:https://www.casecori.top/circle/
仓库链接:https://github.com/Cystee/hexo-circle-of-friends
API:https://circori.vercel.app/all
因为以前一直习惯使用LeanCloud,查看文档发现5.x更新挺多的,所以删库重新操作,根据文档添加
github的环境变量
工作流运行正常 https://github.com/GC-ZF/hexo-circle-of-friends/actions/runs/3289482837
但是LeanCloud中并没有新建friend_list和friend_poor
这个时候我以为是ID和Key填错了,又删库重复操作了两遍结果还是相同
所以修改为了sqlite,在前端面板又尝试修改数据库管理方式,填写ID和Key之后又好了?所以我又删了LeanCloud的应用重新以sqlite的前端方式打开面板又尝试一次,还是成功。过程中工作流也没任何报错,我好迷啊,尝试看了工作流和读取变量的代码,也没有问题啊,所以想问问作者,是不是LeanCloud存在其它问题?如果确实是我操作存在问题,那好叭。
感谢作者的新版前端方案,很好用!
是不是不支持Yun主题的“随机友链(外置的 JSON 加载方式)”啊(doge)
博客链接:
https://www.casecori.top/circle/
仓库链接:
https://github.com/Cystee/hexo-circle-of-friends
API:
https://hexo-circle-of-friends-rosy.vercel.app/all
页面源码:
---
title: 朋友圈
date: 2022-6-26
---
<div id="cf-container">与主机通讯中……</div>
<link rel="stylesheet" href="https://cdn.casecori.top/gh/lmm214/immmmm/themes/hello-friend/static/fcircle-beta.css">
<script type="text/javascript">
var fdataUser = {
apiurl: 'https://hexo-circle-of-friends-rosy.vercel.app/'
}
</script>
<script type="text/javascript" src="https://cdn.casecori.top/gh/lmm214/immmmm/themes/hello-friend/static/fcircle-beta.js"></script>
控制台报错:
Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'article_num')
at loadStatistical (fcircle-beta.js:47:23)
at fcircle-beta.js:265:7
数据库选择mongodb后,action日志显示根本没有推送数据到mongodb的过程。请修复一下,谢谢。
框架名称:Hexo
主题名称:Miracle
事例站点:https://blog.tnxg.top/links/
显示方法:外部链接引入后渲染/assets/data/links.json
[GET] /all
18:22:25:32
[ERROR] AttributeError: 'str' object has no attribute 'decode'
Traceback (most recent call last):
File "/var/task/vc__handler__python.py", line 293, in vc_handler
response = asgi_cycle(__vc_module.app, body)
File "/var/task/vc__handler__python.py", line 204, in __call__
loop.run_until_complete(asgi_task)
File "/var/lang/lib/python3.9/asyncio/base_events.py", line 647, in run_until_complete
return future.result()
File "/var/task/fastapi/applications.py", line 208, in __call__
await super().__call__(scope, receive, send)
File "/var/task/starlette/applications.py", line 112, in __call__
await self.middleware_stack(scope, receive, send)
File "/var/task/starlette/middleware/errors.py", line 181, in __call__
raise exc from None
File "/var/task/starlette/middleware/errors.py", line 159, in __call__
await self.app(scope, receive, _send)
File "/var/task/starlette/middleware/cors.py", line 78, in __call__
await self.app(scope, receive, send)
File "/var/task/starlette/exceptions.py", line 82, in __call__
raise exc from None
File "/var/task/starlette/exceptions.py", line 71, in __call__
await self.app(scope, receive, sender)
File "/var/task/starlette/routing.py", line 580, in __call__
await route.handle(scope, receive, send)
File "/var/task/starlette/routing.py", line 241, in handle
await self.app(scope, receive, send)
File "/var/task/starlette/routing.py", line 55, in app
await response(scope, receive, send)
File "/var/task/starlette/responses.py", line 136, in __call__
await send(
File "/var/task/starlette/exceptions.py", line 68, in sender
await send(message)
File "/var/task/starlette/middleware/errors.py", line 156, in _send
await send(message)
File "/var/task/vc__handler__python.py", line 232, in send
self.on_request(headers, status_code)
File "/var/task/vc__handler__python.py", line 253, in on_request
self.response['headers'] = format_headers(headers, decode=True)
File "/var/task/vc__handler__python.py", line 20, in format_headers
key = key.decode()
[GET] /all?rule=created&start=0&end=20
18:22:11:63
[ERROR] AttributeError: 'str' object has no attribute 'decode'
Traceback (most recent call last):
File "/var/task/vc__handler__python.py", line 293, in vc_handler
response = asgi_cycle(__vc_module.app, body)
File "/var/task/vc__handler__python.py", line 204, in __call__
loop.run_until_complete(asgi_task)
File "/var/lang/lib/python3.9/asyncio/base_events.py", line 647, in run_until_complete
return future.result()
File "/var/task/fastapi/applications.py", line 208, in __call__
await super().__call__(scope, receive, send)
File "/var/task/starlette/applications.py", line 112, in __call__
await self.middleware_stack(scope, receive, send)
File "/var/task/starlette/middleware/errors.py", line 181, in __call__
raise exc from None
File "/var/task/starlette/middleware/errors.py", line 159, in __call__
await self.app(scope, receive, _send)
File "/var/task/starlette/middleware/cors.py", line 78, in __call__
await self.app(scope, receive, send)
File "/var/task/starlette/exceptions.py", line 82, in __call__
raise exc from None
File "/var/task/starlette/exceptions.py", line 71, in __call__
await self.app(scope, receive, sender)
File "/var/task/starlette/routing.py", line 580, in __call__
await route.handle(scope, receive, send)
File "/var/task/starlette/routing.py", line 241, in handle
await self.app(scope, receive, send)
File "/var/task/starlette/routing.py", line 55, in app
await response(scope, receive, send)
File "/var/task/starlette/responses.py", line 136, in __call__
await send(
File "/var/task/starlette/exceptions.py", line 68, in sender
await send(message)
File "/var/task/starlette/middleware/errors.py", line 156, in _send
await send(message)
File "/var/task/vc__handler__python.py", line 232, in send
self.on_request(headers, status_code)
File "/var/task/vc__handler__python.py", line 253, in on_request
self.response['headers'] = format_headers(headers, decode=True)
File "/var/task/vc__handler__python.py", line 20, in format_headers
key = key.decode()
您好,我是 https://github.com/saveweb/rss-list 的维护者,看到这个项目用到了 saveweb/rss-list 作为公共库。
上一版本的 OPML 中有部分博客已经变成垃圾站了,垃圾站的RSS一直在发广告文章。
我们新版的 OPML 还没有发布,建议先使用 https://box.othing.xyz/realtime.opml.xml 的 OPML 替换目前公共库使用的 OPML 。
正式的新版 OPML 将于近期发布,谢谢。
另外,你们项目有交流群之类的吗?如果有的话,我想加入一下。:P
我发现目前爬取文章的逻辑是对比文章的发布时间选取最新的文章作为展示,但是如果有历史文章更新了就不会得到展示。如果可能的话,希望增加更新文章的展示。
希望作者能添加PostgresSql的支持
现在前端、后端都有排序的部分,可以考虑在后端完成排序送回,前端在fetch的时候送入链接?
用爱发电,再次敬佩!
settings.py 里 增加高阶配置选项
["贰猹の小窝", "https://noionion.top/rss.xml", "head.jpg","rss"],
["贰猹の小窝", "https://noionion.top/atom.xml", "head.jpg","atom"],
["贰猹の小窝", "https://noionion.top/atom.xml", "head.jpg","atom"],
["shuiba", "https://blog.shuiba.co/feed", "head.jpg","atom"],
["elizen", "https://elizen.me/index.xml", "head.jpg","rss"],
目前的自动匹配模式能解析到大部分,但有些不规范的feed不太好匹配,如果能像上面一样就大赞啦!
呈现页面:https://dusays.com/fcircle/
问题截图:
对于一些使用主题不适配的同学来说填 LINK 是没有必要的,反而让他们很疑惑,不知道该怎么填。
控制台报错 Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'article_num')
如何解决?
本人部署方式:GitHub + Leancloud + Vercel,由于主题不适配,所以用的是配置项友链。
演示地址:https://blog.saiodgm.gq/fcircle/
本人前端 api 地址:https://hexo-circle-of-friends-xi.vercel.app/
经本人测试,整体 class 名为 links
,每一个链接块 class 名为 item
,链接名为 exturl title
,头像为 exturl image
。
如题。
所有文档里的步骤我都看得懂而且应该都没有错,但最后抓取的时候,还是出了问题…
起因:发现文档步骤结束后,api查询不到任何内容
中途:发现 Github Actions 里的日志显示抓取 0 篇内容
结果:正常网页是通过模板网页从json文件中获取的,也就是发送了 GET 请求,最终得到的页面内元素。目测是因为抓取的是源网页文件而没有运行上边的JS代码,而从而彻底丢失其中的主要内容。
思考过后的方案:
两种方法都很难受😭
目前部署成功了,但友链和文章不会去重,就无限加入
冰老师不运维这个项目已经很久了,今天才发现冰老师说明书那一堆待解决问题(头疼
然后冰老师也没给我友链朋友圈仓库setting的权限,所以我暂时也没办法开Discussions,只能在这里临时开个issus用于讨论
另外老说明书也有一部分配置内容跟不上现在的版本,新说明书已经在写了,会和3.0版本同步发布(具体什么时候得等店长写完新UI)
用的是Volantis主题,友链使用_data/sites.yml方式管理。
老版本部署是成功了的。现在更新了,我把原来的仓库删了重新来过,结果 Vercel 返回云函数错误 HTTP 500:
其他的正常,Leancloud 有 friend_list
和 friend_poor
,Github Action 部署成功。仓库地址:
ubuntu 20.04.3 LTS x64
Python 3.8.10
MySQL 5.7.34
报错显示:
[parameters: {'title': '2022高考加油💪', 'created': '2022-02-26', 'updated': '2022-02-26', 'link': 'https://www.jipa.work/2022gk/', 'author': 'JIPA233の小窝', 'avatar': 'https://img.cdn.nesxc.com/2022/03/1647358231690-20220315233030.webp', 'rule': 'rss20', 'createAt': datetime.datetime(2022, 3, 19, 9, 58, 14, 965015)}]
(Background on this error at: https://sqlalche.me/e/14/9h9h) (Background on this error at: https://sqlalche.me/e/14/7s2a)
2022-03-19 02:06:14 [scrapy.downloadermiddlewares.retry] ERROR: Gave up retrying <GET https://hesifan.top/atom.xml> (failed 3 times): User timeout caused connection failure: Getting https://hesifan.top/atom.xml took longer than 15.0 seconds..
2022-03-19 02:06:18 [scrapy.core.scraper] ERROR: Error processing {'author': "Haobo's Blog", 'avatar': 'https://img.cdn.nesxc.com/2022/02/202202052207248webp', 'rule': 'atom10', 'title': '【数学】到底什么是信息论 施工中~', 'created': '2022-02-25', 'updated': '2022-02-25', 'link': 'https://discover304.top/2022/02/25/2022q1/144-information-theory/'}
Traceback (most recent call last):
File "/usr/local/lib/python3.8/dist-packages/twisted/internet/defer.py", line 858, in _runCallbacks
current.result = callback( # type: ignore[misc]
File "/usr/local/lib/python3.8/dist-packages/scrapy/utils/defer.py", line 150, in f
return deferred_from_coro(coro_f(*coro_args, **coro_kwargs))
File "/home/nserver/circle-of-friends/hexo-circle-of-friends/hexo_circle_of_friends/pipelines/sql_pipe.py", line 73, in process_item
self.friendpoor_push(item)
File "/home/nserver/circle-of-friends/hexo-circle-of-friends/hexo_circle_of_friends/pipelines/sql_pipe.py", line 153, in friendpoor_push
self.session.commit()
File "<string>", line 2, in commit
File "/usr/local/lib/python3.8/dist-packages/sqlalchemy/orm/session.py", line 1431, in commit
self._transaction.commit(_to_root=self.future)
File "/usr/local/lib/python3.8/dist-packages/sqlalchemy/orm/session.py", line 827, in commit
self._assert_active(prepared_ok=True)
File "/usr/local/lib/python3.8/dist-packages/sqlalchemy/orm/session.py", line 601, in _assert_active
raise sa_exc.PendingRollbackError(
sqlalchemy.exc.PendingRollbackError: This Session's transaction has been rolled back due to a previous exception during flush. To begin a new transaction with this Session, first issue Session.rollback(). Original exception was: (pymysql.err.DataError) (1366, "Incorrect string value: '\\xF0\\x9F\\x92\\xAA' for column 'title' at row 1")
[SQL: INSERT INTO posts (title, created, updated, link, author, avatar, rule, `createAt`) VALUES (%(title)s, %(created)s, %(updated)s, %(link)s, %(author)s, %(avatar)s, %(rule)s, %(createAt)s)]
[parameters: {'title': '2022高考加油💪', 'created': '2022-02-26', 'updated': '2022-02-26', 'link': 'https://www.jipa.work/2022gk/', 'author': 'JIPA233の小窝', 'avatar': 'https://img.cdn.nesxc.com/2022/03/1647358231690-20220315233030.webp', 'rule': 'rss20', 'createAt': datetime.datetime(2022, 3, 19, 9, 58, 14, 965015)}]
(Background on this error at: https://sqlalche.me/e/14/9h9h) (Background on this error at: https://sqlalche.me/e/14/7s2a)
2022-03-19 02:06:18 [scrapy.core.engine] ERROR: Scraper close failure
Traceback (most recent call last):
File "/usr/local/lib/python3.8/dist-packages/twisted/internet/defer.py", line 858, in _runCallbacks
current.result = callback( # type: ignore[misc]
File "/home/nserver/circle-of-friends/hexo-circle-of-friends/hexo_circle_of_friends/pipelines/sql_pipe.py", line 81, in close_spider
self.friendlist_push()
File "/home/nserver/circle-of-friends/hexo-circle-of-friends/hexo_circle_of_friends/pipelines/sql_pipe.py", line 140, in friendlist_push
self.session.commit()
File "<string>", line 2, in commit
File "/usr/local/lib/python3.8/dist-packages/sqlalchemy/orm/session.py", line 1431, in commit
self._transaction.commit(_to_root=self.future)
File "/usr/local/lib/python3.8/dist-packages/sqlalchemy/orm/session.py", line 827, in commit
self._assert_active(prepared_ok=True)
File "/usr/local/lib/python3.8/dist-packages/sqlalchemy/orm/session.py", line 601, in _assert_active
raise sa_exc.PendingRollbackError(
sqlalchemy.exc.PendingRollbackError: This Session's transaction has been rolled back due to a previous exception during flush. To begin a new transaction with this Session, first issue Session.rollback(). Original exception was: (pymysql.err.DataError) (1366, "Incorrect string value: '\\xF0\\x9F\\x92\\xAA' for column 'title' at row 1")
[SQL: INSERT INTO posts (title, created, updated, link, author, avatar, rule, `createAt`) VALUES (%(title)s, %(created)s, %(updated)s, %(link)s, %(author)s, %(avatar)s, %(rule)s, %(createAt)s)]
[parameters: {'title': '2022高考加油💪', 'created': '2022-02-26', 'updated': '2022-02-26', 'link': 'https://www.jipa.work/2022gk/', 'author': 'JIPA233の小窝', 'avatar': 'https://img.cdn.nesxc.com/2022/03/1647358231690-20220315233030.webp', 'rule': 'rss20', 'createAt': datetime.datetime(2022, 3, 19, 9, 58, 14, 965015)}]
(Background on this error at: https://sqlalche.me/e/14/9h9h) (Background on this error at: https://sqlalche.me/e/14/7s2a)
stellar 的友链和 volantis 同源,在 1.5 版本是可以通用的,但我目前在配置 4.0 版本时失败了,目前采用 'CONFIG_FRIENDS_LINKS['list']'
策略配置成功。
stellar 友链也采用 github + friends.yml 的策略
friends.yml 格式如下:
group:
title:
description:
items:
- title:
avatar:
url:
screenshot:
keywords:
description:
github 格式如下:
{
"title": "",
"url": "",
"avatar": "",
"screenshot": "",
"description": "",
"keywords": ""
}
相关链接:
stellar 主题仓库:https://github.com/xaoxuu/hexo-theme-stellar
stellar 友链策略:https://xaoxuu.com/wiki/stellar/tag-plugins/#%E5%8F%8B%E9%93%BE%E6%A0%87%E7%AD%BE
如图,我点击订阅或者张洪Heo,弹出框的名字都会显示undefined
接口:https://fcircle.panghai.top/post?num=5&link=https://blog.zhheo.com
朋友圈链接:https://blog.panghai.top/fcircle/
版本:4.3.3
rt
这是一个很棒的插件,所以我想集成到主题中,作为一个无需配置开箱即用的功能。现有的模式可能做不到开箱即用(因为需要后端配置),我想能不能做成像 #issues-api 一样把数据存储到仓库中(这个项目也是受冰老师启发和指导),前端直接通过GItHub API 拉取存放于仓库的数据。
这样主题使用者就不需要任何后端配置就可以直接使用此功能了。
JSON存放到仓库中有些功能不方便支持,但我认为那也不是必要的,只要保留最近100条按发布时间倒序排序就可以了。(核心诉求:基础功能+无后端)
支持生成要求数量的友链,方便添加多个友链到页脚
希望能添加个api,返回数据库所有友链对应的总文章数和最新一篇文章的时间 (博主可以用来排查太久没更新的友链 失联人员
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.