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
}
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
)