Repository: papagaye744/iptv-go Branch: main Commit: 50048c3bcfab Files: 22 Total size: 138.4 KB Directory structure: gitextract_wb61vjdu/ ├── LICENSE ├── README.md ├── api/ │ ├── index.go │ ├── live.go │ └── yqk/ │ └── yqk.go ├── go.mod ├── list/ │ ├── douyuyqk.go │ ├── huyayqk.go │ ├── tvm3u.go │ └── yylunbo.go ├── liveurls/ │ ├── bilibili.go │ ├── douyin.go │ ├── douyu.go │ ├── huya.go │ ├── itv.go │ ├── youtube.go │ ├── ysptp.go │ └── yy.go ├── package.json ├── utils/ │ ├── http.go │ └── jsRun.go └── vercel.json ================================================ FILE CONTENTS ================================================ ================================================ FILE: LICENSE ================================================ MIT License Copyright (c) 2023 papagaye744 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: README.md ================================================ # 源仓库已闭源 建议自己部署docker的allinone使用,[https://hub.docker.com/r/youshandefeiyang/allinone](https://hub.docker.com/r/youshandefeiyang/allinone) ================================================ FILE: api/index.go ================================================ package handler import ( "Golang/liveurls" "Golang/list" "Golang/utils" "fmt" "net/http" "strings" "encoding/json" "strconv" "log" "os" ) // vercel 平台会将请求传递给该函数,这个函数名随意,但函数参数必须按照该规则。 func Handler(w http.ResponseWriter, r *http.Request) { // 是否禁用TV enableTV := os.Getenv("TV") != "false" path := r.URL.Path ts := utils.DefaultQuery(r, "ts", "") switch path { // 电视直播 case "/tv.m3u": if enableTV { itvm3uobj := &list.Tvm3u{} w.Header().Set("Content-Type", "application/octet-stream") w.Header().Set("Content-Disposition", "attachment; filename=tv.m3u") itvm3uobj.GetTvM3u(w, r.Host) } else { http.Error(w, "公共服务不提供TV直播", http.StatusForbidden) } // 虎牙一起看 case "/huyayqk.m3u": yaobj := &list.HuyaYqk{} res, _ := yaobj.HuYaYqk("https://live.cdn.huya.com/liveHttpUI/getLiveList?iGid=2135") var result list.YaResponse json.Unmarshal(res, &result) pageCount := result.ITotalPage pageSize := result.IPageSize w.Header().Set("Content-Type", "application/octet-stream") w.Header().Set("Content-Disposition", "attachment; filename=huyayqk.m3u") utils.GetTestVideoUrl(w) for i := 1; i <= pageCount; i++ { apiRes, _ := yaobj.HuYaYqk(fmt.Sprintf("https://live.cdn.huya.com/liveHttpUI/getLiveList?iGid=2135&iPageNo=%d&iPageSize=%d", i, pageSize)) var res list.YaResponse json.Unmarshal(apiRes, &res) data := res.VList for _, value := range data { fmt.Fprintf(w, "#EXTINF:-1 tvg-logo=\"%s\" group-title=\"%s\", %s\n", value.SAvatar180, value.SGameFullName, value.SNick) fmt.Fprintf(w, "%s/huya/%v\n", utils.GetLivePrefix(r), value.LProfileRoom) } } // 斗鱼一起看 case "/douyuyqk.m3u": yuobj := &list.DouYuYqk{} resAPI, _ := yuobj.Douyuyqk("https://www.douyu.com/gapi/rkc/directory/mixList/2_208/list") var result list.DouYuResponse json.Unmarshal(resAPI, &result) pageCount := result.Data.Pgcnt w.Header().Set("Content-Type", "application/octet-stream") w.Header().Set("Content-Disposition", "attachment; filename=douyuyqk.m3u") utils.GetTestVideoUrl(w) for i := 1; i <= pageCount; i++ { apiRes, _ := yuobj.Douyuyqk("https://www.douyu.com/gapi/rkc/directory/mixList/2_208/" + strconv.Itoa(i)) var res list.DouYuResponse json.Unmarshal(apiRes, &res) data := res.Data.Rl for _, value := range data { fmt.Fprintf(w, "#EXTINF:-1 tvg-logo=\"https://apic.douyucdn.cn/upload/%s_big.jpg\" group-title=\"%s\", %s\n", value.Av, value.C2name, value.Nn) fmt.Fprintf(w, "%s/douyu/%v\n", utils.GetLivePrefix(r), value.Rid) } } // YY轮播 case "/yylunbo.m3u": yylistobj := &list.Yylist{} w.Header().Set("Content-Type", "application/octet-stream") w.Header().Set("Content-Disposition", "attachment; filename=yylunbo.m3u") utils.GetTestVideoUrl(w) i := 1 for { apiRes := yylistobj.Yylb(fmt.Sprintf("http://rubiks-ipad.yy.com/nav/other/idx/213?channel=appstore&ispType=0&model=iPad8,6&netType=2&os=iOS&osVersion=17.2&page=%d&uid=0&yyVersion=6.17.0", i)) var res list.ApiResponse json.Unmarshal([]byte(apiRes), &res) for _, value := range res.Data.Data { fmt.Fprintf(w, "#EXTINF:-1 tvg-logo=\"%s\" group-title=\"%s\", %s\n", value.Avatar, value.Biz, value.Desc) fmt.Fprintf(w, "%s/yy/%v\n", utils.GetLivePrefix(r), value.Sid) } if res.Data.IsLastPage == 1 { break } i++ } // 其他链接 default: adurl := "https://cdn.jsdelivr.net/gh/feiyangdigital/testvideo/sdr1080pvideo/index.m3u8" params := strings.Split(path, "/") // log.Println("request url: ", path) if len(params) >= 3 { // 解析成功 // 平台 platform := params[1] // 房间号 rid := params[2] // fmt.Fprintf(w, "parsed platform=%s, room=%s", platform, rid) switch platform { case "itv": if enableTV { itvobj := &liveurls.Itv{} cdn := utils.DefaultQuery(r, "cdn", "") if ts == "" { itvobj.HandleMainRequest(w, r, cdn, rid) } else { itvobj.HandleTsRequest(w, ts) } } else { http.Error(w, "公共服务不提供TV直播", http.StatusForbidden) } case "ysptp": if enableTV { ysptpobj := &liveurls.Ysptp{} if ts == "" { ysptpobj.HandleMainRequest(w, r, rid) } else { ysptpobj.HandleTsRequest(w, ts, utils.DefaultQuery(r, "wsTime", "")) } } else { http.Error(w, "公共服务不提供TV直播", http.StatusForbidden) } case "douyin": // 抖音 douyinobj := &liveurls.Douyin{} douyinobj.Rid = rid douyinobj.Stream = utils.DefaultQuery(r, "stream", "flv") http.Redirect(w, r, utils.Duanyan(adurl, douyinobj.GetDouYinUrl()), http.StatusMovedPermanently) case "douyu": // 斗鱼 douyuobj := &liveurls.Douyu{} douyuobj.Rid = rid douyuobj.Stream_type = utils.DefaultQuery(r, "stream", "flv") http.Redirect(w, r, utils.Duanyan(adurl, douyuobj.GetRealUrl()), http.StatusMovedPermanently) case "huya": // 虎牙 huyaobj := &liveurls.Huya{} huyaobj.Rid = rid huyaobj.Cdn = utils.DefaultQuery(r, "cdn", "hwcdn") huyaobj.Media = utils.DefaultQuery(r, "media", "flv") huyaobj.Type = utils.DefaultQuery(r, "cdntype", "nodisplay") if huyaobj.Type == "display" { fmt.Fprintf(w, huyaobj.GetLiveUrl().(string)) } else { http.Redirect(w, r, utils.Duanyan(adurl, huyaobj.GetLiveUrl()), http.StatusMovedPermanently) } case "bilibili": // B站 biliobj := &liveurls.BiliBili{} biliobj.Rid = rid biliobj.Platform = utils.DefaultQuery(r, "platform", "web") biliobj.Quality = utils.DefaultQuery(r, "quality", "10000") biliobj.Line = utils.DefaultQuery(r, "line", "first") http.Redirect(w, r, utils.Duanyan(adurl, biliobj.GetPlayUrl()), http.StatusMovedPermanently) case "youtube": // 油管 ytbObj := &liveurls.Youtube{} ytbObj.Rid = rid ytbObj.Quality = utils.DefaultQuery(r, "quality", "1080") http.Redirect(w, r, utils.Duanyan(adurl, ytbObj.GetLiveUrl()), http.StatusMovedPermanently) case "yy": // YY直播 yyObj := &liveurls.Yy{} yyObj.Rid = rid yyObj.Quality = utils.DefaultQuery(r, "quality", "4") http.Redirect(w, r, utils.Duanyan(adurl, yyObj.GetLiveUrl()), http.StatusMovedPermanently) default: fmt.Fprintf(w, "Unknown platform=%s, room=%s", platform, rid) } } else { log.Println("Invalid path:", path) w.Header().Set("Content-Type", "text/html; charset=utf-8") // http.Error(w, "链接错误!", http.StatusInternalServerError) fmt.Fprintf(w, "

参数错误!


使用教程

") } // log.Println("Invalid path:", path) // fmt.Fprintf(w, "

链接错误!

") } return } ================================================ FILE: api/live.go ================================================ package handler import ( "Golang/liveurls" "Golang/utils" "fmt" "net/http" "strings" "log" "os" ) // vercel 平台会将请求传递给该函数,这个函数名随意,但函数参数必须按照该规则。 func Handler(w http.ResponseWriter, r *http.Request) { adurl := "https://cdn.jsdelivr.net/gh/feiyangdigital/testvideo/sdr1080pvideo/index.m3u8" path := r.URL.Path params := strings.Split(path, "/") // 是否禁用TV enableTV := os.Getenv("TV") != "false" // fmt.Fprintf(w, "request url: %s", path) if len(params) >= 4 { // 解析成功 // 平台 platform := params[2] // 房间号 rid := params[3] ts := utils.DefaultQuery(r, "ts", "") // fmt.Fprintf(w, "parsed platform=%s, room=%s", platform, rid) switch platform { case "itv": if enableTV { itvobj := &liveurls.Itv{} cdn := utils.DefaultQuery(r, "cdn", "") if ts == "" { itvobj.HandleMainRequest(w, r, cdn, rid) } else { itvobj.HandleTsRequest(w, ts) } } else { http.Error(w, "公共服务不提供TV直播", http.StatusForbidden) } case "ysptp": if enableTV { ysptpobj := &liveurls.Ysptp{} if ts == "" { ysptpobj.HandleMainRequest(w, r, rid) } else { ysptpobj.HandleTsRequest(w, ts, utils.DefaultQuery(r, "wsTime", "")) } } else { http.Error(w, "公共服务不提供TV直播", http.StatusForbidden) } case "douyin": // 抖音 douyinobj := &liveurls.Douyin{} douyinobj.Rid = rid douyinobj.Stream = utils.DefaultQuery(r, "stream", "flv") http.Redirect(w, r, utils.Duanyan(adurl, douyinobj.GetDouYinUrl()), http.StatusMovedPermanently) case "douyu": // 斗鱼 douyuobj := &liveurls.Douyu{} douyuobj.Rid = rid douyuobj.Stream_type = utils.DefaultQuery(r, "stream", "flv") http.Redirect(w, r, utils.Duanyan(adurl, douyuobj.GetRealUrl()), http.StatusMovedPermanently) case "huya": // 虎牙 huyaobj := &liveurls.Huya{} huyaobj.Rid = rid huyaobj.Cdn = utils.DefaultQuery(r, "cdn", "hwcdn") huyaobj.Media = utils.DefaultQuery(r, "media", "flv") huyaobj.Type = utils.DefaultQuery(r, "cdntype", "nodisplay") if huyaobj.Type == "display" { fmt.Fprintf(w, huyaobj.GetLiveUrl().(string)) } else { http.Redirect(w, r, utils.Duanyan(adurl, huyaobj.GetLiveUrl()), http.StatusMovedPermanently) } case "bilibili": // B站 biliobj := &liveurls.BiliBili{} biliobj.Rid = rid biliobj.Platform = utils.DefaultQuery(r, "platform", "web") biliobj.Quality = utils.DefaultQuery(r, "quality", "10000") biliobj.Line = utils.DefaultQuery(r, "line", "first") http.Redirect(w, r, utils.Duanyan(adurl, biliobj.GetPlayUrl()), http.StatusMovedPermanently) case "youtube": // 油管 ytbObj := &liveurls.Youtube{} ytbObj.Rid = rid ytbObj.Quality = utils.DefaultQuery(r, "quality", "1080") http.Redirect(w, r, utils.Duanyan(adurl, ytbObj.GetLiveUrl()), http.StatusMovedPermanently) case "yy": // YY直播 yyObj := &liveurls.Yy{} yyObj.Rid = rid yyObj.Quality = utils.DefaultQuery(r, "quality", "4") http.Redirect(w, r, utils.Duanyan(adurl, yyObj.GetLiveUrl()), http.StatusMovedPermanently) default: fmt.Fprintf(w, "Unknown platform=%s, room=%s", platform, rid) } } else { log.Println("Invalid path:", path) http.Error(w, "Internal Server Error", http.StatusInternalServerError) } } ================================================ FILE: api/yqk/yqk.go ================================================ package yqk import ( "Golang/list" "Golang/utils" "fmt" "encoding/json" "net/http" "strconv" "log" ) // vercel 平台会将请求传递给该函数,这个函数名随意,但函数参数必须按照该规则。 // go语言大写就是公开,所以首字母必须大写 func Handler(w http.ResponseWriter, r *http.Request) { path := r.URL.Path switch path { case "/yqk/huyayqk.m3u": yaobj := &list.HuyaYqk{} res, _ := yaobj.HuYaYqk("https://live.cdn.huya.com/liveHttpUI/getLiveList?iGid=2135") var result list.YaResponse json.Unmarshal(res, &result) pageCount := result.ITotalPage pageSize := result.IPageSize w.Header().Set("Content-Type", "application/octet-stream") w.Header().Set("Content-Disposition", "attachment; filename=huyayqk.m3u") utils.GetTestVideoUrl(w) for i := 1; i <= pageCount; i++ { apiRes, _ := yaobj.HuYaYqk(fmt.Sprintf("https://live.cdn.huya.com/liveHttpUI/getLiveList?iGid=2135&iPageNo=%d&iPageSize=%d", i, pageSize)) var res list.YaResponse json.Unmarshal(apiRes, &res) data := res.VList for _, value := range data { fmt.Fprintf(w, "#EXTINF:-1 tvg-logo=\"%s\" group-title=\"%s\", %s\n", value.SAvatar180, value.SGameFullName, value.SNick) fmt.Fprintf(w, "%s/huya/%v\n", utils.GetLivePrefix(r), value.LProfileRoom) } } case "/yqk/douyuyqk.m3u": yuobj := &list.DouYuYqk{} resAPI, _ := yuobj.Douyuyqk("https://www.douyu.com/gapi/rkc/directory/mixList/2_208/list") var result list.DouYuResponse json.Unmarshal(resAPI, &result) pageCount := result.Data.Pgcnt w.Header().Set("Content-Type", "application/octet-stream") w.Header().Set("Content-Disposition", "attachment; filename=douyuyqk.m3u") utils.GetTestVideoUrl(w) for i := 1; i <= pageCount; i++ { apiRes, _ := yuobj.Douyuyqk("https://www.douyu.com/gapi/rkc/directory/mixList/2_208/" + strconv.Itoa(i)) var res list.DouYuResponse json.Unmarshal(apiRes, &res) data := res.Data.Rl for _, value := range data { fmt.Fprintf(w, "#EXTINF:-1 tvg-logo=\"https://apic.douyucdn.cn/upload/%s_big.jpg\" group-title=\"%s\", %s\n", value.Av, value.C2name, value.Nn) fmt.Fprintf(w, "%s/douyu/%v\n", utils.GetLivePrefix(r), value.Rid) } } case "/yqk/yylunbo.m3u": yylistobj := &list.Yylist{} w.Header().Set("Content-Type", "application/octet-stream") w.Header().Set("Content-Disposition", "attachment; filename=yylunbo.m3u") utils.GetTestVideoUrl(w) i := 1 for { apiRes := yylistobj.Yylb(fmt.Sprintf("http://rubiks-ipad.yy.com/nav/other/idx/213?channel=appstore&ispType=0&model=iPad8,6&netType=2&os=iOS&osVersion=17.2&page=%d&uid=0&yyVersion=6.17.0", i)) var res list.ApiResponse json.Unmarshal([]byte(apiRes), &res) for _, value := range res.Data.Data { fmt.Fprintf(w, "#EXTINF:-1 tvg-logo=\"%s\" group-title=\"%s\", %s\n", value.Avatar, value.Biz, value.Desc) fmt.Fprintf(w, "%s/yy/%v\n", utils.GetLivePrefix(r), value.Sid) } if res.Data.IsLastPage == 1 { break } i++ } default: log.Println("Invalid path:", path) fmt.Fprintf(w, "

链接错误!

") } } ================================================ FILE: go.mod ================================================ module Golang go 1.19 require ( github.com/dop251/goja v0.0.0-20230203172422-5460598cfa32 github.com/etherlabsio/go-m3u8 v1.0.0 github.com/forgoer/openssl v1.5.0 github.com/gin-gonic/gin v1.8.2 github.com/hr3lxphr6j/bililive-go v0.7.23 github.com/hr3lxphr6j/requests v0.0.2 github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b github.com/tidwall/gjson v1.14.4 ) ================================================ FILE: list/douyuyqk.go ================================================ // Package list // @Time:2023/06/02 10:00 // @File:mian.go // @SoftWare:Goland // @Author:feiyang // @Contact:TG@feiyangdigital package list import ( "io" "net/http" ) type DouYuYqk struct { } type DouYuResponse struct { Data struct { Pgcnt int `json:"pgcnt"` Rl []struct { Av string `json:"av"` C2name string `json:"c2name"` Nn string `json:"nn"` Rid int `json:"rid"` } `json:"rl"` } `json:"data"` } func (dy *DouYuYqk) Douyuyqk(requestURL string) ([]byte, error) { client := &http.Client{} req, err := http.NewRequest("GET", requestURL, nil) if err != nil { return nil, err } req.Header.Set("upgrade-insecure-requests", "1") req.Header.Set("user-agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36") resp, err := client.Do(req) if err != nil { return nil, err } defer resp.Body.Close() return io.ReadAll(resp.Body) } ================================================ FILE: list/huyayqk.go ================================================ // Package list // @Time:2023/06/02 10:00 // @File:mian.go // @SoftWare:Goland // @Author:feiyang // @Contact:TG@feiyangdigital package list import ( "io" "net/http" ) type HuyaYqk struct { } type YaResponse struct { ITotalPage int `json:"iTotalPage"` IPageSize int `json:"iPageSize"` VList []struct { SAvatar180 string `json:"sAvatar180"` SGameFullName string `json:"sGameFullName"` SNick string `json:"sNick"` LProfileRoom int `json:"lProfileRoom"` } `json:"vList"` } func (hy *HuyaYqk) HuYaYqk(requestURL string) ([]byte, error) { client := &http.Client{} req, err := http.NewRequest("GET", requestURL, nil) if err != nil { return nil, err } req.Header.Set("upgrade-insecure-requests", "1") req.Header.Set("user-agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36") resp, err := client.Do(req) if err != nil { return nil, err } defer resp.Body.Close() return io.ReadAll(resp.Body) } ================================================ FILE: list/tvm3u.go ================================================ package list import ( "fmt" "net/http" ) type Tvm3u struct { } func (t *Tvm3u) GetTvM3u(w http.ResponseWriter, hostname string) { fmt.Fprintln(w, "#EXTM3U x-tvg-url=\"https://epg.v1.mk/fy.xml\"") fmt.Fprintln(w, "#EXTINF:-1 tvg-name=\"4K60PSDR-H264-AAC测试\" tvg-logo=\"https://cdn.jsdelivr.net/gh/feiyangdigital/testvideo/tg.jpg\" group-title=\"4K频道\",4K60PSDR-H264-AAC测试") fmt.Fprintln(w, "https://cdn.jsdelivr.net/gh/feiyangdigital/testvideo/sdr4kvideo/index.m3u8") fmt.Fprintln(w, "#EXTINF:-1 tvg-name=\"4K60PHLG-HEVC-EAC3测试\" tvg-logo=\"https://cdn.jsdelivr.net/gh/feiyangdigital/testvideo/tg.jpg\" group-title=\"4K频道\",4K60PHLG-HEVC-EAC3测试") fmt.Fprintln(w, "https://cdn.jsdelivr.net/gh/feiyangdigital/testvideo/hlg4kvideo/index.m3u8") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"CCTV1\" tvg-name=\"CCTV1\" tvg-logo=\"https://epg.v1.mk/logo/CCTV1.png\" group-title=\"央视\",cctv1-高码") fmt.Fprintln(w, "http://"+hostname+"/ysptp/cctv1.m3u8") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"CCTV1\" tvg-name=\"CCTV1\" tvg-logo=\"https://epg.v1.mk/logo/CCTV1.png\" group-title=\"央视\",CCTV-1") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000001000029752.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv1\" tvg-name=\"cctv1\" tvg-logo=\"https://epg.v1.mk/logo/cctv1.png\" group-title=\"央视\",CCTV-1-50-FPS") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000004000002226.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"CCTV1\" tvg-name=\"CCTV1\" tvg-logo=\"https://epg.v1.mk/logo/CCTV1.png\" group-title=\"央视\",CCTV-1-HEVC") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000005000265001.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv2\" tvg-name=\"cctv2\" tvg-logo=\"https://epg.v1.mk/logo/cctv2.png\" group-title=\"央视\",cctv2-高码") fmt.Fprintln(w, "http://"+hostname+"/ysptp/cctv2.m3u8") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv2\" tvg-name=\"cctv2\" tvg-logo=\"https://epg.v1.mk/logo/cctv2.png\" group-title=\"央视\",CCTV-2") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000001000023315.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"CCTV2\" tvg-name=\"CCTV2\" tvg-logo=\"https://epg.v1.mk/logo/CCTV2.png\" group-title=\"央视\",CCTV-2-50-FPS") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000001000014161.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv2\" tvg-name=\"cctv2\" tvg-logo=\"https://epg.v1.mk/logo/cctv2.png\" group-title=\"央视\",CCTV-2-HEVC") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000001000023315.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv3\" tvg-name=\"cctv3\" tvg-logo=\"https://epg.v1.mk/logo/cctv3.png\" group-title=\"央视\",cctv3-高码") fmt.Fprintln(w, "http://"+hostname+"/ysptp/cctv3.m3u8") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv3\" tvg-name=\"cctv3\" tvg-logo=\"https://epg.v1.mk/logo/cctv3.png\" group-title=\"央视\",CCTV-3") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000001000022313.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv3\" tvg-name=\"cctv3\" tvg-logo=\"https://epg.v1.mk/logo/cctv3.png\" group-title=\"央视\",CCTV-3-HEVC") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000005000265003.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv4\" tvg-name=\"cctv4\" tvg-logo=\"https://epg.v1.mk/logo/cctv4.png\" group-title=\"央视\",cctv4-高码") fmt.Fprintln(w, "http://"+hostname+"/ysptp/cctv4.m3u8") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"CCTV4\" tvg-name=\"CCTV4\" tvg-logo=\"https://epg.v1.mk/logo/CCTV4.png\" group-title=\"央视\",CCTV-4-50-FPS") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000011000031102.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv4\" tvg-name=\"cctv4\" tvg-logo=\"https://epg.v1.mk/logo/cctv4.png\" group-title=\"央视\",CCTV-4-HEVC") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000005000265004.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv5\" tvg-name=\"cctv5\" tvg-logo=\"https://epg.v1.mk/logo/cctv5.png\" group-title=\"央视\",cctv5-高码") fmt.Fprintln(w, "http://"+hostname+"/ysptp/cctv5.m3u8") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv5\" tvg-name=\"cctv5\" tvg-logo=\"https://epg.v1.mk/logo/cctv5.png\" group-title=\"央视\",CCTV-5") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000005000025222.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv5\" tvg-name=\"cctv5\" tvg-logo=\"https://epg.v1.mk/logo/cctv5.png\" group-title=\"央视\",CCTV-5-HEVC") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000005000265005.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv5+\" tvg-name=\"cctv5+\" tvg-logo=\"https://epg.v1.mk/logo/cctv5+.png\" group-title=\"央视\",cctv5p-高码") fmt.Fprintln(w, "http://"+hostname+"/ysptp/cctv5p.m3u8") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv5+\" tvg-name=\"cctv5+\" tvg-logo=\"https://epg.v1.mk/logo/cctv5+.png\" group-title=\"央视\",CCTV-5+") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000001000015875.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv5+\" tvg-name=\"cctv5+\" tvg-logo=\"https://epg.v1.mk/logo/cctv5+.png\" group-title=\"央视\",CCTV-5+-HEVC") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000005000265016.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv6\" tvg-name=\"cctv6\" tvg-logo=\"https://epg.v1.mk/logo/cctv6.png\" group-title=\"央视\",cctv6-高码") fmt.Fprintln(w, "http://"+hostname+"/ysptp/cctv6.m3u8") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv6\" tvg-name=\"cctv6\" tvg-logo=\"https://epg.v1.mk/logo/cctv6.png\" group-title=\"央视\",CCTV-6") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000001000001737.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"CCTV6\" tvg-name=\"CCTV6\" tvg-logo=\"https://epg.v1.mk/logo/CCTV6.png\" group-title=\"央视\",CCTV-6-50-FPS") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000001000004574.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv6\" tvg-name=\"cctv6\" tvg-logo=\"https://epg.v1.mk/logo/cctv6.png\" group-title=\"央视\",CCTV-6-HEVC") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000005000265006.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"CCTV7\" tvg-name=\"CCTV7\" tvg-logo=\"https://epg.v1.mk/logo/CCTV7.png\" group-title=\"央视\",cctv7-高码") fmt.Fprintln(w, "http://"+hostname+"/ysptp/cctv7.m3u8") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"CCTV7\" tvg-name=\"CCTV7\" tvg-logo=\"https://epg.v1.mk/logo/CCTV7.png\" group-title=\"央视\",CCTV-7") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000001000024341.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"CCTV7\" tvg-name=\"CCTV7\" tvg-logo=\"https://epg.v1.mk/logo/CCTV7.png\" group-title=\"央视\",CCTV-7-50-FPS") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000001000009055.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"CCTV7\" tvg-name=\"CCTV7\" tvg-logo=\"https://epg.v1.mk/logo/CCTV7.png\" group-title=\"央视\",CCTV-7-HEVC") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000005000265007.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv8\" tvg-name=\"cctv8\" tvg-logo=\"https://epg.v1.mk/logo/cctv8.png\" group-title=\"央视\",cctv8-高码") fmt.Fprintln(w, "http://"+hostname+"/ysptp/cctv8.m3u8") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv8\" tvg-name=\"cctv8\" tvg-logo=\"https://epg.v1.mk/logo/cctv8.png\" group-title=\"央视\",CCTV-8") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000001000001070.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv8\" tvg-name=\"cctv8\" tvg-logo=\"https://epg.v1.mk/logo/cctv8.png\" group-title=\"央视\",CCTV-8-HEVC") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000005000265008.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv9\" tvg-name=\"cctv9\" tvg-logo=\"https://epg.v1.mk/logo/cctv9.png\" group-title=\"央视\",cctv9-高码") fmt.Fprintln(w, "http://"+hostname+"/ysptp/cctv9.m3u8") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv9\" tvg-name=\"cctv9\" tvg-logo=\"https://epg.v1.mk/logo/cctv9.png\" group-title=\"央视\",CCTV-9") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000001000014583.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"CCTV9\" tvg-name=\"CCTV9\" tvg-logo=\"https://epg.v1.mk/logo/CCTV9.png\" group-title=\"央视\",CCTV-9-50-FPS") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000001000032162.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv9\" tvg-name=\"cctv9\" tvg-logo=\"https://epg.v1.mk/logo/cctv9.png\" group-title=\"央视\",CCTV-9-HEVC") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000005000265009.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv10\" tvg-name=\"cctv10\" tvg-logo=\"https://epg.v1.mk/logo/cctv10.png\" group-title=\"央视\",cctv10-高码") fmt.Fprintln(w, "http://"+hostname+"/ysptp/cctv10.m3u8") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv10\" tvg-name=\"cctv10\" tvg-logo=\"https://epg.v1.mk/logo/cctv10.png\" group-title=\"央视\",CCTV-10") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000001000023734.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv10\" tvg-name=\"cctv10\" tvg-logo=\"https://epg.v1.mk/logo/cctv10.png\" group-title=\"央视\",CCTV-10-50-FPS") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000004000012827.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv10\" tvg-name=\"cctv10\" tvg-logo=\"https://epg.v1.mk/logo/cctv10.png\" group-title=\"央视\",CCTV-10-HEVC") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000005000265010.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv11\" tvg-name=\"cctv11\" tvg-logo=\"https://epg.v1.mk/logo/cctv11.png\" group-title=\"央视\",cctv11-高码") fmt.Fprintln(w, "http://"+hostname+"/ysptp/cctv11.m3u8") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv11\" tvg-name=\"cctv11\" tvg-logo=\"https://epg.v1.mk/logo/cctv11.png\" group-title=\"央视\",CCTV-11-50-FPS") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000011000031106.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv11\" tvg-name=\"cctv11\" tvg-logo=\"https://epg.v1.mk/logo/cctv11.png\" group-title=\"央视\",CCTV-11-HEVC") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000005000265011.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv12\" tvg-name=\"cctv12\" tvg-logo=\"https://epg.v1.mk/logo/cctv12.png\" group-title=\"央视\",cctv12-高码") fmt.Fprintln(w, "http://"+hostname+"/ysptp/cctv12.m3u8") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv12\" tvg-name=\"cctv12\" tvg-logo=\"https://epg.v1.mk/logo/cctv12.png\" group-title=\"央视\",CCTV-12") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000001000032494.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv12\" tvg-name=\"cctv12\" tvg-logo=\"https://epg.v1.mk/logo/cctv12.png\" group-title=\"央视\",CCTV-12-50-FPS") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000001000022586.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv12\" tvg-name=\"cctv12\" tvg-logo=\"https://epg.v1.mk/logo/cctv12.png\" group-title=\"央视\",CCTV-12-HEVC") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000005000265012.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv13\" tvg-name=\"cctv13\" tvg-logo=\"https://epg.v1.mk/logo/cctv13.png\" group-title=\"央视\",cctv13-高码") fmt.Fprintln(w, "http://"+hostname+"/ysptp/cctv13.m3u8") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv13\" tvg-name=\"cctv13\" tvg-logo=\"https://epg.v1.mk/logo/cctv13.png\" group-title=\"央视\",CCTV-13-50-FPS") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000011000031108.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv14\" tvg-name=\"cctv14\" tvg-logo=\"https://epg.v1.mk/logo/cctv14.png\" group-title=\"央视\",cctv14-高码") fmt.Fprintln(w, "http://"+hostname+"/ysptp/cctv14.m3u8") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv14\" tvg-name=\"cctv14\" tvg-logo=\"https://epg.v1.mk/logo/cctv14.png\" group-title=\"央视\",CCTV-14") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000001000008170.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv14\" tvg-name=\"cctv14\" tvg-logo=\"https://epg.v1.mk/logo/cctv14.png\" group-title=\"央视\",CCTV-14-50-FPS") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000004000006673.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv14\" tvg-name=\"cctv14\" tvg-logo=\"https://epg.v1.mk/logo/cctv14.png\" group-title=\"央视\",CCTV-14-HEVC") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000005000265013.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv15\" tvg-name=\"cctv15\" tvg-logo=\"https://epg.v1.mk/logo/cctv15.png\" group-title=\"央视\",cctv15-高码") fmt.Fprintln(w, "http://"+hostname+"/ysptp/cctv15.m3u8") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv15\" tvg-name=\"cctv15\" tvg-logo=\"https://epg.v1.mk/logo/cctv15.png\" group-title=\"央视\",CCTV-15-50-FPS") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000011000031109.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv15\" tvg-name=\"cctv15\" tvg-logo=\"https://epg.v1.mk/logo/cctv15.png\" group-title=\"央视\",CCTV-15-HEVC") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000005000265014.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv16\" tvg-name=\"cctv16\" tvg-logo=\"https://epg.v1.mk/logo/cctv16.png\" group-title=\"央视\",cctv16-高码") fmt.Fprintln(w, "http://"+hostname+"/ysptp/cctv16.m3u8") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv16\" tvg-name=\"cctv16\" tvg-logo=\"https://epg.v1.mk/logo/cctv16.png\" group-title=\"央视\",CCTV-16") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000006000233002.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv16\" tvg-name=\"cctv16\" tvg-logo=\"https://epg.v1.mk/logo/cctv16.png\" group-title=\"4K频道\",CCTV-16-4K-HEVC") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000008000023254.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv16\" tvg-name=\"cctv16\" tvg-logo=\"https://epg.v1.mk/logo/cctv16.png\" group-title=\"4K频道\",cctv164k_10m") fmt.Fprintln(w, "http://"+hostname+"/ysptp/cctv4k16_10m.m3u8") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv16\" tvg-name=\"cctv16\" tvg-logo=\"https://epg.v1.mk/logo/cctv16.png\" group-title=\"4K频道\",cctv164k") fmt.Fprintln(w, "http://"+hostname+"/ysptp/cctv4k16.m3u8") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv17\" tvg-name=\"cctv17\" tvg-logo=\"https://epg.v1.mk/logo/cctv17.png\" group-title=\"央视\",cctv17-高码") fmt.Fprintln(w, "http://"+hostname+"/ysptp/cctv17.m3u8") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv17\" tvg-name=\"cctv17\" tvg-logo=\"https://epg.v1.mk/logo/cctv17.png\" group-title=\"央视\",CCTV-17") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000006000268004.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv17\" tvg-name=\"cctv17\" tvg-logo=\"https://epg.v1.mk/logo/cctv17.png\" group-title=\"央视\",CCTV-17-HEVC") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000005000265015.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cgtn\" tvg-name=\"cgtn\" tvg-logo=\"https://epg.v1.mk/logo/cgtn.png\" group-title=\"央视\",CGTN") fmt.Fprintln(w, "http://"+hostname+"/itv/7745129417417101820.m3u8?cdn=hnbblive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"CGTN记录\" tvg-name=\"CGTN记录\" tvg-logo=\"https://epg.v1.mk/logo/CGTN记录.png\" group-title=\"央视\",CGTN-记录") fmt.Fprintln(w, "http://"+hostname+"/itv/7114647837765104058.m3u8?cdn=hnbblive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"CGTNALBY\" tvg-name=\"CGTNALBY\" tvg-logo=\"https://epg.v1.mk/logo/CGTNALBY.png\" group-title=\"央视\",cgtnar-高码") fmt.Fprintln(w, "http://"+hostname+"/ysptp/cgtnar.m3u8") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cgtndocumentary\" tvg-name=\"cgtndocumentary\" tvg-logo=\"https://epg.v1.mk/logo/cgtndocumentary.png\" group-title=\"央视\",cgtndoc-高码") fmt.Fprintln(w, "http://"+hostname+"/ysptp/cgtndoc.m3u8") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"CGTNEY\" tvg-name=\"CGTNEY\" tvg-logo=\"https://epg.v1.mk/logo/CGTNEY.png\" group-title=\"央视\",cgtnen-高码") fmt.Fprintln(w, "http://"+hostname+"/ysptp/cgtnen.m3u8") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cgtnfrench\" tvg-name=\"cgtnfrench\" tvg-logo=\"https://epg.v1.mk/logo/cgtnfrench.png\" group-title=\"央视\",cgtnfr-高码") fmt.Fprintln(w, "http://"+hostname+"/ysptp/cgtnfr.m3u8") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"CGTN1\" tvg-name=\"CGTN1\" tvg-logo=\"https://epg.v1.mk/logo/CGTN1.png\" group-title=\"央视\",cgtnru-高码") fmt.Fprintln(w, "http://"+hostname+"/ysptp/cgtnru.m3u8") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"CGTN1\" tvg-name=\"CGTN1\" tvg-logo=\"https://epg.v1.mk/logo/CGTN1.png\" group-title=\"央视\",cgtnsp-高码") fmt.Fprintln(w, "http://"+hostname+"/ysptp/cgtnsp.m3u8") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv4k\" tvg-name=\"cctv4k\" tvg-logo=\"https://epg.v1.mk/logo/cctv4k.png\" group-title=\"4K频道\",cctv4k_10m") fmt.Fprintln(w, "http://"+hostname+"/ysptp/cctv4k_10m.m3u8") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv4k\" tvg-name=\"cctv4k\" tvg-logo=\"https://epg.v1.mk/logo/cctv4k.png\" group-title=\"4K频道\",cctv4k") fmt.Fprintln(w, "http://"+hostname+"/ysptp/cctv4k.m3u8") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv8k\" tvg-name=\"cctv8k\" tvg-logo=\"https://epg.v1.mk/logo/cctv8k.png\" group-title=\"8K频道\",cctv8k_36m") fmt.Fprintln(w, "http://"+hostname+"/ysptp/cctv8k_36m.m3u8") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"cctv8k\" tvg-name=\"cctv8k\" tvg-logo=\"https://epg.v1.mk/logo/cctv8k.png\" group-title=\"8K频道\",cctv8k_120m") fmt.Fprintln(w, "http://"+hostname+"/ysptp/cctv8k_120m.m3u8") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"中国教育1台\" tvg-name=\"中国教育1台\" tvg-logo=\"https://epg.v1.mk/logo/中国教育1台.png\" group-title=\"其他\",中国教育电视台-1") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000002000002652.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"中国教育1台\" tvg-name=\"中国教育1台\" tvg-logo=\"https://epg.v1.mk/logo/中国教育1台.png\" group-title=\"其他\",中国教育电视台-4") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000011000031126.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"北京卫视\" tvg-name=\"北京卫视\" tvg-logo=\"https://epg.v1.mk/logo/北京卫视.png\" group-title=\"北京\",北京卫视") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000001000020451.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"北京卫视\" tvg-name=\"北京卫视\" tvg-logo=\"https://epg.v1.mk/logo/北京卫视.png\" group-title=\"北京\",北京卫视-HEVC") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000005000265027.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"北京纪实科教\" tvg-name=\"北京纪实科教\" tvg-logo=\"https://epg.v1.mk/logo/北京纪实科教.png\" group-title=\"北京\",北京纪实科教") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000001000001910.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"北京纪实科教\" tvg-name=\"北京纪实科教\" tvg-logo=\"https://epg.v1.mk/logo/北京纪实科教.png\" group-title=\"北京\",北京纪实科教-HEVC") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000005000265020.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"北京卡酷少儿\" tvg-name=\"北京卡酷少儿\" tvg-logo=\"https://epg.v1.mk/logo/北京卡酷少儿.png\" group-title=\"北京\",北京卡酷少儿") fmt.Fprintln(w, "http://"+hostname+"/itv/7851974109718180595.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"安徽卫视\" tvg-name=\"安徽卫视\" tvg-logo=\"https://epg.v1.mk/logo/安徽卫视.png\" group-title=\"安徽\",安徽卫视") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000001000030159.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"安徽卫视\" tvg-name=\"安徽卫视\" tvg-logo=\"https://epg.v1.mk/logo/安徽卫视.png\" group-title=\"安徽\",安徽卫视-50-FPS") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000001000009954.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"安徽卫视\" tvg-name=\"安徽卫视\" tvg-logo=\"https://epg.v1.mk/logo/安徽卫视.png\" group-title=\"安徽\",安徽卫视-HEVC") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000005000265025.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"东南卫视\" tvg-name=\"东南卫视\" tvg-logo=\"https://epg.v1.mk/logo/东南卫视.png\" group-title=\"卫视\",东南卫视") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000004000010584.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"东南卫视\" tvg-name=\"东南卫视\" tvg-logo=\"https://epg.v1.mk/logo/东南卫视.png\" group-title=\"卫视\",东南卫视-HEVC") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000005000265033.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"甘肃卫视\" tvg-name=\"甘肃卫视\" tvg-logo=\"https://epg.v1.mk/logo/甘肃卫视.png\" group-title=\"甘肃\",甘肃卫视") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000011000031121.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"广东卫视\" tvg-name=\"广东卫视\" tvg-logo=\"https://epg.v1.mk/logo/广东卫视.png\" group-title=\"广东\",广东卫视") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000001000014176.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"广东卫视\" tvg-name=\"广东卫视\" tvg-logo=\"https://epg.v1.mk/logo/广东卫视.png\" group-title=\"广东\",广东卫视-50-FPS") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000001000031076.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"广东卫视\" tvg-name=\"广东卫视\" tvg-logo=\"https://epg.v1.mk/logo/广东卫视.png\" group-title=\"广东\",广东卫视-HEVC") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000005000265034.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"广西卫视\" tvg-name=\"广西卫视\" tvg-logo=\"https://epg.v1.mk/logo/广西卫视.png\" group-title=\"卫视\",广西卫视") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000011000031118.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"贵州卫视\" tvg-name=\"贵州卫视\" tvg-logo=\"https://epg.v1.mk/logo/贵州卫视.png\" group-title=\"贵州\",贵州卫视") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000004000025843.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"海南卫视\" tvg-name=\"海南卫视\" tvg-logo=\"https://epg.v1.mk/logo/海南卫视.png\" group-title=\"海南\",海南卫视") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000004000006211.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"河北卫视\" tvg-name=\"河北卫视\" tvg-logo=\"https://epg.v1.mk/logo/河北卫视.png\" group-title=\"河北\",河北卫视") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000006000040016.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"河南卫视\" tvg-name=\"河南卫视\" tvg-logo=\"https://epg.v1.mk/logo/河南卫视.png\" group-title=\"河南\",河南卫视") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000011000031119.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"黑龙江卫视\" tvg-name=\"黑龙江卫视\" tvg-logo=\"https://epg.v1.mk/logo/黑龙江卫视.png\" group-title=\"黑龙江\",黑龙江卫视") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000001000001925.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"黑龙江卫视\" tvg-name=\"黑龙江卫视\" tvg-logo=\"https://epg.v1.mk/logo/黑龙江卫视.png\" group-title=\"黑龙江\",黑龙江卫视-50-FPS") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000001000016510.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"黑龙江卫视\" tvg-name=\"黑龙江卫视\" tvg-logo=\"https://epg.v1.mk/logo/黑龙江卫视.png\" group-title=\"黑龙江\",黑龙江卫视-HEVC") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000005000265029.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"湖北卫视\" tvg-name=\"湖北卫视\" tvg-logo=\"https://epg.v1.mk/logo/湖北卫视.png\" group-title=\"湖北\",湖北卫视") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000001000024621.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"湖北卫视\" tvg-name=\"湖北卫视\" tvg-logo=\"https://epg.v1.mk/logo/湖北卫视.png\" group-title=\"湖北\",湖北卫视-50-FPS") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000001000015436.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"湖北卫视\" tvg-name=\"湖北卫视\" tvg-logo=\"https://epg.v1.mk/logo/湖北卫视.png\" group-title=\"湖北\",湖北卫视-HEVC") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000005000265023.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"湖南卫视\" tvg-name=\"湖南卫视\" tvg-logo=\"https://epg.v1.mk/logo/湖南卫视.png\" group-title=\"湖南\",湖南卫视") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000004000006692.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"湖南卫视4\" tvg-name=\"湖南卫视4\" tvg-logo=\"https://epg.v1.mk/logo/湖南卫视4.png\" group-title=\"湖南\",湖南卫视-50-FPS") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000001000018044.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"湖南卫视\" tvg-name=\"湖南卫视\" tvg-logo=\"https://epg.v1.mk/logo/湖南卫视.png\" group-title=\"湖南\",湖南卫视-HEVC") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000005000265024.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"湖南金鹰纪实\" tvg-name=\"湖南金鹰纪实\" tvg-logo=\"https://epg.v1.mk/logo/湖南金鹰纪实.png\" group-title=\"湖南\",湖南金鹰纪实") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000011000031203.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"湖南\" tvg-name=\"湖南\" tvg-logo=\"https://epg.v1.mk/logo/湖南.png\" group-title=\"湖南\",湖南快乐垂钓") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000011000031206.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"湖南茶频道\" tvg-name=\"湖南茶频道\" tvg-logo=\"https://epg.v1.mk/logo/湖南茶频道.png\" group-title=\"湖南\",湖南茶频道") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000011000031209.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"吉林卫视\" tvg-name=\"吉林卫视\" tvg-logo=\"https://epg.v1.mk/logo/吉林卫视.png\" group-title=\"吉林\",吉林卫视") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000011000031117.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"江苏卫视\" tvg-name=\"江苏卫视\" tvg-logo=\"https://epg.v1.mk/logo/江苏卫视.png\" group-title=\"江苏\",江苏卫视-50-FPS") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000001000014861.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"江苏卫视\" tvg-name=\"江苏卫视\" tvg-logo=\"https://epg.v1.mk/logo/江苏卫视.png\" group-title=\"江苏\",江苏卫视") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000001000001828.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"江苏卫视\" tvg-name=\"江苏卫视\" tvg-logo=\"https://epg.v1.mk/logo/江苏卫视.png\" group-title=\"江苏\",江苏卫视-HEVC") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000005000265030.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"江西卫视\" tvg-name=\"江西卫视\" tvg-logo=\"https://epg.v1.mk/logo/江西卫视.png\" group-title=\"江西\",江西卫视") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000006000268001.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"江西卫视\" tvg-name=\"江西卫视\" tvg-logo=\"https://epg.v1.mk/logo/江西卫视.png\" group-title=\"江西\",江西卫视-HEVC") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000005000265032.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"辽宁卫视\" tvg-name=\"辽宁卫视\" tvg-logo=\"https://epg.v1.mk/logo/辽宁卫视.png\" group-title=\"辽宁\",辽宁卫视") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000004000011671.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"辽宁卫视\" tvg-name=\"辽宁卫视\" tvg-logo=\"https://epg.v1.mk/logo/辽宁卫视.png\" group-title=\"辽宁\",辽宁卫视-HEVC") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000005000265022.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"青海卫视\" tvg-name=\"青海卫视\" tvg-logo=\"https://epg.v1.mk/logo/青海卫视.png\" group-title=\"青海\",青海卫视") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000002000013359.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"山东卫视\" tvg-name=\"山东卫视\" tvg-logo=\"https://epg.v1.mk/logo/山东卫视.png\" group-title=\"山东\",山东卫视") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000001000016568.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"山东卫视\" tvg-name=\"山东卫视\" tvg-logo=\"https://epg.v1.mk/logo/山东卫视.png\" group-title=\"山东\",山东卫视-50-FPS") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000001000004134.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"山东卫视\" tvg-name=\"山东卫视\" tvg-logo=\"https://epg.v1.mk/logo/山东卫视.png\" group-title=\"山东\",山东卫视-HEVC") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000005000265019.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"上海东方影视\" tvg-name=\"上海东方影视\" tvg-logo=\"https://epg.v1.mk/logo/上海东方影视.png\" group-title=\"上海\",上海东方卫视") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000001000003639.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"上海东方影视\" tvg-name=\"上海东方影视\" tvg-logo=\"https://epg.v1.mk/logo/上海东方影视.png\" group-title=\"上海\",上海东方卫视-50-FPS") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000004000014098.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"上海东方影视\" tvg-name=\"上海东方影视\" tvg-logo=\"https://epg.v1.mk/logo/上海东方影视.png\" group-title=\"上海\",上海东方卫视-HEVC") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000005000265018.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"上海ICS\" tvg-name=\"上海ICS\" tvg-logo=\"https://epg.v1.mk/logo/上海ICS.png\" group-title=\"上海\",上海-ICS-外语") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000010000030951.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"上海第一财经\" tvg-name=\"上海第一财经\" tvg-logo=\"https://epg.v1.mk/logo/上海第一财经.png\" group-title=\"上海\",上海第一财经") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000010000027146.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"上海东方影视\" tvg-name=\"上海东方影视\" tvg-logo=\"https://epg.v1.mk/logo/上海东方影视.png\" group-title=\"上海\",上海东方财经") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000007000010003.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"上海东方影视\" tvg-name=\"上海东方影视\" tvg-logo=\"https://epg.v1.mk/logo/上海东方影视.png\" group-title=\"上海\",上海东方影视") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000010000032212.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"上海都市\" tvg-name=\"上海都市\" tvg-logo=\"https://epg.v1.mk/logo/上海都市.png\" group-title=\"上海\",上海都市") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000010000018926.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"上海ICS\" tvg-name=\"上海ICS\" tvg-logo=\"https://epg.v1.mk/logo/上海ICS.png\" group-title=\"上海\",上海法治天地") fmt.Fprintln(w, "http://"+hostname+"/itv/2000000002000000014.m3u8?cdn=hnbblive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"上海ICS\" tvg-name=\"上海ICS\" tvg-logo=\"https://epg.v1.mk/logo/上海ICS.png\" group-title=\"上海\",上海哈哈炫动") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000011000031123.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"上海纪实人文\" tvg-name=\"上海纪实人文\" tvg-logo=\"https://epg.v1.mk/logo/上海纪实人文.png\" group-title=\"上海\",上海纪实人文-50-FPS") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000004000010282.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"上海纪实人文\" tvg-name=\"上海纪实人文\" tvg-logo=\"https://epg.v1.mk/logo/上海纪实人文.png\" group-title=\"上海\",上海纪实人文-HEVC") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000005000265021.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"上海五星体育\" tvg-name=\"上海五星体育\" tvg-logo=\"https://epg.v1.mk/logo/上海五星体育.png\" group-title=\"上海\",上海五星体育") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000010000017540.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"上海新闻综合\" tvg-name=\"上海新闻综合\" tvg-logo=\"https://epg.v1.mk/logo/上海新闻综合.png\" group-title=\"上海\",上海新闻综合") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000011000031110.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"深圳卫视\" tvg-name=\"深圳卫视\" tvg-logo=\"https://epg.v1.mk/logo/深圳卫视.png\" group-title=\"卫视\",深圳卫视") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000004000007410.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"深圳卫视\" tvg-name=\"深圳卫视\" tvg-logo=\"https://epg.v1.mk/logo/深圳卫视.png\" group-title=\"卫视\",深圳卫视-50-FPS") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000001000002116.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"深圳卫视\" tvg-name=\"深圳卫视\" tvg-logo=\"https://epg.v1.mk/logo/深圳卫视.png\" group-title=\"卫视\",深圳卫视-HEVC") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000005000265028.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"四川卫视\" tvg-name=\"四川卫视\" tvg-logo=\"https://epg.v1.mk/logo/四川卫视.png\" group-title=\"四川\",四川卫视") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000004000006119.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"天津卫视\" tvg-name=\"天津卫视\" tvg-logo=\"https://epg.v1.mk/logo/天津卫视.png\" group-title=\"卫视\",天津卫视") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000004000006827.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"天津卫视\" tvg-name=\"天津卫视\" tvg-logo=\"https://epg.v1.mk/logo/天津卫视.png\" group-title=\"卫视\",天津卫视-50-FPS") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000001000009186.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"天津卫视\" tvg-name=\"天津卫视\" tvg-logo=\"https://epg.v1.mk/logo/天津卫视.png\" group-title=\"卫视\",天津卫视-HEVC") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000005000265026.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"云南卫视\" tvg-name=\"云南卫视\" tvg-logo=\"https://epg.v1.mk/logo/云南卫视.png\" group-title=\"云南\",云南卫视") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000011000031120.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"浙江卫视\" tvg-name=\"浙江卫视\" tvg-logo=\"https://epg.v1.mk/logo/浙江卫视.png\" group-title=\"浙江\",浙江卫视-50-FPS") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000004000007275.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"浙江卫视\" tvg-name=\"浙江卫视\" tvg-logo=\"https://epg.v1.mk/logo/浙江卫视.png\" group-title=\"浙江\",浙江卫视") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000001000014260.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"浙江卫视\" tvg-name=\"浙江卫视\" tvg-logo=\"https://epg.v1.mk/logo/浙江卫视.png\" group-title=\"浙江\",浙江卫视-HEVC") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000005000265031.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"重庆卫视\" tvg-name=\"重庆卫视\" tvg-logo=\"https://epg.v1.mk/logo/重庆卫视.png\" group-title=\"重庆\",重庆卫视") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000001000001096.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"重庆卫视\" tvg-name=\"重庆卫视\" tvg-logo=\"https://epg.v1.mk/logo/重庆卫视.png\" group-title=\"重庆\",重庆卫视-HEVC") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000005000265017.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"华数4K\" tvg-name=\"华数4K\" tvg-logo=\"https://epg.v1.mk/logo/华数4K.png\" group-title=\"4K频道\",华数-4K") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000003000004748.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"纯享4K\" tvg-name=\"纯享4K\" tvg-logo=\"https://epg.v1.mk/logo/纯享4K.png\" group-title=\"4K频道\",纯享-4K") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000004000011651.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"咪咕4K\" tvg-name=\"咪咕4K\" tvg-logo=\"https://epg.v1.mk/logo/咪咕4K.png\" group-title=\"4K频道\",咪咕4K-1") fmt.Fprintln(w, "http://"+hostname+"/itv/3000000010000005180.m3u8?cdn=FifastbLive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"咪咕4K\" tvg-name=\"咪咕4K\" tvg-logo=\"https://epg.v1.mk/logo/咪咕4K.png\" group-title=\"4K频道\",咪咕4K-2") fmt.Fprintln(w, "http://"+hostname+"/itv/3000000010000015686.m3u8?cdn=FifastbLive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"咪咕4k\" tvg-name=\"咪咕4k\" tvg-logo=\"https://epg.v1.mk/logo/咪咕4k.png\" group-title=\"其他\",咪咕全民热练") fmt.Fprintln(w, "http://"+hostname+"/itv/3000000020000031315.m3u8?cdn=FifastbLive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"求索动物\" tvg-name=\"求索动物\" tvg-logo=\"https://epg.v1.mk/logo/求索动物.png\" group-title=\"其他\",求索动物") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000002000010046.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"求索纪录\" tvg-name=\"求索纪录\" tvg-logo=\"https://epg.v1.mk/logo/求索纪录.png\" group-title=\"其他\",求索纪录") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000002000032052.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"求索科学\" tvg-name=\"求索科学\" tvg-logo=\"https://epg.v1.mk/logo/求索科学.png\" group-title=\"其他\",求索科学") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000002000032344.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"求索生活\" tvg-name=\"求索生活\" tvg-logo=\"https://epg.v1.mk/logo/求索生活.png\" group-title=\"其他\",求索生活") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000002000003382.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"NewTV精品综合\" tvg-name=\"NewTV精品综合\" tvg-logo=\"https://epg.v1.mk/logo/NewTV精品综合.png\" group-title=\"NEWTV\",NewTV-精品综合") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000004000019008.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"newtv精品大剧\" tvg-name=\"newtv精品大剧\" tvg-logo=\"https://epg.v1.mk/logo/newtv精品大剧.png\" group-title=\"NEWTV\",NewTV-精品大剧") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000004000013968.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"newtv精品纪录\" tvg-name=\"newtv精品纪录\" tvg-logo=\"https://epg.v1.mk/logo/newtv精品纪录.png\" group-title=\"NEWTV\",NewTV-精品纪录") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000004000013730.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"newtv精品体育\" tvg-name=\"newtv精品体育\" tvg-logo=\"https://epg.v1.mk/logo/newtv精品体育.png\" group-title=\"NEWTV\",NewTV-精品体育") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000004000014634.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"NEWTV精品萌宠\" tvg-name=\"NEWTV精品萌宠\" tvg-logo=\"https://epg.v1.mk/logo/NEWTV精品萌宠.png\" group-title=\"NEWTV\",NewTV-精品萌宠") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000006000032328.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"newtv爱情喜剧\" tvg-name=\"newtv爱情喜剧\" tvg-logo=\"https://epg.v1.mk/logo/newtv爱情喜剧.png\" group-title=\"NEWTV\",NewTV-爱情喜剧") fmt.Fprintln(w, "http://"+hostname+"/itv/2000000003000000010.m3u8?cdn=hnbblive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"newtv超级电视剧\" tvg-name=\"newtv超级电视剧\" tvg-logo=\"https://epg.v1.mk/logo/newtv超级电视剧.png\" group-title=\"NEWTV\",NewTV-超级电视剧") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000006000268003.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"newtv超级电影\" tvg-name=\"newtv超级电影\" tvg-logo=\"https://epg.v1.mk/logo/newtv超级电影.png\" group-title=\"NEWTV\",NewTV-超级电影") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000003000012426.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"newtv超级体育\" tvg-name=\"newtv超级体育\" tvg-logo=\"https://epg.v1.mk/logo/newtv超级体育.png\" group-title=\"NEWTV\",NewTV-超级体育") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000001000009601.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"newtv超级综艺\" tvg-name=\"newtv超级综艺\" tvg-logo=\"https://epg.v1.mk/logo/newtv超级综艺.png\" group-title=\"NEWTV\",NewTV-超级综艺") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000006000268002.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"newtv潮妈辣婆\" tvg-name=\"newtv潮妈辣婆\" tvg-logo=\"https://epg.v1.mk/logo/newtv潮妈辣婆.png\" group-title=\"NEWTV\",NewTV-潮妈辣婆") fmt.Fprintln(w, "http://"+hostname+"/itv/2000000003000000018.m3u8?cdn=hnbblive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"NewTV东北热剧\" tvg-name=\"NewTV东北热剧\" tvg-logo=\"https://epg.v1.mk/logo/NewTV东北热剧.png\" group-title=\"NEWTV\",NewTV-东北热剧") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000005000266013.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"newtv动作电影\" tvg-name=\"newtv动作电影\" tvg-logo=\"https://epg.v1.mk/logo/newtv动作电影.png\" group-title=\"NEWTV\",NewTV-动作电影") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000004000018653.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"NewTV古装剧场\" tvg-name=\"NewTV古装剧场\" tvg-logo=\"https://epg.v1.mk/logo/NewTV古装剧场.png\" group-title=\"NEWTV\",NewTV-古装剧场") fmt.Fprintln(w, "http://"+hostname+"/itv/2000000003000000024.m3u8?cdn=hnbblive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"NewTV欢乐剧场\" tvg-name=\"NewTV欢乐剧场\" tvg-logo=\"https://epg.v1.mk/logo/NewTV欢乐剧场.png\" group-title=\"NEWTV\",NewTV-欢乐剧场") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000005000266012.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"newtv家庭剧场\" tvg-name=\"newtv家庭剧场\" tvg-logo=\"https://epg.v1.mk/logo/newtv家庭剧场.png\" group-title=\"NEWTV\",NewTV-家庭剧场") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000004000008284.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"NewTV金牌综艺\" tvg-name=\"NewTV金牌综艺\" tvg-logo=\"https://epg.v1.mk/logo/NewTV金牌综艺.png\" group-title=\"NEWTV\",NewTV-金牌综艺") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000004000026167.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"newtv惊悚悬疑\" tvg-name=\"newtv惊悚悬疑\" tvg-logo=\"https://epg.v1.mk/logo/newtv惊悚悬疑.png\" group-title=\"NEWTV\",NewTV-惊悚悬疑") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000004000024282.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"newtv军旅剧场\" tvg-name=\"newtv军旅剧场\" tvg-logo=\"https://epg.v1.mk/logo/newtv军旅剧场.png\" group-title=\"NEWTV\",NewTV-军旅剧场") fmt.Fprintln(w, "http://"+hostname+"/itv/2000000003000000014.m3u8?cdn=hnbblive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"newtv军事评论\" tvg-name=\"newtv军事评论\" tvg-logo=\"https://epg.v1.mk/logo/newtv军事评论.png\" group-title=\"NEWTV\",NewTV-军事评论") fmt.Fprintln(w, "http://"+hostname+"/itv/2000000003000000022.m3u8?cdn=hnbblive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"NewTV魅力潇湘\" tvg-name=\"NewTV魅力潇湘\" tvg-logo=\"https://epg.v1.mk/logo/NewTV魅力潇湘.png\" group-title=\"NEWTV\",NewTV-魅力潇湘") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000001000006197.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"NewTV明星大片\" tvg-name=\"NewTV明星大片\" tvg-logo=\"https://epg.v1.mk/logo/NewTV明星大片.png\" group-title=\"NEWTV\",NewTV-明星大片") fmt.Fprintln(w, "http://"+hostname+"/itv/2000000003000000016.m3u8?cdn=hnbblive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"newtv农业致富\" tvg-name=\"newtv农业致富\" tvg-logo=\"https://epg.v1.mk/logo/newtv农业致富.png\" group-title=\"NEWTV\",NewTV-农业致富") fmt.Fprintln(w, "http://"+hostname+"/itv/2000000003000000003.m3u8?cdn=hnbblive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"NEWTV武博世界\" tvg-name=\"NEWTV武博世界\" tvg-logo=\"https://epg.v1.mk/logo/NEWTV武博世界.png\" group-title=\"NEWTV\",NewTV-武博世界") fmt.Fprintln(w, "http://"+hostname+"/itv/2000000003000000007.m3u8?cdn=hnbblive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"newtv炫舞未来\" tvg-name=\"newtv炫舞未来\" tvg-logo=\"https://epg.v1.mk/logo/newtv炫舞未来.png\" group-title=\"NEWTV\",NewTV-炫舞未来") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000001000000515.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"newtv怡伴健康\" tvg-name=\"newtv怡伴健康\" tvg-logo=\"https://epg.v1.mk/logo/newtv怡伴健康.png\" group-title=\"NEWTV\",NewTV-怡伴健康") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000005000266011.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"newtv中国功夫\" tvg-name=\"newtv中国功夫\" tvg-logo=\"https://epg.v1.mk/logo/newtv中国功夫.png\" group-title=\"NEWTV\",NewTV-中国功夫") fmt.Fprintln(w, "http://"+hostname+"/itv/2000000003000000009.m3u8?cdn=hnbblive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"NEWTV黑莓电影\" tvg-name=\"NEWTV黑莓电影\" tvg-logo=\"https://epg.v1.mk/logo/NEWTV黑莓电影.png\" group-title=\"NEWTV\",NewTV-黑莓电影") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000004000019624.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"NEWTV黑莓动画\" tvg-name=\"NEWTV黑莓动画\" tvg-logo=\"https://epg.v1.mk/logo/NEWTV黑莓动画.png\" group-title=\"NEWTV\",NewTV-黑莓动画") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000004000021734.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"NEWTVCJDY\" tvg-name=\"NEWTVCJDY\" tvg-logo=\"https://epg.v1.mk/logo/NEWTVCJDY.png\" group-title=\"NEWTV\",NewTV-哒啵电竞") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000006000032327.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"NEWTVCJDY\" tvg-name=\"NEWTVCJDY\" tvg-logo=\"https://epg.v1.mk/logo/NEWTVCJDY.png\" group-title=\"NEWTV\",NewTV-哒啵赛事") fmt.Fprintln(w, "http://"+hostname+"/itv/1000000001000003775.m3u8?cdn=ystenlive") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"SITV\" tvg-name=\"SITV\" tvg-logo=\"https://epg.v1.mk/logo/SITV.png\" group-title=\"其他\",SiTV-动漫秀场") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000011000031113.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"SITV都市剧场\" tvg-name=\"SITV都市剧场\" tvg-logo=\"https://epg.v1.mk/logo/SITV都市剧场.png\" group-title=\"其他\",SiTV-都市剧场") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000011000031111.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"SITV法治天地\" tvg-name=\"SITV法治天地\" tvg-logo=\"https://epg.v1.mk/logo/SITV法治天地.png\" group-title=\"其他\",SiTV-法治天地") fmt.Fprintln(w, "http://"+hostname+"/itv/9001547084732463424.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"SITV欢笑剧场\" tvg-name=\"SITV欢笑剧场\" tvg-logo=\"https://epg.v1.mk/logo/SITV欢笑剧场.png\" group-title=\"其他\",SiTV-欢笑剧场") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000002000009455.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"SITV欢笑剧场\" tvg-name=\"SITV欢笑剧场\" tvg-logo=\"https://epg.v1.mk/logo/SITV欢笑剧场.png\" group-title=\"其他\",SiTV-欢笑剧场-4K") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000007000010001.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"SITV金色学堂\" tvg-name=\"SITV金色学堂\" tvg-logo=\"https://epg.v1.mk/logo/SITV金色学堂.png\" group-title=\"其他\",SiTV-金色学堂") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000010000026105.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"SITV劲爆体育\" tvg-name=\"SITV劲爆体育\" tvg-logo=\"https://epg.v1.mk/logo/SITV劲爆体育.png\" group-title=\"其他\",SiTV-劲爆体育") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000002000029972.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"SITV乐游\" tvg-name=\"SITV乐游\" tvg-logo=\"https://epg.v1.mk/logo/SITV乐游.png\" group-title=\"其他\",SiTV-乐游") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000011000031112.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"SITV\" tvg-name=\"SITV\" tvg-logo=\"https://epg.v1.mk/logo/SITV.png\" group-title=\"其他\",SiTV-魅力足球") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000011000031207.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"SITV七彩戏剧\" tvg-name=\"SITV七彩戏剧\" tvg-logo=\"https://epg.v1.mk/logo/SITV七彩戏剧.png\" group-title=\"其他\",SiTV-七彩戏剧") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000011000031116.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"SITV\" tvg-name=\"SITV\" tvg-logo=\"https://epg.v1.mk/logo/SITV.png\" group-title=\"其他\",SiTV-生活时尚") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000002000019634.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"SITV\" tvg-name=\"SITV\" tvg-logo=\"https://epg.v1.mk/logo/SITV.png\" group-title=\"其他\",SiTV-游戏风云") fmt.Fprintln(w, "http://"+hostname+"/itv/5000000011000031114.m3u8?cdn=bestzb") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"IHOT爱电竞\" tvg-name=\"IHOT爱电竞\" tvg-logo=\"https://epg.v1.mk/logo/IHOT爱电竞.png\" group-title=\"IHOT\",iHOT-爱电竞") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000006000230630.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"IHOT爱谍战\" tvg-name=\"IHOT爱谍战\" tvg-logo=\"https://epg.v1.mk/logo/IHOT爱谍战.png\" group-title=\"IHOT\",iHOT-爱谍战") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000006000070630.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"IHOT爱动漫\" tvg-name=\"IHOT爱动漫\" tvg-logo=\"https://epg.v1.mk/logo/IHOT爱动漫.png\" group-title=\"IHOT\",iHOT-爱动漫") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000006000280630.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"IHOT爱都市\" tvg-name=\"IHOT爱都市\" tvg-logo=\"https://epg.v1.mk/logo/IHOT爱都市.png\" group-title=\"IHOT\",iHOT-爱都市") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000006000080630.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"IHOT爱怀旧\" tvg-name=\"IHOT爱怀旧\" tvg-logo=\"https://epg.v1.mk/logo/IHOT爱怀旧.png\" group-title=\"IHOT\",iHOT-爱怀旧") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000006000260630.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"IHOT爱经典\" tvg-name=\"IHOT爱经典\" tvg-logo=\"https://epg.v1.mk/logo/IHOT爱经典.png\" group-title=\"IHOT\",iHOT-爱经典") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000006000060630.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"IHOT爱科幻\" tvg-name=\"IHOT爱科幻\" tvg-logo=\"https://epg.v1.mk/logo/IHOT爱科幻.png\" group-title=\"IHOT\",iHOT-爱科幻") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000006000020630.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"IHOT爱科学\" tvg-name=\"IHOT爱科学\" tvg-logo=\"https://epg.v1.mk/logo/IHOT爱科学.png\" group-title=\"IHOT\",iHOT-爱科学") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000006000160630.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"IHOT爱浪漫\" tvg-name=\"IHOT爱浪漫\" tvg-logo=\"https://epg.v1.mk/logo/IHOT爱浪漫.png\" group-title=\"IHOT\",iHOT-爱浪漫") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000006000040630.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"IHOT爱历史\" tvg-name=\"IHOT爱历史\" tvg-logo=\"https://epg.v1.mk/logo/IHOT爱历史.png\" group-title=\"IHOT\",iHOT-爱历史") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000006000150630.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"IHOT爱旅行\" tvg-name=\"IHOT爱旅行\" tvg-logo=\"https://epg.v1.mk/logo/IHOT爱旅行.png\" group-title=\"IHOT\",iHOT-爱旅行") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000006000250630.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"IHOT爱奇谈\" tvg-name=\"IHOT爱奇谈\" tvg-logo=\"https://epg.v1.mk/logo/IHOT爱奇谈.png\" group-title=\"IHOT\",iHOT-爱奇谈") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000006000270630.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"IHOT爱青春\" tvg-name=\"IHOT爱青春\" tvg-logo=\"https://epg.v1.mk/logo/IHOT爱青春.png\" group-title=\"IHOT\",iHOT-爱青春") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000006000100630.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"IHOT爱赛车\" tvg-name=\"IHOT爱赛车\" tvg-logo=\"https://epg.v1.mk/logo/IHOT爱赛车.png\" group-title=\"IHOT\",iHOT-爱赛车") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000006000240630.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"IHOT爱体育\" tvg-name=\"IHOT爱体育\" tvg-logo=\"https://epg.v1.mk/logo/IHOT爱体育.png\" group-title=\"IHOT\",iHOT-爱体育") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000006000290630.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"IHOT爱玩具\" tvg-name=\"IHOT爱玩具\" tvg-logo=\"https://epg.v1.mk/logo/IHOT爱玩具.png\" group-title=\"IHOT\",iHOT-爱玩具") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000006000220630.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"IHOT爱喜剧\" tvg-name=\"IHOT爱喜剧\" tvg-logo=\"https://epg.v1.mk/logo/IHOT爱喜剧.png\" group-title=\"IHOT\",iHOT-爱喜剧") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000006000010630.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"IHOT爱悬疑\" tvg-name=\"IHOT爱悬疑\" tvg-logo=\"https://epg.v1.mk/logo/IHOT爱悬疑.png\" group-title=\"IHOT\",iHOT-爱悬疑") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000006000050630.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"IHOT爱幼教\" tvg-name=\"IHOT爱幼教\" tvg-logo=\"https://epg.v1.mk/logo/IHOT爱幼教.png\" group-title=\"IHOT\",iHOT-爱幼教") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000006000180630.m3u8?cdn=wasusyt") fmt.Fprintln(w, "#EXTINF:-1,tvg-id=\"IHOT爱院线\" tvg-name=\"IHOT爱院线\" tvg-logo=\"https://epg.v1.mk/logo/IHOT爱院线.png\" group-title=\"IHOT\",iHOT-爱院线") fmt.Fprintln(w, "http://"+hostname+"/itv/6000000006000030630.m3u8?cdn=wasusyt") } ================================================ FILE: list/yylunbo.go ================================================ // Package list // @Time:2023/06/03 20:35 // @File:yylunbo.go // @SoftWare:Goland // @Author:feiyang // @Contact:TG@feiyangdigital package list import ( "io" "net/http" ) type Yylist struct { } type DataElement struct { Avatar string `json:"avatar"` Biz string `json:"biz"` Desc string `json:"desc"` Sid int `json:"sid"` } type ApiResponse struct { Data struct { IsLastPage int `json:"isLastPage"` Data []DataElement `json:"data"` } `json:"data"` } func (y *Yylist) Yylb(requesturl string) string { client := &http.Client{} req, _ := http.NewRequest("GET", requesturl, nil) req.Header.Set("Upgrade-Insecure-Requests", "1") req.Header.Set("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36") res, err := client.Do(req) if err != nil { panic(err) } defer res.Body.Close() body, _ := io.ReadAll(res.Body) return string(body) } ================================================ FILE: liveurls/bilibili.go ================================================ // Package liveurls // @Time:2023/02/10 01:03 // @File:bilibili.go // @SoftWare:Goland // @Author:feiyang // @Contact:TG@feiyangdigital package liveurls import ( "encoding/json" "fmt" "github.com/tidwall/gjson" "io" "net/http" ) type BiliBili struct { Rid string Line string Quality string Platform string } func (b *BiliBili) GetRealRoomID() any { var firstmap = make(map[string]any) var realroomid string apiurl := "https://api.live.bilibili.com/room/v1/Room/room_init?id=" + b.Rid client := &http.Client{} r, _ := http.NewRequest("GET", apiurl, nil) r.Header.Add("user-agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 16_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.3 Mobile/15E148 Safari/604.1") resp, _ := client.Do(r) defer resp.Body.Close() body, _ := io.ReadAll(resp.Body) json.Unmarshal(body, &firstmap) if firstmap["msg"] == "直播间不存在" { return nil } if newmap, ok := firstmap["data"].(map[string]any); ok { if newmap["live_status"] != float64(1) { return nil } else { if flt, ok := newmap["room_id"].(float64); ok { realroomid = fmt.Sprintf("%v", int(flt)) } } } return realroomid } func (b *BiliBili) GetPlayUrl() any { var roomid string var realurl string if str, ok := b.GetRealRoomID().(string); ok { roomid = str } else { return nil } client := &http.Client{} params := map[string]string{ "room_id": roomid, "protocol": "0,1", "format": "0,1,2", "codec": "0,1", "qn": b.Quality, "platform": b.Platform, "ptype": "8", } r, _ := http.NewRequest("GET", "https://api.live.bilibili.com/xlive/web-room/v2/index/getRoomPlayInfo", nil) q := r.URL.Query() for k, v := range params { q.Add(k, v) } r.URL.RawQuery = q.Encode() resp, _ := client.Do(r) defer resp.Body.Close() body, _ := io.ReadAll(resp.Body) var json = string(body) value := gjson.Get(json, "data.playurl_info.playurl.stream") value.ForEach(func(key, value gjson.Result) bool { newvalue := gjson.Get(value.String(), "format.0.format_name") if newvalue.String() == "ts" { nnvalue := gjson.Get(value.String(), "format.#") valuelast := fmt.Sprintf("%v", nnvalue.Int()-1) codeclen := gjson.Get(value.String(), "format."+valuelast+".codec.#") codeclast := fmt.Sprintf("%v", codeclen.Int()-1) base_url := gjson.Get(value.String(), "format."+valuelast+".codec."+codeclast+".base_url") url_info := gjson.Get(value.String(), "format."+valuelast+".codec."+codeclast+".url_info") url_info.ForEach(func(key, value gjson.Result) bool { keyval := fmt.Sprintf("%v", key) switch b.Line { case "first": if keyval == "0" { host := gjson.Get(value.String(), "host") extra := gjson.Get(value.String(), "extra") realurl = fmt.Sprintf("%v%v%v", host, base_url, extra) } case "second": if keyval == "1" { host := gjson.Get(value.String(), "host") extra := gjson.Get(value.String(), "extra") realurl = fmt.Sprintf("%v%v%v", host, base_url, extra) } case "third": if keyval == "2" { host := gjson.Get(value.String(), "host") extra := gjson.Get(value.String(), "extra") realurl = fmt.Sprintf("%v%v%v", host, base_url, extra) } } return true }) } return true }) return realurl } ================================================ FILE: liveurls/douyin.go ================================================ // Package liveurls // @Time:2023/02/03 01:59 // @File:douyin.go // @SoftWare:Goland // @Author:feiyang // @Contact:TG@feiyangdigital package liveurls import ( "fmt" "github.com/tidwall/gjson" "io" "net/http" "regexp" "strconv" ) type Douyin struct { Stream string Rid string } func (d *Douyin) GetDouYinUrl() any { liveurl := "https://live.douyin.com/" + d.Rid client := &http.Client{} re, _ := http.NewRequest("GET", liveurl, nil) re.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") re.Header.Add("upgrade-insecure-requests", "1") oresp, _ := client.Do(re) defer oresp.Body.Close() oreg := regexp.MustCompile(`(?i)__ac_nonce=(.*?);`) ores := oreg.FindStringSubmatch(oresp.Header["Set-Cookie"][0]) r, _ := http.NewRequest("GET", liveurl, nil) cookie := &http.Cookie{Name: "__ac_nonce", Value: ores[1]} r.AddCookie(cookie) 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") r.Header.Add("upgrade-insecure-requests", "1") resp, _ := client.Do(r) defer resp.Body.Close() reg := regexp.MustCompile(`(?i)ttwid=.*?;`) res := reg.FindStringSubmatch(fmt.Sprintf("%s", resp.Cookies()))[0] url := "https://live.douyin.com/webcast/room/web/enter/?aid=6383&app_name=douyin_web&live_id=1&device_platform=web&language=zh-CN&enter_from=web_live&cookie_enabled=true&screen_width=1728&screen_height=1117&browser_language=zh-CN&browser_platform=MacIntel&browser_name=Chrome&browser_version=116.0.0.0&web_rid=" + d.Rid req, _ := http.NewRequest("GET", url, nil) req.Header.Add("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36") req.Header.Add("Cookie", res) req.Header.Add("Accept", "*/*") req.Header.Add("Host", "live.douyin.com") req.Header.Add("Connection", "keep-alive") ress, _ := client.Do(req) defer ress.Body.Close() body, _ := io.ReadAll(ress.Body) var json = string(body) status, _ := strconv.Atoi(fmt.Sprintf("%s", gjson.Get(json, "data.data.0.status"))) if status != 2 { return nil } var realurl string value := gjson.Get(json, "data.data.0.stream_url.live_core_sdk_data.pull_data.stream_data") value.ForEach(func(key, value gjson.Result) bool { if gjson.Get(value.String(), "data.origin").Exists() { switch d.Stream { case "flv": realurl = fmt.Sprintf("%s", gjson.Get(value.String(), "data.origin.main.flv")) case "hls": realurl = fmt.Sprintf("%s", gjson.Get(value.String(), "data.origin.main.hls")) } } return true }) return realurl } ================================================ FILE: liveurls/douyu.go ================================================ // Package liveurls // @Time:2023/02/05 06:36 // @File:douyu.go // @SoftWare:Goland // @Author:feiyang // @Contact:TG@feiyangdigital package liveurls import ( "Golang/utils" "crypto/md5" "encoding/json" "fmt" "io" "net/http" "regexp" "strings" "time" ) type Douyu struct { Rid string Stream_type string } func md5V3(str string) string { w := md5.New() io.WriteString(w, str) md5str := fmt.Sprintf("%x", w.Sum(nil)) return md5str } func (d *Douyu) GetRoomId() any { liveurl := "https://m.douyu.com/" + d.Rid client := &http.Client{} r, _ := http.NewRequest("GET", liveurl, nil) r.Header.Add("user-agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 16_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.3 Mobile/15E148 Safari/604.1") r.Header.Add("upgrade-insecure-requests", "1") resp, _ := client.Do(r) defer resp.Body.Close() body, _ := io.ReadAll(resp.Body) roomidreg := regexp.MustCompile(`(?i)rid":(\d{1,8}),"vipId`) roomidres := roomidreg.FindStringSubmatch(string(body)) if roomidres == nil { return nil } realroomid := roomidres[1] return realroomid } func (d *Douyu) GetRealUrl() any { var jsUtil = &utils.JsUtil{} did := "10000000000000000000000000001501" var timestamp = time.Now().Unix() var realroomid string rid := d.GetRoomId() if str, ok := rid.(string); ok { realroomid = str } else { return nil } liveurl := "https://www.douyu.com/" + realroomid client := &http.Client{} r, _ := http.NewRequest("GET", liveurl, nil) r.Header.Add("user-agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36") r.Header.Add("upgrade-insecure-requests", "1") resp, _ := client.Do(r) defer resp.Body.Close() body, _ := io.ReadAll(resp.Body) reg := regexp.MustCompile(`(?i)(vdwdae325w_64we[\s\S]*function ub98484234[\s\S]*?)function`) res := reg.FindStringSubmatch(string(body)) nreg := regexp.MustCompile(`(?i)eval.*?;}`) strfn := nreg.ReplaceAllString(res[1], "strc;}") var funcContent1 []string funcContent1 = append(append(funcContent1, strfn), "ub98484234") result := jsUtil.JsRun(funcContent1, "ub98484234") nres := fmt.Sprintf("%s", result) nnreg := regexp.MustCompile(`(?i)v=(\d+)`) nnres := nnreg.FindStringSubmatch(nres) unrb := fmt.Sprintf("%v%v%v%v", realroomid, did, timestamp, nnres[1]) rb := md5V3(unrb) nnnreg := regexp.MustCompile(`(?i)return rt;}\);?`) strfn2 := nnnreg.ReplaceAllString(nres, "return rt;}") strfn3 := strings.Replace(strfn2, `(function (`, `function sign(`, -1) strfn4 := strings.Replace(strfn3, `CryptoJS.MD5(cb).toString()`, `"`+rb+`"`, -1) var funcContent2 []string funcContent2 = append(append(funcContent2, strfn4), "sign") result2 := jsUtil.JsRun(funcContent2, realroomid, did, timestamp) param := fmt.Sprintf("%s", result2) realparam := param + "&rate=0" r1, n4err := http.Post("https://www.douyu.com/lapi/live/getH5Play/"+realroomid, "application/x-www-form-urlencoded", strings.NewReader(realparam)) if n4err != nil { return nil } defer r1.Body.Close() body1, _ := io.ReadAll(r1.Body) var s1 map[string]any json.Unmarshal(body1, &s1) var flv_url string var rtmp_url string var rtmp_live string for k, v := range s1 { if k == "error" { if s1[k] != float64(0) { return nil } } if v, ok := v.(map[string]any); ok { for k, v := range v { if k == "rtmp_url" { if urlstr, ok := v.(string); ok { rtmp_url = urlstr } } else if k == "rtmp_live" { if urlstr, ok := v.(string); ok { rtmp_live = urlstr } } } } } flv_url = rtmp_url + "/" + rtmp_live n4reg := regexp.MustCompile(`(?i)(\d{1,8}[0-9a-zA-Z]+)_?\d{0,4}(.flv|/playlist)`) houzhui := n4reg.FindStringSubmatch(flv_url) var real_url string switch d.Stream_type { case "hls": real_url = strings.Replace(flv_url, houzhui[1]+".flv", houzhui[1]+".m3u8", -1) case "flv": real_url = flv_url case "xs": real_url = strings.Replace(flv_url, houzhui[1]+".flv", houzhui[1]+".xs", -1) } return real_url } ================================================ FILE: liveurls/huya.go ================================================ // Package liveurls // @Time:2023/02/05 23:34 // @File:huya.go // @SoftWare:Goland // @Author:feiyang // @Contact:TG@feiyangdigital package liveurls import ( "bytes" "crypto/md5" "encoding/base64" "encoding/hex" "encoding/json" "fmt" "io" "math/rand" "net/http" "net/url" "regexp" "strconv" "strings" "time" "github.com/tidwall/gjson" ) type Huya struct { Rid string Media string Type string Cdn string } type Data struct { } type Payload struct { AppId int `json:"appId"` ByPass int `json:"byPass"` Context string `json:"context"` Version string `json:"version"` Data Data `json:"data"` } type ResponseData struct { Data struct { Uid string `json:"uid"` } `json:"data"` } func getContent(apiUrl string) ([]byte, error) { payload := Payload{ AppId: 5002, ByPass: 3, Context: "", Version: "2.4", Data: Data{}, } jsonPayload, err := json.Marshal(payload) if err != nil { return nil, err } req, err := http.NewRequest("POST", apiUrl, bytes.NewBuffer(jsonPayload)) if err != nil { return nil, err } req.Header.Set("Content-Type", "application/json") req.Header.Set("Content-Length", fmt.Sprintf("%d", len(jsonPayload))) req.Header.Set("upgrade-insecure-requests", "1") req.Header.Set("user-agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36") client := &http.Client{} resp, err := client.Do(req) if err != nil { return nil, err } defer resp.Body.Close() return io.ReadAll(resp.Body) } var streamInfo = map[string]any{"flv": make(map[string]string), "hls": make(map[string]string)} func getUid() string { content, _ := getContent("https://udblgn.huya.com/web/anonymousLogin") var responseData ResponseData json.Unmarshal(content, &responseData) uid := responseData.Data.Uid return uid } var uid, _ = strconv.Atoi(getUid()) func getUUID() int64 { now := time.Now().UnixNano() / int64(time.Millisecond) randNum := rand.Intn(1000) return ((now % 10000000000 * 1000) + int64(randNum)) % 4294967295 } func processAntiCode(antiCode string, uid int, streamName string) string { TimeLocation, err := time.LoadLocation("Asia/Shanghai") if err != nil { TimeLocation = time.FixedZone("CST", 8*60*60) } now := time.Now().In(TimeLocation) q, _ := url.ParseQuery(antiCode) q.Set("t", "102") q.Set("ctype", "tars_mp") q.Set("wsTime", strconv.FormatInt(time.Now().Unix()+21600, 16)) q.Set("ver", "1") q.Set("sv", now.Format("2006010215")) seqId := strconv.Itoa(uid + int(time.Now().UnixNano()/int64(time.Millisecond))) q.Set("seqid", seqId) q.Set("uid", strconv.Itoa(uid)) q.Set("uuid", strconv.FormatInt(getUUID(), 10)) h := md5.New() h.Write([]byte(seqId + "|" + q.Get("ctype") + "|" + q.Get("t"))) ss := hex.EncodeToString(h.Sum(nil)) fm, _ := base64.StdEncoding.DecodeString(q.Get("fm")) q.Set("fm", strings.Replace(strings.Replace(strings.Replace(strings.Replace(string(fm), "$0", q.Get("uid"), -1), "$1", streamName, -1), "$2", ss, -1), "$3", q.Get("wsTime"), -1)) h.Reset() h.Write([]byte(q.Get("fm"))) q.Set("wsSecret", hex.EncodeToString(h.Sum(nil))) q.Del("fm") if _, ok := q["txyp"]; ok { q.Del("txyp") } return q.Encode() } func format(jsonStr string, uid int) map[string]any { cdnType := map[string]string{"HY": "hycdn", "AL": "alicdn", "TX": "txcdn", "HW": "hwcdn", "HS": "hscdn", "WS": "wscdn"} ojsonStr := gjson.Get(jsonStr, "roomInfo.tLiveInfo.tLiveStreamInfo.vStreamInfo").String() fmt.Println(gjson.Get(ojsonStr, "value")) qreg := regexp.MustCompile(`(?i){"_proto"[\s\S]*?"value":([\s\S]*),"_classname"`) qres := qreg.FindStringSubmatch(ojsonStr) gjson.Parse(qres[1]).ForEach(func(_, value gjson.Result) bool { sFlvUrl := value.Get("sFlvUrl").String() sFlvUrlSuffix := value.Get("sFlvUrlSuffix").String() sHlsUrl := value.Get("sHlsUrl").String() sHlsUrlSuffix := value.Get("sHlsUrlSuffix").String() sStreamName := value.Get("sStreamName").String() sCdnType := value.Get("sCdnType").String() sFlvAntiCode := value.Get("sFlvAntiCode").String() sHlsAntiCode := value.Get("sHlsAntiCode").String() if sFlvUrl != "" { streamInfo["flv"].(map[string]string)[cdnType[sCdnType]] = sFlvUrl + "/" + sStreamName + "." + sFlvUrlSuffix + "?" + processAntiCode(sFlvAntiCode, uid, sStreamName) } if sHlsUrl != "" { streamInfo["hls"].(map[string]string)[cdnType[sCdnType]] = sHlsUrl + "/" + sStreamName + "." + sHlsUrlSuffix + "?" + processAntiCode(sHlsAntiCode, uid, sStreamName) } return true }) return streamInfo } func (h *Huya) GetLiveUrl() any { liveurl := "https://m.huya.com/" + h.Rid client := &http.Client{} r, _ := http.NewRequest("GET", liveurl, nil) r.Header.Add("user-agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 16_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.3 Mobile/15E148 Safari/604.1") r.Header.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8") resp, _ := client.Do(r) defer resp.Body.Close() body, _ := io.ReadAll(resp.Body) str := string(body) freg := regexp.MustCompile(`(?i)`) res := freg.FindStringSubmatch(str) if len(res) > 1 && !strings.Contains(res[1], "\"exceptionType\":0") { jsonStr := res[1] liveStatus := gjson.Get(jsonStr, "roomInfo.eLiveStatus").Int() var mediaurl any if liveStatus == 2 { realurl := format(jsonStr, uid) if h.Type == "display" { return realurl } for k, v := range realurl { if k == h.Media { if urlarr, ok := v.(map[string]string); ok { for k, v := range urlarr { if k == h.Cdn { mediaurl = strings.Replace(v, "http://", "https://", 1) } } } } } } else if liveStatus == 3 { liveLineUrl := gjson.Get(jsonStr, "roomProfile.liveLineUrl").String() if liveLineUrl != "" { decodedLiveLineUrl, _ := base64.StdEncoding.DecodeString(liveLineUrl) mediaurl = "https:" + string(decodedLiveLineUrl) } } else { mediaurl = nil } return mediaurl } else if strings.Contains(res[1], "\"exceptionType\":0") { var h5info any ostr, _ := getContent("https://www.huya.com/" + h.Rid) nstr := string(ostr) lreg := regexp.MustCompile(`(?i)