Skip to content

⏱️ GetSecurityAdvisoriesSince

获取自指定时间以来更新的安全公告(增量同步)。

何时使用

⏱️ 定时任务增量同步公告库,避免每次全量拉取;🛡️ 维护本地公告缓存并保持新鲜;🔔 触发告警:每次只处理新增 / 更新的公告。

签名

go
func (c *ComposerClient) GetSecurityAdvisoriesSince(updatedSince time.Time) (*domain.AdvisoriesResponse, error)

参数

参数类型说明
updatedSincetime.Time起始时间,SDK 会取其 Unix 时间戳作为 updatedSince 查询参数

返回值

类型说明
结果*domain.AdvisoriesResponseAdvisoriesmap[包名][]*Advisory,仅含该时间后更新的公告
错误errorHTTP 失败、非 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 做幂等。

基于 MIT 许可证发布