📦 GetPackage
获取 Packagist 上指定包的完整信息,包含版本、维护者、下载统计与 GitHub 指标。
何时使用
📦 需要展示单个包的详细元数据时,例如依赖看板、包详情页;🛠️ 自建镜像时拉取最新全量信息;📈 监控某个包的下载量与 star 变化。
签名
go
func (c *ComposerClient) GetPackage(packageName string) (*domain.ComposerPackageInfo, error)参数
| 参数 | 类型 | 说明 |
|---|---|---|
packageName | string | 包名,格式 vendor/package,如 symfony/console |
返回值
| 值 | 类型 | 说明 |
|---|---|---|
| 结果 | *domain.ComposerPackageInfo | 包信息,Package 字段为详细元数据 |
| 错误 | error | HTTP 失败、非 200、JSON 解析失败时返回 |
对应端点:GET https://packagist.org/packages/{name}.json。
示例
go
package main
import (
"fmt"
"log"
"time"
"github.com/scagogogo/composer-skills/pkg/client"
)
func main() {
c := client.NewComposerClient(30 * time.Second)
info, err := c.GetPackage("symfony/console")
if err != nil {
log.Fatalf("获取包信息失败: %v", err)
}
fmt.Printf("包名: %s\n", info.PackageName)
fmt.Printf("描述: %s\n", info.Package.Description)
fmt.Printf("类型: %s\n", info.Package.Type)
fmt.Printf("GitHub stars: %d\n", info.Package.GithubStars)
fmt.Printf("总下载: %d (本月 %d, 今日 %d)\n",
info.Package.Downloads.Total,
info.Package.Downloads.Monthly,
info.Package.Downloads.Daily,
)
fmt.Printf("版本数: %d\n", len(info.Package.Versions))
}进阶
响应解析
端点返回 {"package": {...}} 外层包装。SDK 内部先解到 wrapper 取出 PackageInfo,再封装为 ComposerPackageInfo,并把 CreateTime / UpdateTime 填为当前时间,方便直接入库。
- 📊 只需下载统计与版本列表,用
GetPackageStats。 - 🧩 需要 Composer V2 解析器格式的版本树,用
GetPackageWithV2Metadata。 - 🚀 增量同步用
GetPackageChanges。