Feature: handle search models
This commit is contained in:
parent
7f1e7b3616
commit
a5fbfee28e
4 changed files with 59 additions and 8 deletions
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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"`
|
||||
}
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in a new issue