59 lines
1.7 KiB
Go
59 lines
1.7 KiB
Go
|
package main
|
||
|
|
||
|
import(
|
||
|
"fmt"
|
||
|
"log"
|
||
|
"encoding/json"
|
||
|
"os"
|
||
|
"net/http"
|
||
|
"net/url"
|
||
|
"io/ioutil"
|
||
|
"regexp"
|
||
|
)
|
||
|
|
||
|
var youtubeToken = os.Getenv("YOUTUBE_TOKEN")
|
||
|
var youtube_api = "https://www.googleapis.com/youtube/v3/search"
|
||
|
var youtube_video_baseurl = "https://youtube.com/watch?v="
|
||
|
|
||
|
func search_on_youtube(searchString string) (youtube_url string) {
|
||
|
reg, _ := regexp.Compile("[^a-zA-Z0-9 -]+")
|
||
|
processedString := reg.ReplaceAllString(searchString, "")
|
||
|
t := &url.URL{Path: processedString}
|
||
|
http_request := t.String()
|
||
|
http_request_encoded := (youtube_api+"?part=snippet&maxResults=1&q="+http_request+"&key="+youtubeToken)
|
||
|
|
||
|
response, err := http.Get(http_request_encoded)
|
||
|
if err != nil {
|
||
|
fmt.Printf("%s", err)
|
||
|
os.Exit(1)
|
||
|
} else {
|
||
|
defer response.Body.Close()
|
||
|
contents, err := ioutil.ReadAll(response.Body)
|
||
|
if err != nil {
|
||
|
fmt.Printf("%s", err)
|
||
|
os.Exit(1)
|
||
|
}
|
||
|
|
||
|
data := new(youtubeSearchResult)
|
||
|
json.Unmarshal(contents, &data)
|
||
|
|
||
|
if len(data.Items) > 0 {
|
||
|
youtube_url = youtube_video_baseurl + data.Items[0].ID.VideoID
|
||
|
} else {
|
||
|
// TODO: put this spotify track on 'manual donwload queue'
|
||
|
// youtube_url = "could not find track on yt"
|
||
|
f, err := os.OpenFile("manual-download.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
|
||
|
if err != nil {
|
||
|
log.Fatal(err)
|
||
|
}
|
||
|
if _, err := f.Write([]byte(searchString+"\n")); err != nil {
|
||
|
log.Fatal(err)
|
||
|
}
|
||
|
if err := f.Close(); err != nil {
|
||
|
log.Fatal(err)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return
|
||
|
}
|