RssHub + Vercel :在 Vercel 上免费部署你的RssHub!
RssHub 简介
RSSHub 是一个开源、简单易用、易于扩展的 RSS 生成器,可以给任何奇奇怪怪的内容生成 RSS 订阅源。
RSSHub 借助于开源社区的力量快速发展中,目前已适配数百家网站的上千项内容。
官方文档:介绍 | RssHub (需要挂代理
他人制作的镜像站:介绍 | RssHub
配置过程
Vercel 相关
注册
打开 Sign Up ,选择 Hobby
,随意填写你的姓名,然后点击 Continue with Github
关联你的Github账号
注册完之后,登录你的账号
部署
打开此链接来进行一件部署:https://vercel.com/import/project?template=https://github.com/DIYgod/RSSHub
点击 GitHub
随后在 Repository Name
处填写 RssHub
(其实随便填什么都没关系,只是一个名称)
填写完毕后,点击 Create
接着就是慢慢等待项目的部署
当出现 Congratulations!
时,部署成功。随后点击 Continue to Dashboard
进入控制台。
绑定自定义域名
如果你看到如下界面,那说明配置成功。
但是还有一个问题。
Vercel 给你的域名已被 DNS污染(就是被墙了
下图箭头所指出就是官方给你的域名,你可以在国内网络环境下测试能否打开。
如果你使用RssHub时的网络环境可以正常访问Google,那请跳到下一章节
如果不能,请继续往下看。
转到 Settings
,选择 Domains
可以看到,此处已经有一个官方自带的域名了
此时,请将你想绑定的域名输入到上方输入框中,点击 Add。
由于你还没有配置域名解析,它会报错 Invalid Configuration
。
此时你需要打开你的域名注册厂商,选择 域名解析
,将上图所需的解析信息填入,点击保存,等待生效即可。
完成!
Pixiv refreshToken 获取
完成以上安装后,可以生成大多数网站的RSS,但部分RSS需要单独配置后方可生成,如 pixiv
、disqus
、twitter
、youtube
、telegram
、github
部分 RSS 模块配置 文档镜像站地址:部分 RSS 模块配置
以 Pixiv
为例:
我们需要拿到Pixiv的 refreshToken
才能订阅Pixiv的内容。
不然就会是这样:
方法一
此操作机需要安装 Python 环境
-
下载 Chromedriver
提示:请下载与你的浏览器相对应版本号的文件。如果没有找到,则选择相近的。
# 查看浏览器版本号方法 # Edge: 在浏览器中输入 edge://version # Chrome 在浏览器中输入 chrome://version
-
下载脚本
注:Chromedriver 和 pixiv_auth.py 需要在同一个目录
-
安装requests模块
Windows端:
pip install requests
其他客户端请参考 https://stackoverflow.com/questions/17309288/importerror-no-module-named-requests
-
在Python安装selenium
pip install selenium
-
启动你的代理,并且修改
pixiv_auth.py
。这里可以直接抄借鉴我的#!/usr/bin/env python from argparse import ArgumentParser from base64 import urlsafe_b64encode from hashlib import sha256 from pprint import pprint from secrets import token_urlsafe from sys import exit from urllib.parse import urlencode from webbrowser import open as open_url import requests # Latest app version can be found using GET /v1/application-info/android USER_AGENT = "PixivAndroidApp/5.0.234 (Android 11; Pixel 5)" REDIRECT_URI = "https://app-api.pixiv.net/web/v1/users/auth/pixiv/callback" LOGIN_URL = "https://app-api.pixiv.net/web/v1/login" AUTH_TOKEN_URL = "https://oauth.secure.pixiv.net/auth/token" CLIENT_ID = "MOBrBDS8blbauoSck0ZfDbtuzpyT" CLIENT_SECRET = "lsACyCD94FhDUtGTXi3QzcFE2uU1hqtDaKeqrdwj" def s256(data): """S256 transformation method.""" return urlsafe_b64encode(sha256(data).digest()).rstrip(b"=").decode("ascii") def oauth_pkce(transform): """Proof Key for Code Exchange by OAuth Public Clients (RFC7636).""" code_verifier = token_urlsafe(32) code_challenge = transform(code_verifier.encode("ascii")) return code_verifier, code_challenge def print_auth_token_response(response): data = response.json() try: access_token = data["access_token"] refresh_token = data["refresh_token"] except KeyError: print("error:") pprint(data) exit(1) print("access_token:", access_token) print("refresh_token:", refresh_token) print("expires_in:", data.get("expires_in", 0)) def login(): code_verifier, code_challenge = oauth_pkce(s256) login_params = { "code_challenge": code_challenge, "code_challenge_method": "S256", "client": "pixiv-android", } open_url(f"{LOGIN_URL}?{urlencode(login_params)}") try: code = input("code: ").strip() except (EOFError, KeyboardInterrupt): return response = requests.post( AUTH_TOKEN_URL, data={ "client_id": CLIENT_ID, "client_secret": CLIENT_SECRET, "code": code, "code_verifier": code_verifier, "grant_type": "authorization_code", "include_policy": "true", "redirect_uri": REDIRECT_URI, }, headers={"User-Agent": USER_AGENT}, proxies={ 'https': 'http://127.0.0.1:10809' } ) print_auth_token_response(response) def refresh(refresh_token): response = requests.post( AUTH_TOKEN_URL, data={ "client_id": CLIENT_ID, "client_secret": CLIENT_SECRET, "grant_type": "refresh_token", "include_policy": "true", "refresh_token": refresh_token, }, headers={"User-Agent": USER_AGENT}, ) print_auth_token_response(response) def main(): parser = ArgumentParser() subparsers = parser.add_subparsers() parser.set_defaults(func=lambda _: parser.print_usage()) login_parser = subparsers.add_parser("login") login_parser.set_defaults(func=lambda _: login()) refresh_parser = subparsers.add_parser("refresh") refresh_parser.add_argument("refresh_token") refresh_parser.set_defaults(func=lambda ns: refresh(ns.refresh_token)) args = parser.parse_args() args.func(args) if __name__ == "__main__": main()
提示:
如果你用的代理工具不是 V2rayN如果你的代理端口不是10809
,那么请自行修改第82
行的代理端口。 -
目录下打开
cmd
,输入python pixiv_auth.py login
浏览器会弹出 Pixiv 登录页面。
打开浏览器开发者模式
(F12 ,切换到网络
选项卡,勾选保留日志
并在过滤文本框中输入callback?
。如下图所示,右键复制code的值,输入到终端中:完成!
方法二(推荐
这个方法适用于已经在使用Mirai框架中的用户。
相对于 方法一 来说,它不需要配置代理端口,也不用去安装什么其他的库。
它只需要两个东西:Steam++
(已更名为 Watt Toolkit
和 Mirai-Console-Loader
其中关于mcl(即mirai-console-loader 的配置安装相关知识可以查看我的 这一篇 文章
-
下载安装
Watt Toolkit
Steam++ 官网:https://steampp.net/,请自行选择你所需要的版本进行下载安装
-
进行网络加速
打开
Watt Toolkit
,将列表翻动到最下方,选择其他网站
,勾选,右上角加速模式选择Hosts代理模式
,点击一键加速
启动网络加速。
-
前往 https://pixiv.net 注册账号
-
下载插件
pixiv-helper
和chat-command
到/mcl/plugins
。# pixiv-helper下载地址 https://ghproxy.com/https://github.com/cssxsh/pixiv-helper/releases/download/v2.0.0-RC/pixiv-helper-2.0.0-RC.mirai2.jar # chat-command下载地址 https://ghproxy.com/https://github.com/project-mirai/chat-command/releases/download/v0.6.0/chat-command-0.6.0.mirai.jar
其中关于mcl(即mirai-console-loader 的配置安装相关知识可以查看我的 这一篇 文章
-
安装cookie获取插件
打开浏览器,访问 https://www.crxsoso.com/webstore/detail/fngmhnnpilhplaeedifhccceomclgfbg 下载 chrome插件
EditThisCookie
安装完毕后请让此插件在工具栏显示。
-
获取cookie
打开 https://pixiv.net,登录账号。
当显示
Cookie 已复制到剪贴板
时,前往mcl
主目录创建一个名为cookie.json
的文件,并将剪贴板中的内容粘贴,保存。注意:必须等到页面完全加载完毕才能获取到正确的cookie
-
双击启动
mcl.cmd
或 在终端输入./mcl
启动mcl。 -
启动QQ,进入到你与bot的私聊中。
通过Cookie,登录PIXIV
/pixiv cookie
登录成功!
-
最后一步,获取refreshToken。
在你与bot的私聊中输入/pixiv pool
可以看到你的账户信息。
请将refreshToken妥善保管,切勿泄露给他人。
配置环境变量
这是一个非常重要的步骤,不算难,只要知道了方法就十分简单。虽然我搞了一晚上才找到方法
打开 https://vercel.com/dashboard ,选择你的项目,点击进入。
点击 View Git Repository
,访问你的仓库。
如图所示,创建新文件。
文件名填写 .env
,文件内容填写:
PIXIV_REFRESHTOKEN=xxxxxxxxxxxxxxxxxxxxx # 请填写你的refreshToken
如图所示。
最后点击 Commit
提交即可。
总结:环境变量在仓库根目录下的 .env
文件中添加
格式为: name=value
name
为 环境变量名
value
为 环境变量值
end.