🔍 搜索结果模型
pkg/domain 中描述 Packagist 搜索结果的结构体。对应 https://packagist.org/search.json 接口,由 ComposerClient.SearchPackages / SearchPackagesByTags / SearchPackagesByType 反序列化得到。
类型总览
| 类型 | 角色 |
|---|---|
SearchResponse | 搜索响应顶层(结果列表 + 总数 + 分页链接) |
SearchResult | 单条搜索结果 |
🔎 SearchResponse
搜索响应的顶层结构。
go
type SearchResponse struct {
Results []SearchResult `json:"results"`
Total int `json:"total"`
Next string `json:"next,omitempty"`
}| 字段 | 类型 | 说明 |
|---|---|---|
Results | []SearchResult | 当前页的搜索结果列表 |
Total | int | 匹配的总结果数(跨所有页) |
Next | string | 下一页的 URL,没有下一页时为空字符串 |
翻页方式
Next 字段是 Packagist 返回的下一页完整 URL。在 SDK 内部已封装 page/perPage 参数,推荐直接通过 SearchPackages(query, perPage, page) 翻页,而不必手动解析 Next。
📄 SearchResult
单条搜索结果,描述一个匹配的包。
go
type SearchResult struct {
Name string `json:"name"`
Description string `json:"description"`
URL string `json:"url"`
Repository string `json:"repository"`
Downloads int `json:"downloads"`
Favers int `json:"favers"`
}| 字段 | 类型 | 说明 |
|---|---|---|
Name | string | 包名(如 monolog/monolog) |
Description | string | 包描述 |
URL | string | 包在 Packagist 上的页面 URL |
Repository | string | 源代码仓库 URL |
Downloads | int | 下载次数 |
Favers | int | 收藏次数 |
注意命名冲突
pkg/composer 包内也有一个名为 SearchResult 的结构体(用于解析本地 composer search 的 JSON 输出),字段不同。两者分属不同包,导入时按 domain.SearchResponse(API 搜索)与 composer.SearchResult(本地 CLI 搜索)区分。
🚀 示例:搜索并分页
go
package main
import (
"fmt"
"log"
"time"
"github.com/scagogogo/composer-skills/pkg/client"
)
func main() {
c := client.NewComposerClient(30 * time.Second)
const perPage = 15
for page := 1; ; page++ {
resp, err := c.SearchPackages("http", perPage, page)
if err != nil {
log.Fatal(err)
}
for _, r := range resp.Results {
fmt.Printf("%-40s 下载:%-8d ★:%d\n", r.Name, r.Downloads, r.Favers)
}
if resp.Next == "" || len(resp.Results) == 0 {
break
}
}
}🔀 按标签 / 类型搜索
go
// 按标签搜索
byTags, _ := c.SearchPackagesByTags([]string{"logging", "psr-3"}, 15, 1)
// 按类型搜索(同时带查询词)
byType, _ := c.SearchPackagesByType("log", "library", 15, 1)三种搜索方法返回的都是 *domain.SearchResponse,结构完全一致。
📚 相关文档
- 🔙 返回 Domain 概览
- 📦 拿到包名后查详情 → package.md
- 📊 流行包列表 → create-package.md