From 8cf52431341a390e11ecf31f88d96a72f4295e12 Mon Sep 17 00:00:00 2001 From: NewName Date: Tue, 20 May 2025 16:16:12 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dtag=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ghproxy/public/search.html | 21 +++++++++++++++----- ghproxy/search.go | 40 ++++++++++++++++++++++++++++++++++---- 2 files changed, 52 insertions(+), 9 deletions(-) diff --git a/ghproxy/public/search.html b/ghproxy/public/search.html index 92ff52b..d3575bc 100644 --- a/ghproxy/public/search.html +++ b/ghproxy/public/search.html @@ -528,13 +528,24 @@ return; } + console.log('搜索结果:', results); + results.forEach(result => { + console.log('处理结果:', result); + const card = document.createElement('div'); card.className = 'result-card'; - const stars = result.star_count ? `⭐ ${formatNumber(result.star_count)}` : ''; - const pulls = result.pull_count ? `⬇️ ${formatNumber(result.pull_count)}` : ''; - const repoName = result.namespace ? `${result.namespace}/${result.name}` : result.name; + const name = result.name || ''; + const namespace = result.namespace || ''; + const description = result.description || '暂无描述'; + const starCount = result.star_count || 0; + const pullCount = result.pull_count || 0; + const lastUpdated = result.last_updated || new Date(); + + const stars = starCount ? `⭐ ${formatNumber(starCount)}` : ''; + const pulls = pullCount ? `⬇️ ${formatNumber(pullCount)}` : ''; + const repoName = namespace ? `${namespace}/${name}` : name; const officialBadge = result.is_official ? '官方' : ''; const orgBadge = result.organization ? `By ${result.organization}` : ''; @@ -544,10 +555,10 @@ ${officialBadge} ${orgBadge} -
${result.description || '暂无描述'}
+
${description}
${stars} ${pulls} - 更新于 ${formatTimeAgo(result.last_updated)} + 更新于 ${formatTimeAgo(lastUpdated)}
`; diff --git a/ghproxy/search.go b/ghproxy/search.go index 7dd8392..d559ab2 100644 --- a/ghproxy/search.go +++ b/ghproxy/search.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "fmt" + "io" "net/http" "net/url" "sync" @@ -126,6 +127,13 @@ func searchDockerHub(ctx context.Context, query string, page, pageSize int) (*Se return nil, err } + // 添加调试日志 + fmt.Printf("搜索结果: 总数=%d, 结果数=%d\n", result.Count, len(result.Results)) + for i, repo := range result.Results { + fmt.Printf("仓库[%d]: 名称=%s, 命名空间=%s, 描述=%s, 是否官方=%v\n", + i, repo.Name, repo.Namespace, repo.Description, repo.IsOfficial) + } + setCacheResult(cacheKey, &result) return &result, nil } @@ -148,27 +156,47 @@ func getRepositoryTags(ctx context.Context, namespace, name string, page, pageSi params.Set("page", fmt.Sprintf("%d", page)) params.Set("page_size", fmt.Sprintf("%d", pageSize)) - req, err := http.NewRequestWithContext(ctx, "GET", baseURL+"?"+params.Encode(), nil) + fullURL := baseURL + "?" + params.Encode() + fmt.Printf("请求标签URL: %s\n", fullURL) + + req, err := http.NewRequestWithContext(ctx, "GET", fullURL, nil) if err != nil { - return nil, err + fmt.Printf("创建标签请求失败: %v\n", err) + return nil, fmt.Errorf("创建标签请求失败: %v", err) } + // 添加必要的请求头 + req.Header.Set("Accept", "application/json") + req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36") + resp, err := http.DefaultClient.Do(req) if err != nil { - return nil, err + fmt.Printf("发送标签请求失败: %v\n", err) + return nil, fmt.Errorf("发送标签请求失败: %v", err) } defer resp.Body.Close() + // 检查响应状态码 + if resp.StatusCode != http.StatusOK { + body, _ := io.ReadAll(resp.Body) + fmt.Printf("获取标签失败: 状态码=%d, 响应体=%s\n", resp.StatusCode, string(body)) + return nil, fmt.Errorf("获取标签失败: 状态码=%d", resp.StatusCode) + } + var result struct { Count int `json:"count"` Next string `json:"next"` Previous string `json:"previous"` Results []TagInfo `json:"results"` } + if err := json.NewDecoder(resp.Body).Decode(&result); err != nil { - return nil, err + fmt.Printf("解析标签响应失败: %v\n", err) + return nil, fmt.Errorf("解析标签响应失败: %v", err) } + fmt.Printf("获取到标签: 总数=%d, 结果数=%d\n", result.Count, len(result.Results)) + setCacheResult(cacheKey, result.Results) return result.Results, nil } @@ -200,6 +228,10 @@ func RegisterSearchRoute(r *gin.Engine) { r.GET("/tags/:namespace/:name", func(c *gin.Context) { namespace := c.Param("namespace") name := c.Param("name") + + // 打印请求参数 + fmt.Printf("获取标签请求: namespace=%s, name=%s\n", namespace, name) + page := 1 pageSize := 100 if p := c.Query("page"); p != "" {