package main

import ( 'Golang/list' 'Golang/liveurls' 'encoding/base64' 'encoding/json' 'fmt' 'github.com/forgoer/openssl' 'github.com/gin-gonic/gin' 'net/http' 'net/url' 'strconv' 'time' )

func duanyan(adurl string, realurl any) string { var liveurl string if str, ok := realurl.(string); ok { liveurl = str } else { liveurl = adurl } return liveurl }

func getTestVideoUrl(c gin.Context) { TimeLocation, err := time.LoadLocation('Asia/Shanghai') if err != nil { TimeLocation = time.FixedZone('CST', 860*60) } str_time := time.Now().In(TimeLocation).Format('2006-01-02 15:04:05') fmt.Fprintln(c.Writer, '#EXTM3U') fmt.Fprintln(c.Writer, '#EXTINF:-1 tvg-name=''+str_time+'' tvg-logo='https://cdn.jsdelivr.net/gh/youshandefeiyang/IPTV/logo/tg.jpg' group-title='列表更新时间','+str_time) fmt.Fprintln(c.Writer, 'https://cdn.jsdelivr.net/gh/youshandefeiyang/testvideo/time/time.mp4') fmt.Fprintln(c.Writer, '#EXTINF:-1 tvg-name='4K60PSDR-H264-AAC测试' tvg-logo='https://cdn.jsdelivr.net/gh/youshandefeiyang/IPTV/logo/tg.jpg' group-title='4K频道',4K60PSDR-H264-AAC测试') fmt.Fprintln(c.Writer, 'http://159.75.85.63:5680/d/ad/h264/playad.m3u8') fmt.Fprintln(c.Writer, '#EXTINF:-1 tvg-name='4K60PHLG-HEVC-EAC3测试' tvg-logo='https://cdn.jsdelivr.net/gh/youshandefeiyang/IPTV/logo/tg.jpg' group-title='4K频道',4K60PHLG-HEVC-EAC3测试') fmt.Fprintln(c.Writer, 'http://159.75.85.63:5680/d/ad/playad.m3u8') }

func getLivePrefix(c *gin.Context) string { firstUrl := c.DefaultQuery('url', 'https://www.goodiptv.club') realUrl, _ := url.QueryUnescape(firstUrl) return realUrl }

func setupRouter(adurl string) *gin.Engine { gin.SetMode(gin.ReleaseMode) r := gin.Default()

r.HEAD('/', func(c *gin.Context) {
	c.String(http.StatusOK, '请求成功!')
})

r.GET('/', func(c *gin.Context) {
	c.String(http.StatusOK, '请求成功!')
})

r.GET('/douyin', func(c *gin.Context) {
	vrurl := c.Query('url')
	douyinobj := &liveurls.Douyin{}
	douyinobj.Shorturl = vrurl
	c.Redirect(http.StatusMovedPermanently, duanyan(adurl, douyinobj.GetRealurl()))
})

r.GET('/huyayqk.m3u', func(c *gin.Context) {
	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
	c.Writer.Header().Set('Content-Type', 'application/octet-stream')
	c.Writer.Header().Set('Content-Disposition', 'attachment; filename=huyayqk.m3u')
	getTestVideoUrl(c)

	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(c.Writer, '#EXTINF:-1 tvg-logo='%s' group-title='%s', %s\n', value.SAvatar180, value.SGameFullName, value.SNick)
			fmt.Fprintf(c.Writer, '%s/huya/%v\n', getLivePrefix(c), value.LProfileRoom)
		}
	}
})

r.GET('/douyuyqk.m3u', func(c *gin.Context) {
	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

	c.Writer.Header().Set('Content-Type', 'application/octet-stream')
	c.Writer.Header().Set('Content-Disposition', 'attachment; filename=douyuyqk.m3u')
	getTestVideoUrl(c)

	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(c.Writer, '#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(c.Writer, '%s/douyu/%v\n', getLivePrefix(c), value.Rid)
		}
	}
})

r.GET('/yylunbo.m3u', func(c *gin.Context) {
	yylistobj := &list.Yylist{}
	c.Writer.Header().Set('Content-Type', 'application/octet-stream')
	c.Writer.Header().Set('Content-Disposition', 'attachment; filename=yylunbo.m3u')
	getTestVideoUrl(c)

	i := 1
	for {
		apiRes := yylistobj.Yylb(fmt.Sprintf('https://rubiks-idx.yy.com/nav/other/pnk1/448772?channel=appstore&compAppid=yymip&exposured=80&hdid=8dce117c5c963bf9e7063e7cc4382178498f8765&hostVersion=8.25.0&individualSwitch=1&ispType=2&netType=2&openCardLive=1&osVersion=16.5&page=%d&stype=2&supportSwan=0&uid=1834958700&unionVersion=0&y0=8b799811753625ef70dbc1cc001e3a1f861c7f0261d4f7712efa5ea232f4bd3ce0ab999309cac0d7869449a56b44c774&y1=8b799811753625ef70dbc1cc001e3a1f861c7f0261d4f7712efa5ea232f4bd3ce0ab999309cac0d7869449a56b44c774&y11=9c03c7008d1fdae4873436607388718b&y12=9d8393ec004d98b7e20f0c347c3a8c24&yv=1&yyVersion=8.25.0', i))
		var res list.ApiResponse
		json.Unmarshal([]byte(apiRes), &res)
		for _, value := range res.Data.Data {
			fmt.Fprintf(c.Writer, '#EXTINF:-1 tvg-logo='%s' group-title='%s', %s\n', value.Avatar, value.Biz, value.Desc)
			fmt.Fprintf(c.Writer, '%s/yy/%v\n', getLivePrefix(c), value.Sid)
		}
		if res.Data.IsLastPage == 1 {
			break
		}
		i++
	}
})

r.GET('/:path/:rid', func(c *gin.Context) {
	path := c.Param('path')
	rid := c.Param('rid')
	switch path {
	case 'douyin':
		douyinobj := &liveurls.Douyin{}
		douyinobj.Rid = rid
		c.Redirect(http.StatusMovedPermanently, duanyan(adurl, douyinobj.GetDouYinUrl()))
	case 'douyu':
		douyuobj := &liveurls.Douyu{}
		douyuobj.Rid = rid
		douyuobj.Stream_type = c.DefaultQuery('stream', 'hls')
		douyuobj.Cdn_type = c.DefaultQuery('cdn', 'openhls-tct')
		c.Redirect(http.StatusMovedPermanently, duanyan(adurl, douyuobj.GetRealUrl()))
	case 'huya':
		huyaobj := &liveurls.Huya{}
		huyaobj.Rid = rid
		huyaobj.Cdn = c.DefaultQuery('cdn', 'hwcdn')
		huyaobj.Media = c.DefaultQuery('media', 'flv')
		huyaobj.Type = c.DefaultQuery('type', 'nodisplay')
		if huyaobj.Type == 'display' {
			c.JSON(200, huyaobj.GetLiveUrl())
		} else {
			c.Redirect(http.StatusMovedPermanently, duanyan(adurl, huyaobj.GetLiveUrl()))
		}
	case 'bilibili':
		biliobj := &liveurls.BiliBili{}
		biliobj.Rid = rid
		biliobj.Platform = c.DefaultQuery('platform', 'web')
		biliobj.Quality = c.DefaultQuery('quality', '10000')
		biliobj.Line = c.DefaultQuery('line', 'second')
		c.Redirect(http.StatusMovedPermanently, duanyan(adurl, biliobj.GetPlayUrl()))
	case 'youtube':
		ytbObj := &liveurls.Youtube{}
		ytbObj.Rid = rid
		ytbObj.Quality = c.DefaultQuery('quality', '1080')
		c.Redirect(http.StatusMovedPermanently, duanyan(adurl, ytbObj.GetLiveUrl()))
	case 'yy':
		yyObj := &liveurls.Yy{}
		yyObj.Rid = rid
		yyObj.Quality = c.DefaultQuery('quality', '4')
		c.Redirect(http.StatusMovedPermanently, duanyan(adurl, yyObj.GetLiveUrl()))
	}
})
return r

}

func main() { key := []byte('6354127897263145') defstr, _ := base64.StdEncoding.DecodeString('Mf5ZVkSUHH5xC9fH2Sao+2LgjRfydmzMgHNrVYX4AcSoI0nktkV7z1jSU6nSihf7ny+PexV73YjDoEtG7qu+Cw==') defurl, _ := openssl.AesECBDecrypt(defstr, key, openssl.PKCS7_PADDING) r := setupRouter(string(defurl)) r.Run(':35455') } 转为php内容:<?php

use GuzzleHttp\Client;

function duanyan($adurl, $realurl) { $liveurl = is_string($realurl) ? $realurl : $adurl; return $liveurl; }

function getTestVideoUrl() { $TimeLocation = new DateTimeZone('Asia/Shanghai'); $str_time = (new DateTime('now', $TimeLocation))->format('Y-m-d H:i:s'); echo '#EXTM3U\n'; echo '#EXTINF:-1 tvg-name='' . $str_time . '' tvg-logo='https://cdn.jsdelivr.net/gh/youshandefeiyang/IPTV/logo/tg.jpg' group-title='列表更新时间',' . $str_time . '\n'; echo 'https://cdn.jsdelivr.net/gh/youshandefeiyang/testvideo/time/time.mp4\n'; echo '#EXTINF:-1 tvg-name='4K60PSDR-H264-AAC测试' tvg-logo='https://cdn.jsdelivr.net/gh/youshandefeiyang/IPTV/logo/tg.jpg' group-title='4K频道',4K60PSDR-H264-AAC测试\n'; echo 'http://159.75.85.63:5680/d/ad/h264/playad.m3u8\n'; echo '#EXTINF:-1 tvg-name='4K60PHLG-HEVC-EAC3测试' tvg-logo='https://cdn.jsdelivr.net/gh/youshandefeiyang/IPTV/logo/tg.jpg' group-title='4K频道',4K60PHLG-HEVC-EAC3测试\n'; echo 'http://159.75.85.63:5680/d/ad/playad.m3u8\n'; }

function getLivePrefix() { $firstUrl = isset($_GET['url']) ? $_GET['url'] : 'https://www.goodiptv.club'; $realUrl = urldecode($firstUrl); return $realUrl; }

function setupRouter($adurl) { $client = new Client();

$app = new \Slim\App();

$app->get('/', function ($request, $response) {
    $response->getBody()->write('请求成功!');
    return $response;
});

$app->get('/douyin', function ($request, $response) use ($adurl) {
    $vrurl = $_GET['url'];
    $douyinobj = new liveurls\Douyin();
    $douyinobj->setShorturl($vrurl);
    return $response->withRedirect(duanyan($adurl, $douyinobj->getRealurl()), 301);
});

$app->get('/huyayqk.m3u', function ($request, $response) {
    $yaobj = new list\HuyaYqk();
    $res = $yaobj->HuYaYqk('https://live.cdn.huya.com/liveHttpUI/getLiveList?iGid=2135');
    $result = json_decode($res, true);
    $pageCount = $result['iTotalPage'];
    $pageSize = $result['iPageSize'];

    $response = $response->withHeader('Content-Type', 'application/octet-stream');
    $response = $response->withHeader('Content-Disposition', 'attachment; filename=huyayqk.m3u');
    getTestVideoUrl();

    for ($i = 1; $i <= $pageCount; $i++) {
        $apiRes = $yaobj->HuYaYqk('https://live.cdn.huya.com/liveHttpUI/getLiveList?iGid=2135&iPageNo=' . $i . '&iPageSize=' . $pageSize);
        $res = json_decode($apiRes, true);
        $data = $res['vList'];
        foreach ($data as $value) {
            $response->getBody()->write('#EXTINF:-1 tvg-logo='' . $value['sAvatar180'] . '' group-title='' . $value['sGameFullName'] . '', ' . $value['sNick'] . '\n');
            $response->getBody()->write(getLivePrefix() . '/huya/' . $value['lProfileRoom'] . '\n');
        }
    }
    return $response;
});

$app->get('/douyuyqk.m3u', function ($request, $response) {
    $yuobj = new list\DouYuYqk();
    $resAPI = $yuobj->Douyuyqk('https://www.douyu.com/gapi/rkc/directory/mixList/2_208/list');
    $result = json_decode($resAPI, true);
    $pageCount = $result['data']['pgcnt'];

    $response = $response->withHeader('Content-Type', 'application/octet-stream');
    $response = $response->withHeader('Content-Disposition', 'attachment; filename=douyuyqk.m3u');
    getTestVideoUrl();

    for ($i = 1; $i <= $pageCount; $i++) {
        $apiRes = $yuobj->Douyuyqk('https://www.douyu.com/gapi/rkc/directory/mixList/2_208/' . $i);
        $res = json_decode($apiRes, true);
        $data = $res['data']['rl'];

        foreach ($data as $value) {
            $response->getBody()->write('#EXTINF:-1 tvg-logo='https://apic.douyucdn.cn/upload/' . $value['av'] . '_big.jpg' group-title='' . $value['c2name'] . '', ' . $value['nn'] . '\n');
            $response->getBody()->write(getLivePrefix() . '/douyu/' . $value['rid'] . '\n');
        }
    }
    return $response;
});

$app->get('/yylunbo.m3u', function ($request, $response) {
    $yylistobj = new list\Yylist();
    $response = $response->withHeader('Content-Type', 'application/octet-stream');
    $response = $response->withHeader('Content-Disposition', 'attachment; filename=yylunbo.m3u');
    getTestVideoUrl();

    $i = 1;
    do {
        $apiRes = $yylistobj->Yylb('https://rubiks-idx.yy.com/nav/other/pnk1/448772?channel=appstore&compAppid=yymip&exposured=80&hdid=8dce117c5c963bf9e7063e7cc4382178498f8765&hostVersion=8.25.0&individualSwitch=1&ispType=2&netType=2&openCardLive=1&osVersion=16.5&page=' . $i . '&stype=2&supportSwan=0&uid=1834958700&unionVersion=0&y0=8b799811753625ef70dbc1cc001e3a1f861c7f0261d4f7712efa5ea232f4bd3ce0ab999309cac0d7869449a56b44c774&y1='
Golang 直播源解析服务 -  获取抖音、虎牙、斗鱼、YY 直播地址

原文地址: https://www.cveoy.top/t/topic/qc6f 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录