⏱️ GetSecurityAdvisoriesSince
获取自指定时间以来更新的安全公告(增量同步)。
何时使用
⏱️ 定时任务增量同步公告库,避免每次全量拉取;🛡️ 维护本地公告缓存并保持新鲜;🔔 触发告警:每次只处理新增 / 更新的公告。
签名
go
func (c *ComposerClient) GetSecurityAdvisoriesSince(updatedSince time.Time) (*domain.AdvisoriesResponse, error)参数
| 参数 | 类型 | 说明 |
|---|---|---|
updatedSince | time.Time | 起始时间,SDK 会取其 Unix 时间戳作为 updatedSince 查询参数 |
返回值
| 值 | 类型 | 说明 |
|---|---|---|
| 结果 | *domain.AdvisoriesResponse | Advisories 为 map[包名][]*Advisory,仅含该时间后更新的公告 |
| 错误 | error | HTTP 失败、非 200、JSON 解析失败时返回 |
对应端点:GET https://packagist.org/api/security-advisories/?updatedSince={timestamp}。
示例
go
package main
import (
"fmt"
"log"
"time"
"github.com/scagogogo/composer-skills/pkg/client"
)
func main() {
c := client.NewComposerClient(30 * time.Second)
// 拉取最近 24 小时内更新的公告
since := time.Now().Add(-24 * time.Hour)
resp, err := c.GetSecurityAdvisoriesSince(since)
if err != nil {
log.Fatal(err)
}
fmt.Printf("最近 24 小时更新公告的包数: %d\n", len(resp.Advisories))
for pkg, advisories := range resp.Advisories {
for _, a := range advisories {
fmt.Printf(" %s: %s (报告于 %s)\n", pkg, a.Title, a.ReportedAt)
}
}
}进阶
增量同步建议
持久化「上次同步时间」,每轮将其作为 updatedSince 传入,处理返回结果后再保存当前时间为新游标。注意公告可能被更新而非新增,需用 AdvisoryID 做幂等。
- 🔒 首次全量加载用
GetSecurityAdvisories。 - 🎯 只查特定包用
GetSecurityAdvisoriesForPackages。