Grab transcript from youtube matching the user's language instead of the first one
This commit is contained in:
parent
be9046aee9
commit
be37d889a0
@ -130,7 +130,11 @@ func Cli(version string) (message string, err error) {
|
|||||||
|
|
||||||
if !currentFlags.YouTubeComments || currentFlags.YouTubeTranscript {
|
if !currentFlags.YouTubeComments || currentFlags.YouTubeTranscript {
|
||||||
var transcript string
|
var transcript string
|
||||||
if transcript, err = fabric.YouTube.GrabTranscript(videoId); err != nil {
|
var language = "en"
|
||||||
|
if currentFlags.Language != "" {
|
||||||
|
language = currentFlags.Language
|
||||||
|
}
|
||||||
|
if transcript, err = fabric.YouTube.GrabTranscript(videoId, language); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,6 +10,7 @@ import (
|
|||||||
"google.golang.org/api/option"
|
"google.golang.org/api/option"
|
||||||
"google.golang.org/api/youtube/v3"
|
"google.golang.org/api/youtube/v3"
|
||||||
"log"
|
"log"
|
||||||
|
"net/url"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
@ -61,17 +62,17 @@ func (o *YouTube) GetVideoId(url string) (ret string, err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *YouTube) GrabTranscriptForUrl(url string) (ret string, err error) {
|
func (o *YouTube) GrabTranscriptForUrl(url string, language string) (ret string, err error) {
|
||||||
var videoId string
|
var videoId string
|
||||||
if videoId, err = o.GetVideoId(url); err != nil {
|
if videoId, err = o.GetVideoId(url); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
return o.GrabTranscript(videoId)
|
return o.GrabTranscript(videoId, language)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *YouTube) GrabTranscript(videoId string) (ret string, err error) {
|
func (o *YouTube) GrabTranscript(videoId string, language string) (ret string, err error) {
|
||||||
var transcript string
|
var transcript string
|
||||||
if transcript, err = o.GrabTranscriptBase(videoId); err != nil {
|
if transcript, err = o.GrabTranscriptBase(videoId, language); err != nil {
|
||||||
err = fmt.Errorf("transcript not available. (%v)", err)
|
err = fmt.Errorf("transcript not available. (%v)", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -89,14 +90,14 @@ func (o *YouTube) GrabTranscript(videoId string) (ret string, err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *YouTube) GrabTranscriptBase(videoId string) (ret string, err error) {
|
func (o *YouTube) GrabTranscriptBase(videoId string, language string) (ret string, err error) {
|
||||||
if err = o.initService(); err != nil {
|
if err = o.initService(); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
url := "https://www.youtube.com/watch?v=" + videoId
|
watchUrl := "https://www.youtube.com/watch?v=" + videoId
|
||||||
var resp string
|
var resp string
|
||||||
if resp, err = soup.Get(url); err != nil {
|
if resp, err = soup.Get(watchUrl); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -117,6 +118,16 @@ func (o *YouTube) GrabTranscriptBase(videoId string) (ret string, err error) {
|
|||||||
|
|
||||||
if len(captionTracks) > 0 {
|
if len(captionTracks) > 0 {
|
||||||
transcriptURL := captionTracks[0].BaseURL
|
transcriptURL := captionTracks[0].BaseURL
|
||||||
|
for _, captionTrack := range captionTracks {
|
||||||
|
parsedUrl, error := url.Parse(captionTrack.BaseURL)
|
||||||
|
if error != nil {
|
||||||
|
err = fmt.Errorf("error parsing caption track")
|
||||||
|
}
|
||||||
|
parsedUrlParams, _ := url.ParseQuery(parsedUrl.RawQuery)
|
||||||
|
if parsedUrlParams["lang"][0] == language {
|
||||||
|
transcriptURL = captionTrack.BaseURL
|
||||||
|
}
|
||||||
|
}
|
||||||
ret, err = soup.Get(transcriptURL)
|
ret, err = soup.Get(transcriptURL)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -212,7 +223,7 @@ func (o *YouTube) Grab(url string, options *Options) (ret *VideoInfo, err error)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if options.Transcript {
|
if options.Transcript {
|
||||||
if ret.Transcript, err = o.GrabTranscript(videoId); err != nil {
|
if ret.Transcript, err = o.GrabTranscript(videoId, "en"); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user