大家好!
在看完一些FastAPI的教程之后,终于轮到我自己尝试从它中สร้าง出实用的东西来了。 经过过去几周的努力,我推出了Post4U,这是一款能在一个单一的REST API调用中将内容发布到X、Telegram和Discord等平台的开源自主调度器。接下来我要分享的这个项目感觉已到了能分享的份量。
**它能干什么:** 通过API调用向目标平台发布内容,这个API调用需要三个参数:内容列表、需要发布的平台以及可选的发布时间。它会处理发布过程中的失效信息、监测每个平台的发布成功与否,记录每个任务的发布过程,必要时重试那些发布失败的平台。
**这里值得讨论的一些技术栈选择:** 我们为什么选择使用APScheduler而不是更常见的Celery + Redis的组合呢?因为已经在Post4U中利用了MongoDB来保存发布历史,所以使用MongoDB来存储任务也算是一种省事的选择。这也意味着在重启容器时,不需要额外的一层程序来恢复任务,并且这个选项也让整个容器的启动时间变得更加快速。现在,我很想知道如果你在生产环境中碰到了使用APScheduler的问题。因为这个问题一直在我心中徘徊着。
我们为什么选择使用Beanie + Motor而不是更常见的异步MongoDB ODM?因为它们配得天造地合,在FastAPI中使用它们也变得相当地顺手。特别是TimestampMixin模式的使用,让我们在保存文档到MongoDB的过程中,能够很容易地在文档中添加一个自动设置的创建时间。这个选项让我们节省了无数地代码复制工作。
**安全问题:** 感谢社区给出的宝贵建议,我们决定在所有路由中都开启API KEY验证,所有的API请求需要带有一个名为X-API-Key的头部,内容是一个比特加密的密钥。这个密钥会通过比较密文来验证,防止可能存在的时间攻击。文件上传方面,我们决定通过python-magic来验证具体的类型,而不是简单地依赖content_type的类型限制,我们还设定了一个允许列表来白名单化需要上传的媒体类型,我们对上传文件大小进行了分段限流,将所有流量限制在一个固定的大小内,防止文件越界的问题。
**前端界面:** 我们决定通过Reflex来构建Post4U的前端界面,虽然这个构建方式非常简单,但也能通过自定义的组合方式来实现React + Vite的整个技术栈。通过界面,我们可以进行文章的自由编辑、自动安排发布时间、直接发布文章、查看发布历史、取消任务的发布、关联上传的媒体文件等操作,你甚至都不需要通过curl指令或是查看API文档,仅仅依靠Post4U的前端界面就能轻松地完成所有这些任务。
**缺失内容:** 因为Reddit有一个非常缓慢的API手动审批流程,所以现在我们正在等待着他们的审批,如果审批结束后,我们将尝试结合BlueSky和Mastodon等相关的第三方平台实现接入。
我希望能够得到真实的建议和反馈。如果您也想帮助我们改进一些问题,或者是对于这个框架的其他任何地方的选择,您也可以随时让我们知道。如果您对这个项目感兴趣,可以在github上查看我们的项目:https://github.com/ShadowSlayer03/Post4U-Schedule-Social-Media-Posts
评论 (0)