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)