
ncarlier/feedpushr一个简单的Feed聚合服务,附加丰富功能。
!Logo
bash$ docker run -d --name=feedpushr ncarlier/feedpushr
feedpushr可通过命令行参数或环境变量进行配置。
执行feedpushr -h可显示所有参数及相关环境变量。所有配置变量在etc/default/feedpushr.env文件中有详细描述。
可通过Web UI或API为Feed定义标签:
bash$ curl -XPOST http://localhost:8080/v2/feeds?url=http://[***]
标签也可通过OPML格式导入/导出。使用OPML时,标签存储在category属性中。OPML category是逗号分隔的斜杠分隔类别字符串,例如<category>/test,foo,/bar/bar</category>会转换为标签列表:test, foo, bar_bar。配置标签后,新文章会继承这些标签并随标签一起推送。
新文章会发送到输出目标。当前内置以下输出提供器:
| 输出类型 | 属性 | 描述 |
|---|---|---|
stdout | format | 新文章发送到进程的标准输出。适用于通过管道传输到其他shell命令(如存储到文件、通过Netcat转发、使用Logstash等ETL工具)。 |
http | urlcontentTypeformat | 新文章通过POST请求发送到HTTP端点。 |
email | hostusernamepasswordformat... | 新文章通过SMTP主机发送邮件。 |
readflow | url(默认:官方API)apiKey | 新文章发送到readflow实例。 |
输出可通过插件扩展。
输出根据条件表达式激活。若无条件,则始终激活;否则表达式应用于文章,结果决定是否使用输出。例如,仅对标记为"news"且标题包含"Paris"的文章使用输出,表达式为:"news" in Tags and Title contains "Paris"。表达式语言文档见此处。
部分输出(stdout、http及部分插件)支持自定义格式。未指定时,默认JSON格式如下:
json{ "title": "文章标题", "text": "文章文本描述", "content": "文章HTML内容", "link": "文章URL", "updated": "文章更新日期(字符串格式)", "updatedParsed": "文章更新日期(日期格式)", "published": "文章发布日期(字符串格式)", "publishedParsed": "文章发布日期(日期格式)", "guid": "文章Feed GUID", "feedTitle": "Feed标题", "meta": { "key": "过滤器添加的元数据键值对" }, "tags": ["标签列表"] }
指定格式时需符合Golang模板语法,可访问上述JSON属性(前缀为.并大写,如{{.Title}})。支持模板函数及扩展函数:
tweet <text> <suffix>:创建不超过270字符的消息(文本和后缀,文本可能被截断),例:"{{ tweet .Title .Link }}"truncate <length> <text>:截断文本至指定长度,例:"{{ truncate 200 .Text }}"文章发送前可通过过滤链修改。当前内置以下过滤器:
| 过滤器 | 属性 | 描述 |
|---|---|---|
title | prefix(默认:feedpushr:) | 为文章标题添加指定前缀。 |
fetch | 无 | 尝试从源URL提取文章内容。 |
interest | wordlist(默认:news) | 仅保留匹配指定兴趣词列表(逗号分隔)的文章。 |
minify | 无 | 压缩文章HTML内容。 |
过滤器可通过插件扩展。与输出类似,过滤器根据条件表达式激活,并附加到输出,继承输出的条件表达式。
应用可通过加载插件轻松扩展。插件是编译后的库文件,需在应用启动时加载。当前目录下的插件会自动加载,也可通过--plugin参数加载:
bash$ feedpushr --plugin ./feedpushr-***.so
外部插件(如***插件)可在此目录找到。
可通过http://localhost:8080/ui访问Web UI。
!Screenshot
可使用HTTP基本认证或OpenID Connect限制访问。
创建htpasswd文件:
bash$ # 为用户'admin'创建密码文件 $ htpasswd -B -c .htpasswd admin
默认会尝试加载.htpasswd文件,可通过以下方式指定路径:
bash$ export FP_AUTHN=/etc/feedpushr.htpasswd $ # 或 $ feedpushr --authn /etc/webhookd/users.htpasswd
指定OIDC发行者URL激活:
bash$ export FP_AUTHN=[***] $ # 或 $ feedpushr --authn [***]
可限制特定用户名访问:
bash$ export FP_AUTHORIZED_USERNAME=xxx $ # 或 $ feedpushr --authorized-username xxx
bash$ # 默认配置启动服务 $ feedpushr $ # 自定义配置启动服务 $ export FP_DB="boltdb:///var/opt/feedpushr.db" $ export FP_DELAY=20s $ export FP_LOG_LEVEL=warn $ feedpushr
bash$ # 通过CLI添加Feed $ feedpushr-ctl create feed --url [***] $ # 通过cURL添加Feed $ curl -XPOST http://localhost:8080/v2/feeds?url=http://[***] $ # 从OPML文件导入Feed $ curl -XPOST http://localhost:8080/v2/opml -F"file=@subscriptions.opml"
bash$ # 列出Feed $ feedpushr-ctl list feed $ # 获取单个Feed $ feedpushr-ctl get feed --id=9090dfac0ccede1cfcee***d0cc0d $ # 删除Feed $ feedpushr-ctl delete feed --id=9090dfac0ccede1cfcee***d0cc0d $ # 停止Feed聚合 $ feedpushr-ctl stop feed --id=9090dfac0ccede1cfcee***d0cc0d $ # 启动Feed聚合 $ feedpushr-ctl start feed --id=9090dfac0ccede1cfcee***d0cc0d
bash$ # 获取OpenAPI JSON $ curl http://localhost:8080/swagger.json $ # 获取运行时变量 $ curl http://localhost:8080/v2/vars $ # 简单ETL shell管道示例:使用shell工具(jq和httpie)将转换后的文章发送到HTTP端点 $ feedpushr \ | jq -c "select(.title) | {title:.title, content:.description, origin: .link}" \ | while read next; do echo "$next" | http [***] done
GNU General Public License v3.0
详见LICENSE全文。



manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务