QiWe开放平台 · 个人名片
API驱动企微自动化,让开发更高效
核心能力:为开发者提供标准化接口、快速集成工具,助力产品高效拓展功能场景
团队定位:专注企微API生态的技术服务团队
对接通道:搜「QiWe 开放平台」联系客服
核心理念:合规赋能,让企微开发更简单、更高效
这个系统的逻辑非常清晰:每当你的系统通过企微 API 成功发出一条消息,同时也将该内容持久化到数据库,小程序端则负责展示和搜索。
1. 系统架构图
-
数据源:来自于之前的群发逻辑。
-
存储层:MySQL 记录标题、链接、分类;Redis 负责热门内容的缓存。
-
展示层:微信小程序,通过 Go 提供的 RESTful API 获取数据。
2. 数据库设计 (MySQL)
为了支持搜索和分类,我们需要一个简洁高效的表结构:
CREATE TABLE `tech_posts` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL COMMENT '帖子标题',
`summary` text COMMENT '摘要',
`url` varchar(512) NOT NULL COMMENT '原文链接',
`category` varchar(50) DEFAULT 'General' COMMENT '分类:Java/Python/Go',
`msgid` varchar(128) UNIQUE COMMENT '对应企微任务ID',
`created_at` timestamp DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `idx_category` (`category`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
3. Go 实现:提供收藏列表 API
我们使用 Gin 框架快速实现一个支持分类筛选的分页接口。
package main
import (
"github.com/gin-gonic/gin"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"net/http"
"strconv"
)
type TechPost struct {
ID uint `json:"id"`
Title string `json:"title"`
Summary string `json:"summary"`
Url string `json:"url"`
Category string `json:"category"`
}
var db *gorm.DB
func initDB() {
dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
var err error
db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic("数据库连接失败")
}
}
func getPosts(c *gin.Context) {
category := c.Query("category")
page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
pageSize := 10
var posts []TechPost
query := db.Model(&TechPost{})
if category != "" {
query = query.Where("category = ?", category)
}
// 分页查询
query.Offset((page - 1) * pageSize).Limit(pageSize).Order("created_at desc").Find(&posts)
c.JSON(http.StatusOK, gin.H{
"code": 200,
"data": posts,
})
}
func main() {
initDB()
r := gin.Default()
r.GET("/api/v1/posts", getPosts)
r.Run(":8081")
}
4. 关键:如何打通“发送”与“存储”?
在执行上一篇提到的 SendExternalGroupMsg 函数时,我们需要在 err == nil 的分支里加入一行:
// 发送成功后同步到数据库
go func() {
newPost := TechPost{
Title: task.Title,
Url: task.Url,
Category: task.Category,
// ... 其他字段
}
db.Create(&newPost)
}()
5. 进阶:如何增加“互动”?
既然是收藏夹,可以利用 Go 轻松扩展:
-
点击统计:小程序跳转 URL 前先请求 Go 后端进行计数,分析哪类技术帖最受欢迎。
-
搜索增强:如果帖子多了,可以引入 Elasticsearch 或简单的 Bleve(Go 原生全文检索库)来实现模糊搜索。
转载自CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/2501_94198149/article/details/157772434



