Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

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