Refactor API selection
[yt-mango.git] / apiclassic / grab.go
blob672188eff84e5e0d44634dc4203e351a1bcfbe82
1 package apiclassic
3 import (
4 "net/http"
5 "errors"
6 "encoding/xml"
7 "github.com/PuerkitoBio/goquery"
8 "github.com/terorie/yt-mango/data"
9 "github.com/terorie/yt-mango/common"
12 const mainURL = "https://www.youtube.com/watch?has_verified=1&bpctr=6969696969&v="
13 const subtitleURL = "https://video.google.com/timedtext?type=list&v="
15 // Grabs a HTML video page and returns the document tree
16 func grab(v *data.Video) (doc *goquery.Document, err error) {
17 req, err := http.NewRequest("GET", mainURL + v.ID, nil)
18 if err != nil { return }
19 requestHeader(&req.Header)
21 res, err := common.Client.Do(req)
22 if err != nil { return }
23 if res.StatusCode != 200 { return nil, errors.New("HTTP failure") }
25 defer res.Body.Close()
26 doc, err = goquery.NewDocumentFromReader(res.Body)
27 if err != nil { return nil, err }
29 return
32 // Grabs and parses a subtitle list
33 func grabSubtitleList(v *data.Video) (err error) {
34 req, err := http.NewRequest("GET", subtitleURL + v.ID, nil)
35 if err != nil { return err }
37 res, err := client.Do(req)
38 if err != nil { return err }
39 if res.StatusCode != 200 { return errors.New("HTTP failure") }
41 defer res.Body.Close()
42 decoder := xml.NewDecoder(res.Body)
44 var tracks XMLSubTrackList
45 err = decoder.Decode(&tracks)
46 if err != nil { return err }
48 for _, track := range tracks.Tracks {
49 v.Subtitles = append(v.Subtitles, track.LangCode)
52 return