diff options
| author | Julian Hurst <julian.hurst92@gmail.com> | 2020-10-15 18:38:21 +0200 |
|---|---|---|
| committer | Julian Hurst <julian.hurst92@gmail.com> | 2020-10-15 18:38:21 +0200 |
| commit | 9550f76265805e9bfe0616a7834a9eed4d95e368 (patch) | |
| tree | 8d90dc03290a9c565a3f7779d94b6c9946ac4801 | |
| parent | 51bf1944bedccda8fc68ca4745bb9c53afeb9d78 (diff) | |
| download | grimtube-9550f76265805e9bfe0616a7834a9eed4d95e368.tar.gz | |
Add multi language support
| -rw-r--r-- | grimtube.go | 7 | ||||
| -rw-r--r-- | static/style-halloween.css | 8 | ||||
| -rw-r--r-- | static/style.css | 16 | ||||
| -rw-r--r-- | templates/search.html | 14 | ||||
| -rw-r--r-- | ytparser/ytparser.go | 23 |
5 files changed, 53 insertions, 15 deletions
diff --git a/grimtube.go b/grimtube.go index 9851c8d..416bc7f 100644 --- a/grimtube.go +++ b/grimtube.go @@ -40,6 +40,7 @@ func search(w http.ResponseWriter, r *http.Request) { query := r.URL.Query() term := query.Get("term") sPage := query.Get("page") + lang := query.Get("lang") var page int if sPage == "" { page = 0 @@ -51,8 +52,8 @@ func search(w http.ResponseWriter, r *http.Request) { page = p } } - log.Printf("searching: %s, page: %d\n", term, page) - items, err := ytparser.Search(term, page) + log.Printf("searching: %s, page: %d, lang: %s\n", term, page, lang) + items, err := ytparser.Search(term, page, lang) if err != nil { log.Println(err) data := struct { @@ -66,10 +67,12 @@ func search(w http.ResponseWriter, r *http.Request) { Items []ytparser.Item Term string Page int + Lang string }{ items, term, page, + lang, } serve(w, "templates/search.html", data) } diff --git a/static/style-halloween.css b/static/style-halloween.css index def4dac..0598e83 100644 --- a/static/style-halloween.css +++ b/static/style-halloween.css @@ -54,3 +54,11 @@ iframe { .comments { font-size: small; } + +input#term { + width: 90%; +} + +select#lang { + width: calc(10% - 10px); +} diff --git a/static/style.css b/static/style.css index 62ec755..a4f71c5 100644 --- a/static/style.css +++ b/static/style.css @@ -44,3 +44,19 @@ iframe { .comments { font-size: small; } + +input#term { + width: 90%; + height: 22px; + border: 1px solid black; + padding: 0px; + margin: 0px; +} + +select#lang { + width: calc(10% - 8px); + height: 22px; + border: 1px solid black; + padding: 0px; + margin: 0px; +} diff --git a/templates/search.html b/templates/search.html index 517e5d0..e5a8e34 100644 --- a/templates/search.html +++ b/templates/search.html @@ -2,6 +2,11 @@ {{define "content"}} <form action="/search" method="get"> <input id="term" name="term" type="text" placeholder="search" required> + <select id="lang" name="lang"> + <option>en</option> + <option>fr</option> + <option>de</option> + </select> </form> <table> {{range .Items}} @@ -10,8 +15,9 @@ <a href="/embed?id={{.Id}}"><img width=240 src="{{.Thumb}}"></a> </td> <td> - <a href="/embed?id={{.Id}}"><span>{{.Title}}</span></a><br/> - <a href="{{.Url}}"><span class="comments">Comments</span></a> + <p><a href="/embed?id={{.Id}}">{{.Title}}</a></p> + <p class="comments"><a href="{{.Url}}">Comments</a></p> + <p class="published">{{.Published}}</p> </td> <td> <a href="{{.ChannelUrl}}"><span>{{.ChannelTitle}}</span></a> @@ -19,6 +25,6 @@ </tr> {{end}} </table> - <a href="/search?term={{.Term}}&page={{dec .Page}}">Prev Page</a> | - <a href="/search?term={{.Term}}&page={{inc .Page}}">Next Page</a> + <a href="/search?term={{.Term}}&page={{dec .Page}}&lang={{.Lang}}">Prev Page</a> | + <a href="/search?term={{.Term}}&page={{inc .Page}}&lang={{.Lang}}">Next Page</a> {{end}} diff --git a/ytparser/ytparser.go b/ytparser/ytparser.go index 57c2a31..fe9ae66 100644 --- a/ytparser/ytparser.go +++ b/ytparser/ytparser.go @@ -22,6 +22,7 @@ type Item struct { Thumb string ChannelTitle string ChannelUrl string + Published string } func (item Item) Format(t *template.Template) string { @@ -38,10 +39,8 @@ func (item Item) String() string { } func parsejson(data string) ([]Item, error) { - //fmt.Println(data) dec := json.NewDecoder(strings.NewReader(data)) - depth := 0 isArray := false isValue := false @@ -116,6 +115,12 @@ func parsejson(data string) ([]Item, error) { names[depth-1] == "url" { item.Thumb = t } + if depth >= 3 && + names[depth-3] == "videoRenderer" && + names[depth-2] == "publishedTimeText" && + names[depth-1] == "simpleText" { + item.Published = t + } isValue = false } } @@ -123,20 +128,18 @@ func parsejson(data string) ([]Item, error) { } } return items, nil - //fmt.Println(names) } func PrintItems(items []Item, format string) { t := template.Must(template.New("items").Parse(format)) for _, i := range items { fmt.Println(i.Format(t)) - //fmt.Println(i) } } -func request(query string, page int) (string, error) { +func request(query string, page int, lang string) (string, error) { q := url.QueryEscape(query) - url := fmt.Sprintf("https://www.youtube.com/results?search_query=%s&page=%d", q, page) + url := fmt.Sprintf("https://www.youtube.com/results?search_query=%s&page=%d&hl=%s", q, page, lang) res, err := http.DefaultClient.Get(url) if err != nil { return "", err @@ -150,12 +153,14 @@ func request(query string, page int) (string, error) { startData := body[idx:] idx = bytes.Index(startData, []byte(";\n")) startData = startData[:idx] - //fmt.Println(string(startData)) return string(startData), nil } -func Search(query string, page int) ([]Item, error) { - data, err := request(query, page) +func Search(query string, page int, lang string) ([]Item, error) { + if lang == "" { + lang = "en" + } + data, err := request(query, page, lang) if err != nil { return nil, err } |
