Skip to content

📦 GetPackage

获取 Packagist 上指定包的完整信息,包含版本、维护者、下载统计与 GitHub 指标。

何时使用

📦 需要展示单个包的详细元数据时,例如依赖看板、包详情页;🛠️ 自建镜像时拉取最新全量信息;📈 监控某个包的下载量与 star 变化。

签名

go
func (c *ComposerClient) GetPackage(packageName string) (*domain.ComposerPackageInfo, error)

参数

参数类型说明
packageNamestring包名,格式 vendor/package,如 symfony/console

返回值

类型说明
结果*domain.ComposerPackageInfo包信息,Package 字段为详细元数据
错误errorHTTP 失败、非 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 填为当前时间,方便直接入库。

基于 MIT 许可证发布