Python gets the friend's articles from hexo's friend-links

Overview
当前版本1.13
——————————————————————————————
下一版本

更新日志
2021/2/12   加入了友链链接的去重,适配了中文时间sitemap抓取,
同时解决了时间格式不统一的问题导致的朋友圈时间显示错乱问题


什么是友链朋友圈?

你是否经常烦恼于友链过多但没有时间浏览?那么友链朋友圈将解决这一痛点。你可以随时获取友链网站的更新内容,并了解友链的活跃情况。
效果图如下:
image.png
因为是 beta 版本,所以不可避免还有错误,为了更好制作这个项目,发现 bug。我首先 release 这个 beta 版本。
预览链接https://zfe.space/friendcircle/

步骤一:配置 leancloud

① 账号注册

前往leancloud 国际版官网(推荐国际版)注册账号,登录。
image.png

② 新建应用

进入控制台创建一个应用,名字随意。
image.png

③ 绑定应用域名

我一般习惯绑定域名,不绑定貌似也可以,
将一个二级域名指向 leancloud 提供的 CNAME,
然后访问二级域名。
image.png
image.png

④ 获取应用 Keys

将应用 ID(AppID)和应用密钥(AppKey)保存下来,方便后面步骤使用。
image.png

步骤二:配置自动爬取友链文章的 github action

①fork 项目

前往hexo-circle-of-friendshttps://github.com/Zfour/hexo-circle-of-friends)fork 我的项目。
image.png

② 创建名为GITHUB_TOKEN的 TOKEN

前往token 链接添加一个名为GITHUB_TOKEN的 Token,并为赋予repoadmin:repo_hookworkflow的权限。
如果你有了就不用创建了。

ccknbc 友情提示说,也可以不用添加这个 TOKEN

image.png

③ 前往环境变量设置配置环境变量

Name分别以 APPID、APPKEY、LINK 创建环境变量。
Value 分别填入刚刚保存 Leancloud 的应用 ID(AppID)和应用密钥(AppKey)以及你的友链链接(https://zfe.space/link/
保存三个环境变量。
image.png
image.png

④ 给项目点上收藏

github action 将自动在每天 8 点到晚上 11:59 执行爬取任务。每半小时执行一次。
image.png
image.png
当执行完成后,访问你的leancloud后台,进入刚刚创建的项目,如果出现 friend_list 的 class 和 friend_poor 的 class 则说明配置成功。
可以查看爬取情况,对友链链接进行排错和查看存活情况。
或提醒好友,该部署 sitemap 了。
image.png

步骤三:配置 vercel api

① 注册

为了不暴露leancloud的应用 ID(AppID)和应用密钥(AppKey),同时减少前端处理数据的压力,还需配置 vercel api。
首先前往  Vercel 官网,点击右上角的 sign up 进行注册。
image.png
极有可能遇到的 bug
若注册时提示 Error:This user account is blocked.Contact [email protected] for more information.
这是由于 Vercel 不支持大部分国内邮箱。可以将 github 账号主邮箱改为 Gmail 邮箱。
但是根据群友反应,将 github 账号主邮箱切换为 Gmail 以后,Vercel 又会提示需要使用手机号码验证。然而 github 并没有提供手机号码绑定的内容。
综上,建议一开始注册 github 账号时就使用 Gmail 等国外邮箱进行注册。

  1. 国内访问Gmail的方案:
    • 直接使用 QQ 邮箱手机版,它提供 Gmail 的访问路线,可以直接注册并使用。
    • 使用 Ghelper 等浏览器插件访问。详情可以参考这篇文章:玩转 Microsoft-Edge
  2. 若是执着于当前Github账号,可以参考以下方案进行尝试:
    • 完成了 Gmail 等国外邮箱的注册,打开 github-> 头像 ->settings->Emails->Add email address, 并完成邮箱验证。
    • 在 Add email address  下方的 Primary email address  选项中将 Gmail 设置为主邮箱。

② 新建项目,fork 我的项目

打开dashboard点击新建项目的New Project按钮。点击导入第三方库。
image.png

填入俺提供的自建 API 项目地址:
https://github.com/Zfour/hexo-circle-of-friends-api

image.png
选择私有账户。点击select

image.png
选择 github 按钮然后会帮你将仓库克隆到你的 github 中,填入自定义仓库名称。
image.png

之后会识别出项目文件,单击  Continue
image.png
Vercel  的  PROJECT NAME  可以自定义,不用太过在意,但是之后不支持修改,若要改名,只能删除  PROJECT  以后重建一个了。下方三个选项保持默认就好。

image.png

此时点击 Deploy,Vercel  的 api 部署已经完成了一半。

③ 配置环境变量

进入应用,点击 Settings 选择Envionment Variables标签配置环境变量
Name分别以 LEANCLOUD_ID、LEANCLOUD_KEY 创建环境变量。
Value 分别填入刚刚保存 Leancloud 的应用 ID(AppID)和应用密钥(AppKey)。
image.png
image.png

④ 检查 API 是否配置成功

访问API 链接(图中链接+’/api’),如我的为(https://hexo-circle-of-friends-api.vercel.app/api
如果显示数据则说明 API 配置成功。

注意!!!
如果不成功请View Build Logs,然后手动 develope 一下

image.png
image.png

image.png

步骤四:配置 HEXO 页面

这里以 butterfly 主题为例。进行配置。

① 下载模板文件

前往Butterfly-friend-poor-html下载模板文件,放入根目录文件夹的 source 文件夹里。
image.png

② 引入 js

打开根目录的_config.butterfly 在 inject 的 bottom 处添加以下 vuejs 和本地 js 的代码。

xml
1
2
3
4
5
inject:
head:
bottom:
- <script src="https://cdn.jsdelivr.net/npm/[email protected]">script>
- <script src="/friendcircle/request.js">script>

③ 修改 api 地址

将以下代码中的链接换位你部署的 api 链接即可。

javascript
1
requests_url = "https://hexo-circle-of-friends-api.vercel.app/api";

④ 查看效果

hexo g 并 hexo s 访问你的域名+/friendcircle 则可查看效果。
image.png

⑤ 添加到导航栏

这个太简单了就不说了。

常见问题

目前根据群友反馈有以下问题:

① 目前群有反馈,js 文件压缩会出 bug,所以请尽量避免 js 压缩,你可以选择通过 jsdCDN 引入
② 如果 github action 无法提交 commit 请删除time.log再执行一遍即可
③ 如果配置了 api 但无法访问,请手动 develope verel 应用一下

最后给我的售后打个广告,有问题欢迎加群 674527148 询问。

当前版本 技术预览版 1.12

更新日志:

① 修复了时间比较时存在的时区不统一造成的最新文章判断错误问题。
② 修改了 sitemap 的爬取策略,即 dom 层级在三个层级以上,即’域名/博客目录/文章’,避免爬取 index 等。
适配了拥有标准时间格式’2021-2-11’格式的博客文章页
③ 修改了请求默认时间为 15s,降低了爬取错误的发生。
④ 修改了日志打印的格式,使其更加直观易懂
⑤ 增加了 gitee 友链获取的方式
⑥ 适配了截图式友链的友链获取

目前待解决的问题:

① 中文时间的适配?
② 很多人安装了各种不同格式的友链插件或者使用了各种不同格式的友链,
是否需要通过 xml 获取或者用 gitee-api 进行 api 的衔接?
③ 洪哥提出的使用 archives 链接的方案是否需要马上实现?

经过一天的群友测试,1.1 版本技术预览版本已发布
因为 aki 和洪总的友链是截图形式的,
本着麻烦用户就是犯罪的原则,我进行了这种截图形式和截图与原生混合形式的适配
最新 1.11 版本已更新

最新 1.12 版本已更新
适配了 gitee 友链
可以通过编辑userinfo.txt的内容爬取友链仓库的信息

xml
1
2
3
owner: zfe
repo: friend
state: open

重要提示:

:后面有一个空格
owner: zfe #用户名
repo: friend #仓库名
state: open #抓取提交的 issue
state: progressing #抓取进行中的 issue
state: closed #抓取完成的 issue

issue 格式如下,yaml 代码块不能省略:

markdown
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
**标题请书写你的链接,不要写其他内容**

```yaml
# 显示名称
name: 小冰博客

# 跳转地址
link: https://zfe.space/

# 你的头像
avatar: https://zfe.space/images/headimage.png

# 你的描述
descr: 咕咕咕
```
Comments
  • 登录失败,vercel报错(`获取SECRET_KEY失败`)

    登录失败,vercel报错(`获取SECRET_KEY失败`)

    image

    控制台报错如下 image

    vercel执行时日志返回获取SECRET_KEY失败,error_code:404,清除缓存重新部署了也没有,前端除管理外,其余均正常
    前端进入设置时提示500错误(确认为部署后首次输入密码),地址在我的博客,按照文档里的配置的、没有遗漏变量

    image
    image

    部署环境:github+sqlite+vercel (默认),修改域名为自定义的https://cof-api.ydlk.cc/,仓库circle-of-friends,配置用的yaml文件 ,已确认GitHub令牌与Vercel令牌正确放行了对应的权限

    前端代码如下

    <div class="post-container">
            <div class="post-detail gt-bg-theme-color-first">
                <article class="gt-post-content">
                    <div id="hexo-circle-of-friends-root"></div>
                    <script>
                        let UserConfig = {
                            private_api_url: 'https://cof-api.ydlk.cc/',
                            page_turning_number: 10,
                            error_img: 'https://sdn.geekzu.org/avatar/57d8260dfb55501c37dde588e7c3852c',
                            sort_rule: 'created'
                        }
                    </script>
                    <!--<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/zhheo/[email protected]/mainColor/heoMainColor.css">-->
                    <script type="text/javascript" src="https://cdn.jsdelivr.net/gh/zhheo/[email protected]/moments5/app.min.js"></script>
                    <script type="text/javascript" src="https://cdn.jsdelivr.net/gh/zhheo/[email protected]/moments5/bundle.js"></script>
                </article>
            </div>
        </div>
    

    前端代码参考自张洪Heo

    opened by YanDao0313 10
  • This Serverless Function has crashed.

    This Serverless Function has crashed.

    [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()
    
    bug 
    opened by Gahotx 5
  • 爬到了,但是数据库没有信息

    爬到了,但是数据库没有信息

    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..
    ----------------------
    

    完整版

    数据库截图

    这个作者的文章只有一篇没报错,其他的都报错。很奇怪

    opened by Nesxc 5
  • 关于将此插件内置于 Stellar 和 Volantis 主题的想法和方案探讨

    关于将此插件内置于 Stellar 和 Volantis 主题的想法和方案探讨

    这是一个很棒的插件,所以我想集成到主题中,作为一个无需配置开箱即用的功能。现有的模式可能做不到开箱即用(因为需要后端配置),我想能不能做成像 #issues-api 一样把数据存储到仓库中(这个项目也是受冰老师启发和指导),前端直接通过GItHub API 拉取存放于仓库的数据。

    这样主题使用者就不需要任何后端配置就可以直接使用此功能了。

    JSON存放到仓库中有些功能不方便支持,但我认为那也不是必要的,只要保留最近100条按发布时间倒序排序就可以了。(核心诉求:基础功能+无后端)

    opened by xaoxuu 4
  • 文章重复

    文章重复

    运行一段时间就会出现问题,发布时间稍微早点的文章会重复。

    Screenshot_2022-08-14-22-34-34-728_com android chrome

    采用 Leancloud 部署。

    博客链接:https://www.casecori.top/circle/ 仓库链接:https://github.com/Cystee/hexo-circle-of-friends API:https://circori.vercel.app/all

    bug 
    opened by Cystee 4
  • Server部署报错

    Server部署报错

    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)
    
    opened by Nesxc 4
  • Vercel 部署失败

    Vercel 部署失败

    老版本部署是成功了的。现在更新了,我把原来的仓库删了重新来过,结果 Vercel 返回云函数错误 HTTP 500:

    image

    其他的正常,Leancloud 有 friend_listfriend_poor,Github Action 部署成功。仓库地址:

    https://github.com/Cystee/hexo-circle-of-friends

    opened by Cystee 3
  • LeanCloud部署可能存在问题?

    LeanCloud部署可能存在问题?

    因为以前一直习惯使用LeanCloud,查看文档发现5.x更新挺多的,所以删库重新操作,根据文档添加 github的环境变量 image

    vercel的环境变量 image

    工作流运行正常 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存在其它问题?如果确实是我操作存在问题,那好叭。

    感谢作者的新版前端方案,很好用!

    opened by GC-ZF 2
  • vercel+github+mongodb的部署方式获取随机文章的接口问题

    vercel+github+mongodb的部署方式获取随机文章的接口问题

    image 部署方式:GitHub+vercel+leancloud https://friends.guole.fun/post

    image 部署方式:github+vercel+mongodb https://fcircle.panghai.top/post

    这两种部署方式中,使用一样的接口,返回的statistical_data数据不一致

    bug 
    opened by flow2000 2
  • 点击订阅文字,弹出框中的名字为undefined

    点击订阅文字,弹出框中的名字为undefined

    image 如图,我点击订阅或者张洪Heo,弹出框的名字都会显示undefined 接口:https://fcircle.panghai.top/post?num=5&link=https://blog.zhheo.com 朋友圈链接:https://blog.panghai.top/fcircle/ 版本:4.3.3

    opened by flow2000 2
  • 后端正常,前端报错

    后端正常,前端报错

    博客链接: 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
    
    bug 
    opened by Cystee 2
  • LINK 未设置导致的程序不再正常尝试截取友链问题

    LINK 未设置导致的程序不再正常尝试截取友链问题

    所有文档里的步骤我都看得懂而且应该都没有错,但最后抓取的时候,还是出了问题…

    起因:发现文档步骤结束后,api查询不到任何内容 中途:发现 Github Actions 里的日志显示抓取 0 篇内容 结果:正常网页是通过模板网页从json文件中获取的,也就是发送了 GET 请求,最终得到的页面内元素。目测是因为抓取的是源网页文件而没有运行上边的JS代码,而从而彻底丢失其中的主要内容。

    image

    思考过后的方案:

    • 将友链内容改为 JSON 格式,友链页面改为二次 GET 请求(第一次获取内容模板,第二次为逐个填充友链内容)从 JSON 中获取。但一来要写 JS 获取,二来损失了加载速度。
    • 直接弃用抓取法,改用手工录入友链。缺点是非常麻烦

    两种方法都很难受😭

    opened by cworld1 6
Releases(5.0.6)
  • 5.0.6(Nov 1, 2022)

  • 5.0.5(Oct 30, 2022)

  • 5.0.4(Oct 28, 2022)

    release 5.0.4版本,改动如下:

    前端管理面板docker缺失的环境变量修复 对应前端管理面板更新版本检测功能,规范前端版本 增加极简模式

    Source code(tar.gz)
    Source code(zip)
  • 5.0.3(Oct 11, 2022)

    release 5.0.3版本,改动如下:

    • 修复可能出现的安全问题
    • volantis抓取规则增加
    • 添加状态监控功能和立即运行功能
    • 对应前端管理面板更新
    Source code(tar.gz)
    Source code(zip)
  • 5.0.2(Oct 10, 2022)

  • 5.0.1(Oct 9, 2022)

  • 5.0.0(Oct 9, 2022)

    release 5.0.0版本,改动如下:

    • 更好的前端
    • 新增前端管理面板,告别繁琐的配置,管理朋友圈更加方便
    • 修复一系列bug
    • 一系列接口添加
    • 完善日志记录
    Source code(tar.gz)
    Source code(zip)
  • 4.3.3(Jul 2, 2022)

    release 4.3.3版本,改动如下:

    • 扩展json_api的功能,支持从本地读取json友链配置,同时额外提供一个进阶格式
    • 一些格式改动
    • 修复/all接口在文章数小于20时导致无法获取数据的问题;
    Source code(tar.gz)
    Source code(zip)
  • 4.3.2(Jun 14, 2022)

    release 4.3.2版本,改动如下:

    randomfriend和randompost两个接口支持随机N篇功能 新增lostfriends接口,用于快速查询失联友链 修复leancloud过期文章清理不生效的问题 添加自定义日志信息 修复leancloud接口中统计的数量和实际数量不同的问题 修复leancloud接口中创建时间和更新时间颠倒问题

    Source code(tar.gz)
    Source code(zip)
  • 4.3.1(Feb 14, 2022)

  • 4.3.0(Feb 13, 2022)

    release 4.3.0 新增api方式的配置项友链 修复过期文章清除不生效的问题 新增mongodb存储方式和对应api 其它bug修复

    Source code(tar.gz)
    Source code(zip)
  • 4.2.6(Feb 11, 2022)

  • 4.2.5(Feb 11, 2022)

    4.2.5 新增友链获取策略的common规则:https://hexo-circle-of-friends-doc.vercel.app/#/developmentdoc?id=%e5%8f%8b%e9%93%be%e9%a1%b5%e9%80%82%e9%85%8d 代码优化

    Source code(tar.gz)
    Source code(zip)
  • 4.2.4(Feb 10, 2022)

  • 4.2.3(Feb 10, 2022)

    目前 release 4.2.3 版本:

    • 支持 gitee 和 github 上的 issuse 友链获取
    • 支持butterfly、volantis、matery、sakura、fluid、nexmoe、Yun、stun、stellar主题的友链和文章获取
    • 支持feed订阅规则,如atom、rss等规则(支持wordpress类型的博客)
    • 支持自定义订阅后缀
    • 支持站点屏蔽
    • 支持按照更新时间和创建时间排序
    • 支持未适配的hexo主题和非hexo用户使用,在配置项选择开启配置项友链
    • 额外的友链页同时爬取
    • 支持添加HTTP代理
    • 新增数据存储配置,提供多种存储方式
    • 新增部署方式配置,可部署在本地服务端
    • 将api整合到主仓库
    • 新增next四种主题的文章获取,与Yun规则合并,暂不支持友链页获取
    Source code(tar.gz)
    Source code(zip)
  • 4.2.2(Feb 10, 2022)

    目前 release 4.2.2 版本:

    • 支持 gitee 和 github 上的 issuse 友链获取
    • 支持butterfly、volantis、matery、sakura、fluid、nexmoe、Yun、stun、stellar主题的友链和文章获取
    • 支持feed订阅规则,如atom、rss等规则(支持wordpress类型的博客)
    • 支持自定义订阅后缀
    • 支持站点屏蔽
    • 支持按照更新时间和创建时间排序
    • 支持未适配的hexo主题和非hexo用户使用,在配置项选择开启配置项友链
    • 额外的友链页同时爬取
    • 支持添加HTTP代理
    • 新增数据存储配置,提供多种存储方式
    • 新增部署方式配置,可部署在本地服务端
    • 将api整合到主仓库
    Source code(tar.gz)
    Source code(zip)
  • 4.2.1(Feb 9, 2022)

    目前 release 4.2.1 版本:

    • 支持 gitee 和 github 上的 issuse 友链获取
    • 支持butterfly、volantis、matery、sakura、fluid、nexmoe、Yun、stun、stellar主题的友链和文章获取
    • 支持feed订阅规则,如atom、rss等规则(支持wordpress类型的博客)
    • 支持自定义订阅后缀
    • 支持站点屏蔽
    • 支持按照更新时间和创建时间排序
    • 支持未适配的hexo主题和非hexo用户使用,在配置项选择开启配置项友链
    • 额外的友链页同时爬取
    • 支持添加HTTP代理
    • 新增数据存储配置,提供多种存储方式
    • 新增部署方式配置,可部署在本地服务端
    • 将api整合到主仓库
    Source code(tar.gz)
    Source code(zip)
  • 4.2.0(Feb 6, 2022)

    目前 release 4.2.0 版本:

    支持 gitee 和 github 上的 issuse 友链获取 支持butterfly、volantis、matery、sakura、fluid、nexmoe、Yun、stun、stellar主题的友链和文章获取 支持feed订阅规则,如atom、rss等规则(支持wordpress类型的博客) 支持自定义订阅后缀 支持站点屏蔽 支持按照更新时间和创建时间排序 支持未适配的hexo主题和非hexo用户使用,在配置项选择开启配置项友链 额外的友链页同时爬取 支持添加HTTP代理 新增数据存储配置,提供多种存储方式 新增部署方式配置,可部署在本地服务端 将api整合到主仓库

    Source code(tar.gz)
    Source code(zip)
  • 4.1.5(Feb 5, 2022)

    目前 release 4.1.5 版本:

    • 支持 gitee 上的 issuse 友链获取
    • 支持 github 上的 issuse 友链获取
    • 支持 butterfly、volantis、matery、sakura、fluid主题的最新文章获取
    • 新增目前最通用的atom和rss规则
    • 支持站点屏蔽,在配置项选择开启
    • 支持更新时间和创建时间排序
    • 支持未适配的hexo主题和非hexo用户使用,在配置项选择开启配置项友链
    • 支持爬取wordpress类型的博客
    • 新增对nexmoe、Yun、stun主题的爬取
    • 新增额外的友链页同时爬取,在配置项选择开启
    • 新增对stellar主题的爬取
    • 支持添加HTTP代理,在配置项选择开启
    • 新增配置项友链选项,自定义订阅后缀
    • 逻辑重构,新增友链页获取策略配置
    • 添加数据存储配置,提供多种存储方式
    • 将api整合到仓库
    • 添加部署方式配置,可部署在本地服务端
    • feed订阅解析更加精准了
    Source code(tar.gz)
    Source code(zip)
  • 4.1.3(Jan 30, 2022)

    ⭐从4.1.3版本开始,一定要在配置项中配置友链页的获取策略

    目前 release 4.1.3 版本:

    • 支持 gitee 上的 issuse 友链获取
    • 支持 github 上的 issuse 友链获取
    • 支持 butterfly、volantis、matery、sakura、fluid主题的最新文章获取
    • 新增目前最通用的atom和rss规则
    • 支持站点屏蔽,在配置项选择开启
    • 支持更新时间和创建时间排序
    • 支持未适配的hexo主题和非hexo用户使用,在配置项选择开启配置项友链
    • 支持爬取wordpress类型的博客
    • 新增对nexmoe、Yun、stun主题的爬取
    • 新增额外的友链页同时爬取,在配置项选择开启
    • 新增对stellar主题的爬取
    • 支持添加HTTP代理,在配置项选择开启
    • 新增配置项友链选项,自定义订阅后缀和解析类型
    • 逻辑重构,新增友链页获取策略配置
    Source code(tar.gz)
    Source code(zip)
  • 4.1.2(Jan 28, 2022)

    目前 release 4.1.2 版本:

    • 支持 gitee 上的 issuse 友链获取
    • 支持 github 上的 issuse 友链获取
    • 支持 butterfly、volantis、matery、sakura、fluid主题的最新文章获取
    • 新增目前最通用的atom和rss规则
    • 支持站点屏蔽,在配置项选择开启
    • 代码基于scrapy重构
    • 支持更新时间和创建时间排序
    • 支持未适配的hexo主题和非hexo用户使用,在配置项选择开启配置项友链
    • 支持爬取typecho类型的博客
    • 新增对nexmoe、Yun、stun主题的爬取
    • 支持爬取wordpress类型的博客
    • 优化文章去重规则
    • 新增额外的友链页同时爬取,在配置项选择开启
    • 新增对stellar主题的爬取
    • 支持添加HTTP代理,在配置项选择开启
    • 新增配置项友链选项,自定义订阅后缀和解析类型
    Source code(tar.gz)
    Source code(zip)
  • 4.1.1(Jan 21, 2022)

    目前 release 4.1.1 版本:

    • 支持 gitee 上的 issuse 友链获取
    • 支持 github 上的 issuse 友链获取
    • 支持 butterfly、volantis、matery、sakura、fluid主题的最新文章获取
    • 新增目前最通用的atom和rss规则
    • 支持站点屏蔽,在配置项选择开启
    • 代码基于scrapy重构
    • 支持更新时间和创建时间排序
    • 未适配的hexo主题和非hexo用户也可使用,在配置项选择开启
    • 支持爬取typecho类型的博客
    • 新增对nexmoe、Yun、stun主题的爬取
    • 支持爬取wordpress类型的博客
    • 优化文章去重规则
    • 新增额外的友链页同时爬取,在配置项选择开启
    • 新增对stellar主题的爬取
    • 支持添加HTTP代理,在配置项选择开启
    Source code(tar.gz)
    Source code(zip)
  • 4.1.0(Jan 10, 2022)

    目前 release 4.1.0 版本:

    支持 gitee 上的 issuse 友链获取 支持 github 上的 issuse 友链获取 支持 butterfly、volantis、matery、sakura、fluid主题的最新文章获取 新增目前最通用的atom和rss规则 支持站点屏蔽,在配置项选择开启 代码基于scrapy重构 支持更新时间和创建时间排序 未适配的hexo主题和非hexo用户也可使用,在配置项选择开启 支持爬取typecho类型的博客 新增对nexmoe、Yun、stun主题的爬取 支持爬取wordpress类型的博客 优化文章去重规则 新增额外的友链页同时爬取,在配置项选择开启 新增对stellar主题的爬取

    Source code(tar.gz)
    Source code(zip)
  • 4.0(Dec 12, 2021)

    • 代码基于scrapy重构,提速大约4倍
    • 优化文章去重规则

    目前 release 4.0 版本

    • 支持 gitee 上的 issuse 友链获取,在配置项选择开启
    • 支持 github 上的 issuse 友链获取,在配置项选择开启
    • 额外友链页获取,在配置项选择开启
    • 支持 butterfly、volantis、matery、sakura、fluid、nexmoe、Yun、stun主题的最新文章获取
    • 支持目前最通用的atom和rss规则,- 支持爬取typecho、wordpress类型的博客
    • 支持更新时间和创建时间排序
    • 支持站点屏蔽,在配置项选择开启
    • 未适配的hexo主题和非hexo用户也可使用,在配置项选择开启(即手动增加爬取友链列表)
    • 过期文章时间可配置
    • 新增失败重爬配置项
    Source code(tar.gz)
    Source code(zip)
  • 3.1(Sep 14, 2021)

    目前 release 3.1 版本: ① 支持butterfly、volantis、matery、sakura、fluid主题的友链获取 ② 支持小康友链及 volantis 主题友链,即部署于 gitee 上的 issuse 友链获取 ③ 支持 butterfly、volantis、matery、sakura、fluid主题的最新文章获取 ④ 去除sitemap,新增目前最通用的atom和rss规则 ⑤ 拥有友链屏蔽、关键词屏蔽、等自定义 yaml 的配置项 ⑥ 代码重构并规范化,便于二次开发 ⑦ 可以支持更新时间和创建时间排序 ⑧ 未适配的hexo主题和非hexo用户也可使用(使用方法见说明书) ⑨ 可以爬取typecho类型的博客

    bug修复 ① 重复爬取同一文章问题 ② 非bf主题爬取报错 ③ sitemap重新置后(不通用) ④ hexo-theme-sakura主题两种时间格式引发错误 ⑤ 屏蔽链接修复

    Source code(tar.gz)
    Source code(zip)
  • 3.0(Sep 8, 2021)

    目前 release 3.0 版本: ① 支持butterfly、volantis、matery、sakura、fluid主题的友链获取 ② 支持小康友链及 volantis 主题友链,即部署于 gitee 上的 issuse 友链获取 ③ 支持 butterfly、volantis、matery、sakura、fluid主题的最新文章获取 ④ 去除sitemap,新增目前最通用的atom和rss规则 ⑤ 拥有友链屏蔽、关键词屏蔽、等自定义 yaml 的配置项 ⑥ 代码重构并规范化,便于二次开发 ⑦ 可以支持更新时间和创建时间排序 ⑧ 未适配的hexo主题和非hexo用户也可使用(使用方法见说明书)

    bug修复 ① 重复爬取同一文章问题 ② 非bf主题爬取报错 ③ sitemap重新置后(不通用) ④ hexo-theme-sakura主题两种时间格式引发错误 ⑤ 屏蔽链接修复

    Source code(tar.gz)
    Source code(zip)
  • 2.0(Jul 18, 2021)

    目前 release 2.0 版本: ① 支持butterfly、volantis、matery、sakura、fluid主题的友链获取 ② 支持小康友链及 volantis 主题友链,即部署于 gitee 上的 issuse 友链获取 ③ 支持 butterfly、volantis、matery、sakura、fluid主题的最新文章获取 ④ 去除sitemap,新增目前最通用的atom和rss规则 ⑤ 拥有友链屏蔽、关键词屏蔽、等自定义 yaml 的配置项 ⑥ 代码重构并规范化,便于二次开发

    bug修复 ① 重复爬取同一文章问题 ② 非bf主题爬取报错 ③ sitemap重新置后(不通用) ④ hexo-theme-sakura主题两种时间格式引发错误 ⑤ 屏蔽链接修复 ⑥ sitemap的各种问题

    Source code(tar.gz)
    Source code(zip)
  • 1.19(Jun 9, 2021)

    目前 release 1.19 版本: ① 支持butterfly、volantis、matery、sakura、fluid主题的友链获取 ② 支持小康友链及 volantis 主题友链,即部署于 gitee 上的 issuse 友链获取 ③ 支持 butterfly、volantis、matery、sakura、fluid主题的最新文章获取 ④ 支持大部分拥有 sitemap 网站的文章获取 ⑤ 拥有友链屏蔽、关键词屏蔽、等自定义 yaml 的配置项 ⑥ 代码重构并规范化,便于二次开发

    bug修复 ① 重复爬取同一文章问题 ② 非bf主题爬取报错 ③ sitemap重新置后(不通用) ④ hexo-theme-sakura主题两种时间格式引发错误 ⑤ 屏蔽链接修复

    Source code(tar.gz)
    Source code(zip)
  • 1.18(May 19, 2021)

  • 1.17(Apr 30, 2021)

Free and Open Source Machine Translation API. 100% self-hosted, no limits, no ties to proprietary services. Built on top of Argos Translate.

LibreTranslate Try it online! | API Docs Free and Open Source Machine Translation API, entirely self-hosted. Unlike other APIs, it doesn't rely on pro

UAV4GEO 3.5k Jan 03, 2023
Wrapper for the Swiss Parliament API for Python

swissparlpy This module provides easy access to the data of the OData webservice of the Swiss parliament. Table of Contents Installation Usage Get tab

Stefan Oderbolz 8 Jun 13, 2022
McTrade is a bot exploiting Binance API, open source! built in python !

Open Source Crypto Trading Bot using Binance API Report Bug · Request Feature Table of Contents About The Project Built With Getting Started Prerequis

Raphael Cohen 5 Jul 17, 2022
Python wrapper library for World Weather Online API

pywwo Python wrapper library for World Weather Online API using lxml.objectify How to use from pywwo import * setKey('your_key', 'free') w=LocalWeat

World Weather Online 20 Dec 19, 2022
Wats2PDF - Convert whatsapp exported chat(without media) into a readable pdf format

Wats2PDF convert whatsApp exported chat into a readable pdf format. convert with

5 Apr 26, 2022
Paid Udemy Courses with Coupons

Freedemy Paid Udemy Courses with Coupons Steps to run pip3 install -r requirements.txt python3 free-courses.py Then you can click the Enroll Link and

GOKUL A.P 23 Dec 14, 2022
Un petit tool qui est la pour envoier des message avec des webhook en bêta

📎 Webhook-discord Le but de se tool c'est que tu peux envoier vos webhook discord sur vos serveur et les customiser Pour lancer le projet il faut avo

2 Oct 10, 2021
Telegram bot for stream music or video on telegram

KYURA MUSIC Telegram bot for stream music or video on telegram, powered by PyTgCalls and Pyrogram Help Need Help me to translate this repo, click the

0 Dec 08, 2022
Me and @nathanmargni did a small analysis on what are the best strategies to win more games of League of Legends.

Me and @nathanmargni did a small analysis on what are the best strategies to win more games of League of Legends.

Christian Berchtold 2 Jan 19, 2022
Experimental bridges between Telegram calls and other platforms.

Bridges by Calls Music Experimental bridges between Telegram calls and other platforms. Current bridges Bridge 1 (YouTube, Twitch, Facebook, etc...) B

Calls Music 14 Oct 08, 2022
Simple Telegram webscrap bot

webscrap-bot Simple Telegram webscrap bot Configs TOKEN - Get bot token from @BotFather API_ID - From my.telegram.org API_HASH - From my.telegram.org

lokaman chendekar 10 Oct 21, 2022
Braintree Python library

Braintree Python library The Braintree Python library provides integration access to the Braintree Gateway. TLS 1.2 required The Payment Card Industry

Braintree 230 Dec 18, 2022
Dynamic Twitter banner, to show off your spotify status. Banner updated every 5 minutes.

Spotify Twitter Banner Dynamic Twitter banner, to show off your spotify status. Banner updated every 5 minutes. Installation and Usage Install the dep

Sunrit Jana 23 Jan 05, 2023
Catware - A powerful grabber with a built in bot control system

catware A powerful grabber with a built in bot control system PLEASE NOTE THAT I

4 Feb 04, 2022
A simple python script for rclone. Use multiple Google Service Accounts and cycle through them.

About GSAclone GSAclone is a simple python script for rclone, written with the purpose of using multiple Google service accounts on Google Drive and "

Shiro39 6 Feb 25, 2022
Send GitHub Issues, PRs or Discussions Updates to Wechat

Send GitHub Issues, PRs or Discussions Updates to Wechat

Hollow Man 2 Jul 12, 2022
Microsoft Azure Storage Library for Python

Microsoft Azure Storage Library for Python

Microsoft Azure 329 Dec 16, 2022
This is Source Code of PdiskUploaderBot

PdiskUploaderBot This is the source code of PdiskUploaderBot. And the developer of this bot is AJTimePyro, His Telegram Channel & Group. You can use t

Abhijeet 8 Oct 20, 2022
Automatically Edits Videos and Uploads to Tiktok with 1 line of code.

TiktokAutoUploader - Open to code contributions Automatically Edits Videos and Uploads to Tiktok with 1 line of code. Setup pip install -r requirement

Michael Peres 199 Dec 27, 2022
A script that takes what you're listening too on Spotify and sets it as your Nertivia custom status.

nertivia-spotify-listening-status A script that takes what you're listening too on Spotify and sets it as your Nertivia custom status. setup Install r

Ben Tettmar 2 Feb 03, 2022