Merge pull request #22 from popeyelau/main

youtube 改为接口调用
pull/24/merge
肥羊 3 years ago committed by GitHub
commit ebfd2a3ccc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 34
      Golang/liveurls/youtube.go

@ -8,14 +8,15 @@
package liveurls
import (
"bytes"
"fmt"
"github.com/tidwall/gjson"
"io"
"net/http"
"strconv"
"sync"
"time"
"github.com/dlclark/regexp2"
"github.com/etherlabsio/go-m3u8/m3u8"
)
@ -40,8 +41,11 @@ func (y *Youtube) GetLiveUrl() any {
},
//Transport: &http.Transport{Proxy: http.ProxyURL(proxyUrl)},
}
r, _ := http.NewRequest("GET", fmt.Sprintf("https://m.youtube.com/watch?v=%v", y.Rid), nil)
r.Header.Add("user-agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 16_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.3 Mobile/15E148 Safari/604.1")
json := []byte(fmt.Sprintf(`{"context": {"client": {"hl": "zh","clientVersion": "16.20","clientName": "ANDROID"}},"videoId": "%s"}`, y.Rid))
reqBody := bytes.NewBuffer(json)
r, _ := http.NewRequest("POST", "https://www.youtube.com/youtubei/v1/player", reqBody)
r.Header.Add("user-agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36")
resp, err := client.Do(r)
if err != nil {
return err
@ -50,17 +54,23 @@ func (y *Youtube) GetLiveUrl() any {
body, _ := io.ReadAll(resp.Body)
str := string(body)
reg := regexp2.MustCompile(`(?<=hlsManifestUrl":").*\.m3u8`, regexp2.RE2)
res, _ := reg.FindStringMatch(str)
if res == nil {
return nil
stream := gjson.Get(str, "streamingData.hlsManifestUrl")
if stream.Exists() && len(stream.String()) > 0 {
quality := y.getResolution(stream.String())
if quality != nil {
return *quality
}
return stream
}
stream := res.Captures[0].String()
quality := y.getResolution(stream)
if quality != nil {
return *quality
formats := gjson.Get(str, "streamingData.formats")
if formats.Exists() && formats.IsArray() {
arr := formats.Array()
playback := arr[len(arr)-1].Get("url").String()
return playback
}
return stream
return nil
}
func (y *Youtube) getResolution(liveurl string) *string {

Loading…
Cancel
Save