add credits and song description section
This commit is contained in:
parent
e7aa7403c7
commit
58a4755fcf
36
lyrics.go
36
lyrics.go
|
@ -2,7 +2,6 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
|
||||||
"net/http"
|
"net/http"
|
||||||
"path"
|
"path"
|
||||||
"text/template"
|
"text/template"
|
||||||
|
@ -12,20 +11,19 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
type song struct {
|
type song struct {
|
||||||
Artist string
|
Artist string
|
||||||
Title string
|
Title string
|
||||||
Image string
|
Image string
|
||||||
Lyrics string
|
Lyrics string
|
||||||
|
Credits map[string]string
|
||||||
|
About string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *song) parseLyrics(doc *goquery.Document) {
|
func (s *song) parseLyrics(doc *goquery.Document) {
|
||||||
doc.Find("[data-lyrics-container='true']").Each(func(i int, ss *goquery.Selection) {
|
doc.Find("[data-lyrics-container='true']").Each(func(i int, ss *goquery.Selection) {
|
||||||
h, err := ss.Html()
|
if h, err := ss.Html(); err == nil {
|
||||||
if err != nil {
|
s.Lyrics += h
|
||||||
log.Println(err)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
s.Lyrics += h
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,9 +39,27 @@ func (s *song) parseMetadata(doc *goquery.Document) {
|
||||||
s.Artist = artist
|
s.Artist = artist
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *song) parseCredits(doc *goquery.Document) {
|
||||||
|
credits := make(map[string]string)
|
||||||
|
|
||||||
|
doc.Find("[class*='SongInfo__Credit']").Each(func(i int, ss *goquery.Selection) {
|
||||||
|
key := ss.Children().First().Text()
|
||||||
|
value := ss.Children().Last().Text()
|
||||||
|
credits[key] = value
|
||||||
|
})
|
||||||
|
|
||||||
|
s.Credits = credits
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *song) parseAbout(doc *goquery.Document) {
|
||||||
|
s.About = doc.Find("[class*='SongDescription__Content']").Text()
|
||||||
|
}
|
||||||
|
|
||||||
func (s *song) parse(doc *goquery.Document) {
|
func (s *song) parse(doc *goquery.Document) {
|
||||||
s.parseLyrics(doc)
|
s.parseLyrics(doc)
|
||||||
s.parseMetadata(doc)
|
s.parseMetadata(doc)
|
||||||
|
s.parseCredits(doc)
|
||||||
|
s.parseAbout(doc)
|
||||||
}
|
}
|
||||||
|
|
||||||
func lyricsHandler(w http.ResponseWriter, r *http.Request) {
|
func lyricsHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
|
@ -77,7 +77,6 @@ a {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
gap: 0.5rem;
|
gap: 0.5rem;
|
||||||
text-align: center;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#metadata h1 {
|
#metadata h1 {
|
||||||
|
@ -98,8 +97,48 @@ a {
|
||||||
}
|
}
|
||||||
|
|
||||||
#container {
|
#container {
|
||||||
display: flex;
|
display: grid;
|
||||||
|
grid-template-columns: 1fr 3fr 1fr;
|
||||||
padding: 2rem;
|
padding: 2rem;
|
||||||
gap: 5rem;
|
}
|
||||||
justify-content: center;
|
|
||||||
|
#credits {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#title {
|
||||||
|
font-size: 2rem;
|
||||||
|
color: #1B1A17;
|
||||||
|
}
|
||||||
|
|
||||||
|
#credits summary {
|
||||||
|
font-size: 1.4rem;
|
||||||
|
cursor: pointer;
|
||||||
|
color: #1E1E1E;
|
||||||
|
}
|
||||||
|
|
||||||
|
#credits p {
|
||||||
|
font-size: 1.3rem;
|
||||||
|
padding: 0.5rem;
|
||||||
|
color: #171717;
|
||||||
|
}
|
||||||
|
|
||||||
|
#info {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#about {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#about p {
|
||||||
|
font-size: 1.4rem;
|
||||||
|
color: #171717;
|
||||||
|
line-height: 1.8rem;
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,21 @@
|
||||||
<h1>{{.Title}}</h1>
|
<h1>{{.Title}}</h1>
|
||||||
</div>
|
</div>
|
||||||
<div id="lyrics">{{.Lyrics}}</div>
|
<div id="lyrics">{{.Lyrics}}</div>
|
||||||
|
<div id="info">
|
||||||
|
<div id="about">
|
||||||
|
<h1 id="title">About</h1>
|
||||||
|
<p>{{.About}}</p>
|
||||||
|
</div>
|
||||||
|
<div id="credits">
|
||||||
|
<h1 id="title">Credits</h1>
|
||||||
|
{{range $key, $val := .Credits}}
|
||||||
|
<details>
|
||||||
|
<summary>{{$key}}</summary>
|
||||||
|
<p>{{$val}}</p>
|
||||||
|
</details>
|
||||||
|
{{end}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user