Feature: handle search models

This commit is contained in:
VnPower 2023-06-03 15:33:13 +07:00
parent 7f1e7b3616
commit a5fbfee28e
Signed by: vnpower
GPG key ID: 881DE3DEB966106C
4 changed files with 59 additions and 8 deletions

View file

@ -29,6 +29,7 @@ const (
ArtworkRankingURL = "https://www.pixiv.net/ranking.php?format=json&mode=%s&content=%s&p=%s"
SearchTagURL = "https://www.pixiv.net/ajax/search/tags/%s"
SearchArtworksURL = "https://www.pixiv.net/ajax/search/artworks/%s?order=%s&mode=%s&p=%s&type=%s"
SearchTopURL = "https://www.pixiv.net/ajax/search/top/%s"
UserInformationURL = "https://www.pixiv.net/ajax/user/%s?full=1"
UserArtworksURL = "https://www.pixiv.net/ajax/user/%s/profile/all"
UserArtworksFullURL = "https://www.pixiv.net/ajax/user/%s/profile/illusts?work_category=illustManga&is_first_page=0&lang=en%s"
@ -436,3 +437,34 @@ func (p *PixivClient) GetTagData(name string) (models.TagDetail, error) {
return tag, nil
}
func (p *PixivClient) GetSearchTop(name string) (*models.SearchResult, error) {
var pr models.PixivResponse
var resultRaw struct {
*models.SearchResult
ArtworksRaw json.RawMessage `json:"illustManga"`
}
var artworks models.SearchArtworks
var result *models.SearchResult
url := fmt.Sprintf(SearchTopURL, name)
s, err := p.TextRequest(url)
err = json.Unmarshal([]byte(s), &pr)
if err != nil {
return nil, err
}
err = json.Unmarshal([]byte(pr.Body), &resultRaw)
result = resultRaw.SearchResult
err = json.Unmarshal([]byte(resultRaw.ArtworksRaw), &artworks)
result.Artworks = artworks
return result, nil
}

View file

@ -148,3 +148,19 @@ type TagDetail struct {
AlternativeName string `json:"word"`
Metadata map[string]string `json:"pixpedia"`
}
type PopularArtworks struct {
Permanent []IllustShort `json:"permanent"`
Recent []IllustShort `json:"recent"`
}
type SearchArtworks struct {
Artworks []IllustShort `json:"data"`
Total int `json:"total"`
}
type SearchResult struct {
Artworks SearchArtworks
Popular PopularArtworks `json:"popular"`
RelatedTags []string `json:"relatedTags"`
}

View file

@ -2,19 +2,21 @@
<div class="container">
<div class="tag-header">
{{ with .Tag }}
<img class="tag-thumbnail" src="{{ .Metadata.image }}" alt="{{ .Name }}" />
<img
class="tag-thumbnail"
src="{{ .Tag.Metadata.image }}"
alt="{{ .Tag.Name }}"
/>
<div class="tag-details">
<b class="main-tag">#{{ .Name }}</b>
<span class="translated-tag">{{ .Metadata.tag }}</span>
<b class="main-tag">#{{ .Tag.Name }}</b>
<span class="translated-tag">{{ .Tag.Metadata.tag }}</span>
<br />
<br />
<span><b>69420</b> works</span>
<span><b>{{ .Data.Artworks.Total }}</b> works</span>
<p class="tag-description">{{ .Metadata.abstract }}</p>
<p class="tag-description">{{ .Tag.Metadata.abstract }}</p>
</div>
{{ end }}
</div>
<!-- Switchers here -->
</div>

View file

@ -113,8 +113,9 @@ func tag_page(c *gin.Context) {
name := c.Param("name")
tag, _ := PC.GetTagData(name)
result, _ := PC.GetSearchTop(name)
c.HTML(http.StatusOK, "tag.html", gin.H{"Tag": tag})
c.HTML(http.StatusOK, "tag.html", gin.H{"Tag": tag, "Data": result})
}
func search(c *gin.Context) {