Compare commits

..

No commits in common. "61b05a758782881b93f3f9111fce39f3d761dec8" and "1279c392894da87cfabd3d8cd517fa9024526618" have entirely different histories.

18 changed files with 114954 additions and 116083 deletions

File diff suppressed because it is too large Load diff

228600
M3U8/TV.xml

File diff suppressed because one or more lines are too long

View file

@ -7,7 +7,7 @@ http://mytvstream.net:8080/live/30550113/30550113/59056.m3u8
http://mytvstream.net:8080/live/30550113/30550113/120952.m3u8 http://mytvstream.net:8080/live/30550113/30550113/120952.m3u8
#EXTINF:-1 tvg-chno="3" tvg-id="ACC.Network.us2" tvg-name="ACC Network" tvg-logo="https://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s111871_dark_360w_270h.png" group-title="TV",ACC Network #EXTINF:-1 tvg-chno="3" tvg-id="ACC.Network.us2" tvg-name="ACC Network" tvg-logo="https://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s111871_dark_360w_270h.png" group-title="TV",ACC Network
http://fl31.moveonjoy.com/ACC_NETWORK/index.m3u8 http://mytvstream.net:8080/live/30550113/30550113/9273.m3u8
#EXTINF:-1 tvg-chno="4" tvg-id="AdultSwim.com.Cartoon.Network.us2" tvg-name="Adult Swim" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s16496_dark_360w_270h.png" group-title="TV",Adult Swim #EXTINF:-1 tvg-chno="4" tvg-id="AdultSwim.com.Cartoon.Network.us2" tvg-name="Adult Swim" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s16496_dark_360w_270h.png" group-title="TV",Adult Swim
https://turnerlive.warnermediacdn.com/hls/live/2023183/aseast/noslate/VIDEO_1_5128000.m3u8 https://turnerlive.warnermediacdn.com/hls/live/2023183/aseast/noslate/VIDEO_1_5128000.m3u8
@ -22,16 +22,16 @@ http://mytvstream.net:8080/live/30550113/30550113/18925.m3u8
http://23.237.104.106:8080/USA_ANIMAL_PLANET/index.m3u8 http://23.237.104.106:8080/USA_ANIMAL_PLANET/index.m3u8
#EXTINF:-1 tvg-chno="8" tvg-id="ASPiRE.HD.us2" tvg-name="Aspire" tvg-logo="https://i.gyazo.com/0dec42cc5ef48c489cc10db906dc5b9b.png" group-title="TV",Aspire #EXTINF:-1 tvg-chno="8" tvg-id="ASPiRE.HD.us2" tvg-name="Aspire" tvg-logo="https://i.gyazo.com/0dec42cc5ef48c489cc10db906dc5b9b.png" group-title="TV",Aspire
http://fl31.moveonjoy.com/Aspire/index.m3u8 http://mytvstream.net:8080/live/30550113/30550113/21927.m3u8
#EXTINF:-1 tvg-chno="9" tvg-id="BBC.America.HD.us2" tvg-name="BBC America" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s64492_dark_360w_270h.png" group-title="TV",BBC America #EXTINF:-1 tvg-chno="9" tvg-id="BBC.America.HD.us2" tvg-name="BBC America" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s64492_dark_360w_270h.png" group-title="TV",BBC America
http://fl31.moveonjoy.com/BBC_AMERICA/index.m3u8 http://mytvstream.net:8080/live/bn80NG/909467/20194.m3u8
#EXTINF:-1 tvg-chno="10" tvg-id="BBC.News.(North.America).HD.us2" tvg-name="BBC World News" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s89542_dark_360w_270h.png" group-title="TV",BBC World News #EXTINF:-1 tvg-chno="10" tvg-id="BBC.News.(North.America).HD.us2" tvg-name="BBC World News" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s89542_dark_360w_270h.png" group-title="TV",BBC World News
http://fl31.moveonjoy.com/BBC_WORLD_NEWS/index.m3u8 http://mytvstream.net:8080/live/bn80NG/909467/139752.m3u8
#EXTINF:-1 tvg-chno="11" tvg-id="BET.HD.us2" tvg-name="BET" tvg-logo="https://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s10051_dark_360w_270h.png" group-title="TV",BET #EXTINF:-1 tvg-chno="11" tvg-id="BET.HD.us2" tvg-name="BET" tvg-logo="https://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s10051_dark_360w_270h.png" group-title="TV",BET
http://mytvstream.net:8080/live/30550113/30550113/13702.m3u8 http://mytvstream.net:8080/live/30550113/30550113/46703.m3u8
#EXTINF:-1 tvg-chno="12" tvg-id="Big.Ten.Network.HD.us2" tvg-name="Big Ten Network" tvg-logo="https://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s56783_dark_360w_270h.png" group-title="TV",Big Ten Network #EXTINF:-1 tvg-chno="12" tvg-id="Big.Ten.Network.HD.us2" tvg-name="Big Ten Network" tvg-logo="https://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s56783_dark_360w_270h.png" group-title="TV",Big Ten Network
http://23.237.104.106:8080/USA_BTN/index.m3u8 http://23.237.104.106:8080/USA_BTN/index.m3u8
@ -46,7 +46,7 @@ http://23.237.104.106:8080/USA_BOOMERANG/index.m3u8
http://23.237.104.106:8080/USA_BOUNCE/index.m3u8 http://23.237.104.106:8080/USA_BOUNCE/index.m3u8
#EXTINF:-1 tvg-chno="16" tvg-id="Bravo.HD.us2" tvg-name="Bravo TV" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s10057_dark_360w_270h.png" group-title="TV",Bravo TV #EXTINF:-1 tvg-chno="16" tvg-id="Bravo.HD.us2" tvg-name="Bravo TV" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s10057_dark_360w_270h.png" group-title="TV",Bravo TV
http://41.205.93.154/BRAVO/index.m3u8 http://mytvstream.net:8080/live/30550113/30550113/20859.m3u8
#EXTINF:-1 tvg-chno="17" tvg-id="BUZZR.Stream.us2" tvg-name="Buzzr" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s93430_dark_360w_270h.png" group-title="TV",Buzzr #EXTINF:-1 tvg-chno="17" tvg-id="BUZZR.Stream.us2" tvg-name="Buzzr" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s93430_dark_360w_270h.png" group-title="TV",Buzzr
https://buzzrota-web.amagi.tv/playlist.m3u8 https://buzzrota-web.amagi.tv/playlist.m3u8
@ -73,7 +73,7 @@ http://23.237.104.106:8080/USA_CBS_SPORTS/index.m3u8
http://23.237.104.106:8080/USA_CMT/index.m3u8 http://23.237.104.106:8080/USA_CMT/index.m3u8
#EXTINF:-1 tvg-chno="25" tvg-id="CNBC.HD.us2" tvg-name="CNBC" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s10139_dark_360w_270h.png" group-title="TV",CNBC #EXTINF:-1 tvg-chno="25" tvg-id="CNBC.HD.us2" tvg-name="CNBC" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s10139_dark_360w_270h.png" group-title="TV",CNBC
http://41.205.93.154:80/CNBC/index.m3u8 http://mytvstream.net:8080/live/30550113/30550113/9815.m3u8
#EXTINF:-1 tvg-chno="26" tvg-id="CNN.HD.us2" tvg-name="CNN" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s58646_dark_360w_270h.png" group-title="TV",CNN #EXTINF:-1 tvg-chno="26" tvg-id="CNN.HD.us2" tvg-name="CNN" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s58646_dark_360w_270h.png" group-title="TV",CNN
https://turnerlive.warnermediacdn.com/hls/live/586495/cnngo/cnn_slate/VIDEO_0_3564000.m3u8 https://turnerlive.warnermediacdn.com/hls/live/586495/cnngo/cnn_slate/VIDEO_0_3564000.m3u8
@ -82,7 +82,7 @@ https://turnerlive.warnermediacdn.com/hls/live/586495/cnngo/cnn_slate/VIDEO_0_35
http://23.237.104.106:8080/USA_COMEDY_CENTRAL/index.m3u8 http://23.237.104.106:8080/USA_COMEDY_CENTRAL/index.m3u8
#EXTINF:-1 tvg-chno="28" tvg-id="Comedy.TV.HD.us2" tvg-name="Comedy TV" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s82470_dark_360w_270h.png" group-title="TV",Comedy TV #EXTINF:-1 tvg-chno="28" tvg-id="Comedy.TV.HD.us2" tvg-name="Comedy TV" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s82470_dark_360w_270h.png" group-title="TV",Comedy TV
https://fl31.moveonjoy.com/Comedy_TV/index.m3u8 https://fl1.moveonjoy.com/Comedy_TV/index.m3u8
#EXTINF:-1 tvg-chno="29" tvg-id="Comet.us2" tvg-name="Comet TV" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s97051_dark_360w_270h.png" group-title="TV",Comet TV #EXTINF:-1 tvg-chno="29" tvg-id="Comet.us2" tvg-name="Comet TV" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s97051_dark_360w_270h.png" group-title="TV",Comet TV
https://fast-channels.sinclairstoryline.com/COMET/index.m3u8 https://fast-channels.sinclairstoryline.com/COMET/index.m3u8
@ -97,7 +97,7 @@ https://cdn-uw2-prod.tsv2.amagi.tv/linear/amg01438-ewscrippscompan-courttv-tablo
http://mytvstream.net:8080/live/30550113/30550113/11868.m3u8 http://mytvstream.net:8080/live/30550113/30550113/11868.m3u8
#EXTINF:-1 tvg-chno="33" tvg-id="Crime.and.Investigation.Network.HD.us2" tvg-name="Crime & Investigation Network" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s61469_dark_360w_270h.png" group-title="TV",Crime & Investigation Network #EXTINF:-1 tvg-chno="33" tvg-id="Crime.and.Investigation.Network.HD.us2" tvg-name="Crime & Investigation Network" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s61469_dark_360w_270h.png" group-title="TV",Crime & Investigation Network
https://fl31.moveonjoy.com/Crime_and_Investigation_Network/index.m3u8 http://mytvstream.net:8080/live/30550113/30550113/53689.m3u8
#EXTINF:-1 tvg-chno="34" tvg-id="WKCF-DT.us_locals1" tvg-name="CW" tvg-logo="https://i.gyazo.com/afd5b481b327d204087dfde6a7741f9d.png" group-title="TV",CW #EXTINF:-1 tvg-chno="34" tvg-id="WKCF-DT.us_locals1" tvg-name="CW" tvg-logo="https://i.gyazo.com/afd5b481b327d204087dfde6a7741f9d.png" group-title="TV",CW
http://mytvstream.net:8080/live/30550113/30550113/120893.m3u8 http://mytvstream.net:8080/live/30550113/30550113/120893.m3u8
@ -106,16 +106,16 @@ http://mytvstream.net:8080/live/30550113/30550113/120893.m3u8
http://23.237.104.106:8080/USA_DISCOVERY/index.m3u8 http://23.237.104.106:8080/USA_DISCOVERY/index.m3u8
#EXTINF:-1 tvg-chno="36" tvg-id="Discovery.Family.Channel.HD.us2" tvg-name="Discovery Family Channel" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s16618_dark_360w_270h.png" group-title="TV",Discovery Family Channel #EXTINF:-1 tvg-chno="36" tvg-id="Discovery.Family.Channel.HD.us2" tvg-name="Discovery Family Channel" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s16618_dark_360w_270h.png" group-title="TV",Discovery Family Channel
http://fl31.moveonjoy.com/DISCOVERY_FAMILY_CHANNEL/index.m3u8 http://mytvstream.net:8080/live/30550113/30550113/10538.m3u8
#EXTINF:-1 tvg-chno="37" tvg-id="Discovery.Life.Channel.us2" tvg-name="Discovery Life" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s16125_dark_360w_270h.png" group-title="TV",Discovery Life #EXTINF:-1 tvg-chno="37" tvg-id="Discovery.Life.Channel.us2" tvg-name="Discovery Life" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s16125_dark_360w_270h.png" group-title="TV",Discovery Life
https://fl31.moveonjoy.com/DISCOVERY_LIFE/index.m3u8 http://mytvstream.net:8080/live/30550113/30550113/9861.m3u8
#EXTINF:-1 tvg-chno="38" tvg-id="Science.Channel.HD.us2" tvg-name="Discovery Science" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s24282_dark_360w_270h.png" group-title="TV",Discovery Science #EXTINF:-1 tvg-chno="38" tvg-id="Science.Channel.HD.us2" tvg-name="Discovery Science" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s24282_dark_360w_270h.png" group-title="TV",Discovery Science
https://fl31.moveonjoy.com/Discovery_Science/index.m3u8 http://mytvstream.net:8080/live/30550113/30550113/20866.m3u8
#EXTINF:-1 tvg-chno="39" tvg-id="Disney.Channel.HD.us2" tvg-name="Disney" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s10171_dark_360w_270h.png" group-title="TV",Disney #EXTINF:-1 tvg-chno="39" tvg-id="Disney.Channel.HD.us2" tvg-name="Disney" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s10171_dark_360w_270h.png" group-title="TV",Disney
https://fl31.moveonjoy.com/DISNEY/index.m3u8 http://mytvstream.net:8080/live/30550113/30550113/2206.m3u8
#EXTINF:-1 tvg-chno="40" tvg-id="Disney.XD.HD.us2" tvg-name="Disney XD" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s18279_dark_360w_270h.png" group-title="TV",Disney XD #EXTINF:-1 tvg-chno="40" tvg-id="Disney.XD.HD.us2" tvg-name="Disney XD" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s18279_dark_360w_270h.png" group-title="TV",Disney XD
http://23.237.104.106:8080/USA_DISNEY_XD/index.m3u8 http://23.237.104.106:8080/USA_DISNEY_XD/index.m3u8
@ -124,10 +124,10 @@ http://23.237.104.106:8080/USA_DISNEY_XD/index.m3u8
http://23.237.104.106:8080/USA_E/index.m3u8 http://23.237.104.106:8080/USA_E/index.m3u8
#EXTINF:-1 tvg-chno="42" tvg-id="ESPN.HD.us2" tvg-name="ESPN" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s10179_dark_360w_270h.png" group-title="TV",ESPN #EXTINF:-1 tvg-chno="42" tvg-id="ESPN.HD.us2" tvg-name="ESPN" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s10179_dark_360w_270h.png" group-title="TV",ESPN
http://41.205.93.154/ESPN/index.m3u8 http://mytvstream.net:8080/live/30550113/30550113/14197.m3u8
#EXTINF:-1 tvg-chno="43" tvg-id="ESPNEWS.HD.us2" tvg-name="ESPN News" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s16485_dark_360w_270h.png" group-title="TV",ESPN News #EXTINF:-1 tvg-chno="43" tvg-id="ESPNEWS.HD.us2" tvg-name="ESPN News" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s16485_dark_360w_270h.png" group-title="TV",ESPN News
http://fl31.moveonjoy.com/ESPN_NEWS/index.m3u8 http://mytvstream.net:8080/live/30550113/30550113/11707.m3u8
#EXTINF:-1 tvg-chno="44" tvg-id="ESPNU.HD.us2" tvg-name="ESPN U" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s45654_dark_360w_270h.png" group-title="TV",ESPN U #EXTINF:-1 tvg-chno="44" tvg-id="ESPNU.HD.us2" tvg-name="ESPN U" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s45654_dark_360w_270h.png" group-title="TV",ESPN U
http://23.237.104.106:8080/USA_ESPNU/index.m3u8 http://23.237.104.106:8080/USA_ESPNU/index.m3u8
@ -181,7 +181,7 @@ http://23.237.104.106:8080/USA_FOOD_NETWORK/index.m3u8
http://mytvstream.net:8080/live/30550113/30550113/121595.m3u8 http://mytvstream.net:8080/live/30550113/30550113/121595.m3u8
#EXTINF:-1 tvg-chno="61" tvg-id="Fox.Business.HD.us2" tvg-name="Fox Business" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s58649_dark_360w_270h.png" group-title="TV",Fox Business #EXTINF:-1 tvg-chno="61" tvg-id="Fox.Business.HD.us2" tvg-name="Fox Business" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s58649_dark_360w_270h.png" group-title="TV",Fox Business
https://fl31.moveonjoy.com/FOX_Business_Network/index.m3u8 http://mytvstream.net:8080/live/30550113/30550113/17639.m3u8
#EXTINF:-1 tvg-chno="62" tvg-id="Fox.News.Channel.HD.us2" tvg-name="Fox News" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s16374_dark_360w_270h.png" group-title="TV",Fox News #EXTINF:-1 tvg-chno="62" tvg-id="Fox.News.Channel.HD.us2" tvg-name="Fox News" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s16374_dark_360w_270h.png" group-title="TV",Fox News
http://mytvstream.net:8080/live/30550113/30550113/1818.m3u8 http://mytvstream.net:8080/live/30550113/30550113/1818.m3u8
@ -208,19 +208,19 @@ http://mytvstream.net:8080/live/30550113/30550113/10260.m3u8
http://23.237.104.106:8080/USA_FXX/index.m3u8 http://23.237.104.106:8080/USA_FXX/index.m3u8
#EXTINF:-1 tvg-chno="70" tvg-id="FYI.Channel.HD.us2" tvg-name="FYI TV" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s16834_dark_360w_270h.png" group-title="TV",FYI TV #EXTINF:-1 tvg-chno="70" tvg-id="FYI.Channel.HD.us2" tvg-name="FYI TV" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s16834_dark_360w_270h.png" group-title="TV",FYI TV
http://fl31.moveonjoy.com/FYI/index.m3u8 http://mytvstream.net:8080/live/30550113/30550113/9240.m3u8
#EXTINF:-1 tvg-chno="71" tvg-id="Game.Show.Network.HD.us2" tvg-name="Game Show Network" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s14909_dark_360w_270h.png" group-title="TV",Game Show Network #EXTINF:-1 tvg-chno="71" tvg-id="Game.Show.Network.HD.us2" tvg-name="Game Show Network" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s14909_dark_360w_270h.png" group-title="TV",Game Show Network
http://mytvstream.net:8080/live/30550113/30550113/120633.m3u8 http://mytvstream.net:8080/live/30550113/30550113/120633.m3u8
#EXTINF:-1 tvg-chno="72" tvg-id="get.us2" tvg-name="getTV" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s82563_dark_360w_270h.png" group-title="TV",getTV #EXTINF:-1 tvg-chno="72" tvg-id="get.us2" tvg-name="getTV" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s82563_dark_360w_270h.png" group-title="TV",getTV
http://fl31.moveonjoy.com/GET_TV/index.m3u8 http://mytvstream.net:8080/live/30550113/30550113/18366.m3u8
#EXTINF:-1 tvg-chno="73" tvg-id="Golf.Channel.HD.us2" tvg-name="Golf Channel" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s14899_dark_360w_270h.png" group-title="TV",Golf Channel #EXTINF:-1 tvg-chno="73" tvg-id="Golf.Channel.HD.us2" tvg-name="Golf Channel" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s14899_dark_360w_270h.png" group-title="TV",Golf Channel
https://fl31.moveonjoy.com/GOLF/index.m3u8 http://mytvstream.net:8080/live/30550113/30550113/46728.m3u8
#EXTINF:-1 tvg-chno="74" tvg-id="Grit.us2" tvg-name="Grit TV" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s89922_dark_360w_270h.png" group-title="TV",Grit TV #EXTINF:-1 tvg-chno="74" tvg-id="Grit.us2" tvg-name="Grit TV" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s89922_dark_360w_270h.png" group-title="TV",Grit TV
http://fl31.moveonjoy.com/GRIT_TV/index.m3u8 http://mytvstream.net:8080/live/30550113/30550113/20861.m3u8
#EXTINF:-1 tvg-chno="75" tvg-id="Hallmark.Channel.HD.us2" tvg-name="Hallmark Channel" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s11221_dark_360w_270h.png" group-title="TV",Hallmark Channel #EXTINF:-1 tvg-chno="75" tvg-id="Hallmark.Channel.HD.us2" tvg-name="Hallmark Channel" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s11221_dark_360w_270h.png" group-title="TV",Hallmark Channel
http://23.237.104.106:8080/USA_HALLMARK/index.m3u8 http://23.237.104.106:8080/USA_HALLMARK/index.m3u8
@ -238,10 +238,10 @@ http://23.237.104.106:8080/USA_HBO/index.m3u8
http://23.237.104.106:8080/USA_HBO2/index.m3u8 http://23.237.104.106:8080/USA_HBO2/index.m3u8
#EXTINF:-1 tvg-chno="80" tvg-id="HBO.Comedy.HD.us2" tvg-name="HBO Comedy" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s59839_dark_360w_270h.png" group-title="TV",HBO Comedy #EXTINF:-1 tvg-chno="80" tvg-id="HBO.Comedy.HD.us2" tvg-name="HBO Comedy" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s59839_dark_360w_270h.png" group-title="TV",HBO Comedy
http://fl31.moveonjoy.com/HBO_COMEDY/index.m3u8 http://23.237.104.106:8080/USA_HBO_COMEDY/index.m3u8
#EXTINF:-1 tvg-chno="81" tvg-id="HBO.Drama.us2" tvg-name="HBO Family" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s34879_dark_360w_270h.png" group-title="TV",HBO Family #EXTINF:-1 tvg-chno="81" tvg-id="HBO.Drama.us2" tvg-name="HBO Family" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s34879_dark_360w_270h.png" group-title="TV",HBO Family
https://fl31.moveonjoy.com/HBO_FAMILY/index.m3u8 http://mytvstream.net:8080/live/30550113/30550113/17772.m3u8
#EXTINF:-1 tvg-chno="82" tvg-id="HBO.Zone.HD.us2" tvg-name="HBO Zone" tvg-logo="https://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s18431_dark_360w_270h.png" group-title="TV",HBO Zone #EXTINF:-1 tvg-chno="82" tvg-id="HBO.Zone.HD.us2" tvg-name="HBO Zone" tvg-logo="https://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s18431_dark_360w_270h.png" group-title="TV",HBO Zone
http://23.237.104.106:8080/USA_HBO_ZONE/index.m3u8 http://23.237.104.106:8080/USA_HBO_ZONE/index.m3u8
@ -265,10 +265,10 @@ http://mytvstream.net:8080/live/30550113/30550113/46713.m3u8
http://23.237.104.106:8080/USA_LMN/index.m3u8 http://23.237.104.106:8080/USA_LMN/index.m3u8
#EXTINF:-1 tvg-chno="89" tvg-id="Marquee.Sports.Network.HD.us2" tvg-name="Marquee Sports Network" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s113768_dark_360w_270h.png" group-title="TV",Marquee Sports Network #EXTINF:-1 tvg-chno="89" tvg-id="Marquee.Sports.Network.HD.us2" tvg-name="Marquee Sports Network" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s113768_dark_360w_270h.png" group-title="TV",Marquee Sports Network
https://fl31.moveonjoy.com/MARQUEE_SPORTS_NETWORK/index.m3u8 http://mytvstream.net:8080/live/30550113/30550113/13379.m3u8
#EXTINF:-1 tvg-chno="90" tvg-id="MLB.Network.HD.us2" tvg-name="MLB Network" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s62081_dark_360w_270h.png" group-title="TV",MLB Network #EXTINF:-1 tvg-chno="90" tvg-id="MLB.Network.HD.us2" tvg-name="MLB Network" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s62081_dark_360w_270h.png" group-title="TV",MLB Network
https://fl31.moveonjoy.com/MLB_NETWORK/index.m3u8 http://mytvstream.net:8080/live/30550113/30550113/21360.m3u8
#EXTINF:-1 tvg-chno="91" tvg-id="MOTORTREND.HD.us2" tvg-name="MotorTrend TV" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s31046_dark_360w_270h.png" group-title="TV",MotorTrend TV #EXTINF:-1 tvg-chno="91" tvg-id="MOTORTREND.HD.us2" tvg-name="MotorTrend TV" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s31046_dark_360w_270h.png" group-title="TV",MotorTrend TV
http://mytvstream.net:8080/live/30550113/30550113/10399.m3u8 http://mytvstream.net:8080/live/30550113/30550113/10399.m3u8
@ -286,7 +286,7 @@ http://mytvstream.net:8080/live/30550113/30550113/9818.m3u8
http://23.237.104.106:8080/USA_NAT_GEO/index.m3u8 http://23.237.104.106:8080/USA_NAT_GEO/index.m3u8
#EXTINF:-1 tvg-chno="96" tvg-id="NBA.TV.HD.us2" tvg-name="NBA TV" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s32281_dark_360w_270h.png" group-title="TV",NBA TV #EXTINF:-1 tvg-chno="96" tvg-id="NBA.TV.HD.us2" tvg-name="NBA TV" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s32281_dark_360w_270h.png" group-title="TV",NBA TV
http://fl31.moveonjoy.com/NBA_TV/index.m3u8 http://mytvstream.net:8080/live/30550113/30550113/20073.m3u8
#EXTINF:-1 tvg-chno="97" tvg-id="WFLA-DT.us_locals1" tvg-name="NBC" tvg-logo="https://i.gyazo.com/39d42952500205d04e448247b7889256.png" group-title="TV",NBC #EXTINF:-1 tvg-chno="97" tvg-id="WFLA-DT.us_locals1" tvg-name="NBC" tvg-logo="https://i.gyazo.com/39d42952500205d04e448247b7889256.png" group-title="TV",NBC
http://mytvstream.net:8080/live/30550113/30550113/120950.m3u8 http://mytvstream.net:8080/live/30550113/30550113/120950.m3u8
@ -310,7 +310,7 @@ http://mytvstream.net:8080/live/30550113/30550113/20943.m3u8
http://23.237.104.106:8080/USA_NESN/index.m3u8 http://23.237.104.106:8080/USA_NESN/index.m3u8
#EXTINF:-1 tvg-chno="104" tvg-id="NewsNation.us2" tvg-name="NewsNation" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s91096_dark_360w_270h.png" group-title="TV",NewsNation #EXTINF:-1 tvg-chno="104" tvg-id="NewsNation.us2" tvg-name="NewsNation" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s91096_dark_360w_270h.png" group-title="TV",NewsNation
http://fl31.moveonjoy.com/NEWS_NATION/index.m3u8 http://mytvstream.net:8080/live/30550113/30550113/161450.m3u8
#EXTINF:-1 tvg-chno="105" tvg-id="NFL.Network.HD.us2" tvg-name="NFL Network" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/refs/heads/main/countries/united-states/nfl-network-hz-us.png" group-title="TV",NFL Network #EXTINF:-1 tvg-chno="105" tvg-id="NFL.Network.HD.us2" tvg-name="NFL Network" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/refs/heads/main/countries/united-states/nfl-network-hz-us.png" group-title="TV",NFL Network
http://23.237.104.106:8080/USA_NFL_NETWORK/index.m3u8 http://23.237.104.106:8080/USA_NFL_NETWORK/index.m3u8
@ -331,7 +331,7 @@ http://mytvstream.net:8080/live/30550113/30550113/36.m3u8
http://mytvstream.net:8080/live/30550113/30550113/9244.m3u8 http://mytvstream.net:8080/live/30550113/30550113/9244.m3u8
#EXTINF:-1 tvg-chno="111" tvg-id="Ovation.HD.us2" tvg-name="Ovation" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s15807_dark_360w_270h.png" group-title="TV",Ovation #EXTINF:-1 tvg-chno="111" tvg-id="Ovation.HD.us2" tvg-name="Ovation" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s15807_dark_360w_270h.png" group-title="TV",Ovation
https://fl31.moveonjoy.com/Ovation/index.m3u8 https://fl1.moveonjoy.com/Ovation/index.m3u8
#EXTINF:-1 tvg-chno="112" tvg-id="Oxygen.True.Crime.HD.us2" tvg-name="Oxygen" tvg-logo="https://i.gyazo.com/68db5ec4dba40181592406e7c3128fc7.png" group-title="TV",Oxygen #EXTINF:-1 tvg-chno="112" tvg-id="Oxygen.True.Crime.HD.us2" tvg-name="Oxygen" tvg-logo="https://i.gyazo.com/68db5ec4dba40181592406e7c3128fc7.png" group-title="TV",Oxygen
http://mytvstream.net:8080/live/30550113/30550113/46695.m3u8 http://mytvstream.net:8080/live/30550113/30550113/46695.m3u8
@ -340,7 +340,7 @@ http://mytvstream.net:8080/live/30550113/30550113/46695.m3u8
http://23.237.104.106:8080/USA_PARAMOUNT_NETWORK/index.m3u8 http://23.237.104.106:8080/USA_PARAMOUNT_NETWORK/index.m3u8
#EXTINF:-1 tvg-chno="114" tvg-id="POP.HD.us2" tvg-name="Pop TV" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s16715_dark_360w_270h.png" group-title="TV",Pop TV #EXTINF:-1 tvg-chno="114" tvg-id="POP.HD.us2" tvg-name="Pop TV" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s16715_dark_360w_270h.png" group-title="TV",Pop TV
https://fl31.moveonjoy.com/Pop_TV/index.m3u8 http://mytvstream.net:8080/live/30550113/30550113/20976.m3u8
#EXTINF:-1 tvg-chno="115" tvg-id="Premier.Sports.1.HD.uk" tvg-name="Premier Sports 1" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s79027_dark_360w_270h.png" group-title="TV",Premier Sports 1 #EXTINF:-1 tvg-chno="115" tvg-id="Premier.Sports.1.HD.uk" tvg-name="Premier Sports 1" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s79027_dark_360w_270h.png" group-title="TV",Premier Sports 1
https://starshare.st/live/P4B9TB9xR8/humongous2tonight/5029.ts https://starshare.st/live/P4B9TB9xR8/humongous2tonight/5029.ts
@ -355,13 +355,13 @@ http://23.237.104.106:8080/USA_REELZ/index.m3u8
http://23.237.104.106:8080/USA_SEC_NETWORK/index.m3u8 http://23.237.104.106:8080/USA_SEC_NETWORK/index.m3u8
#EXTINF:-1 tvg-chno="119" tvg-id="Paramount+.with.Showtime.HD.us2" tvg-name="Showtime" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/refs/heads/main/countries/united-states/showtime-us.png" group-title="TV",Showtime #EXTINF:-1 tvg-chno="119" tvg-id="Paramount+.with.Showtime.HD.us2" tvg-name="Showtime" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/refs/heads/main/countries/united-states/showtime-us.png" group-title="TV",Showtime
http://fl31.moveonjoy.com/SHOWTIME/index.m3u8 http://mytvstream.net:8080/live/30550113/30550113/46214.m3u8
#EXTINF:-1 tvg-chno="120" tvg-id="Smithsonian.HD.Network.us2" tvg-name="Smithsonian Channel" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s58532_dark_360w_270h.png" group-title="TV",Smithsonian Channel #EXTINF:-1 tvg-chno="120" tvg-id="Smithsonian.HD.Network.us2" tvg-name="Smithsonian Channel" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s58532_dark_360w_270h.png" group-title="TV",Smithsonian Channel
http://fl31.moveonjoy.com/SMITHSONIAN_CHANNEL/index.m3u8 http://mytvstream.net:8080/live/30550113/30550113/31150.m3u8
#EXTINF:-1 tvg-chno="121" tvg-id="Sony.Movie.Channel.HD.us2" tvg-name="Sony Movie Channel" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s69130_dark_360w_270h.png" group-title="TV",Sony Movie Channel #EXTINF:-1 tvg-chno="121" tvg-id="Sony.Movie.Channel.HD.us2" tvg-name="Sony Movie Channel" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s69130_dark_360w_270h.png" group-title="TV",Sony Movie Channel
http://fl31.moveonjoy.com/Sony_Movie_Channel/index.m3u8 http://mytvstream.net:8080/live/30550113/30550113/2214.m3u8
#EXTINF:-1 tvg-chno="122" tvg-id="Space.City.Home.Network.HD.us2" tvg-name="Space City Home Network" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s77744_dark_360w_270h.png" group-title="TV",Space City Home Network #EXTINF:-1 tvg-chno="122" tvg-id="Space.City.Home.Network.HD.us2" tvg-name="Space City Home Network" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s77744_dark_360w_270h.png" group-title="TV",Space City Home Network
http://mytvstream.net:8080/live/30550113/30550113/213668.m3u8 http://mytvstream.net:8080/live/30550113/30550113/213668.m3u8
@ -400,7 +400,7 @@ http://23.237.104.106:8080/USA_SYFY/index.m3u8
https://turnerlive.warnermediacdn.com/hls/live/2023172/tbseast/slate/VIDEO_0_3564000.m3u8 https://turnerlive.warnermediacdn.com/hls/live/2023172/tbseast/slate/VIDEO_0_3564000.m3u8
#EXTINF:-1 tvg-chno="134" tvg-id="Tennis.Channel.HD.us2" tvg-name="Tennis Channel" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s60316_dark_360w_270h.png" group-title="TV",Tennis Channel #EXTINF:-1 tvg-chno="134" tvg-id="Tennis.Channel.HD.us2" tvg-name="Tennis Channel" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s60316_dark_360w_270h.png" group-title="TV",Tennis Channel
https://fl31.moveonjoy.com/TENNIS_CHANNEL/index.m3u8 http://mytvstream.net:8080/live/30550113/30550113/20184.m3u8
#EXTINF:-1 tvg-chno="135" tvg-id="The.Weather.Channel.HD.us2" tvg-name="The Weather Channel" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s58812_dark_360w_270h.png" group-title="TV",The Weather Channel #EXTINF:-1 tvg-chno="135" tvg-id="The.Weather.Channel.HD.us2" tvg-name="The Weather Channel" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s58812_dark_360w_270h.png" group-title="TV",The Weather Channel
http://mytvstream.net:8080/live/30550113/30550113/18926.m3u8 http://mytvstream.net:8080/live/30550113/30550113/18926.m3u8
@ -424,7 +424,7 @@ http://mytvstream.net:8080/live/30550113/30550113/47442.m3u8
https://turnerlive.warnermediacdn.com/hls/live/2023186/tcmeast/noslate/VIDEO_1_5128000.m3u8 https://turnerlive.warnermediacdn.com/hls/live/2023186/tcmeast/noslate/VIDEO_1_5128000.m3u8
#EXTINF:-1 tvg-chno="142" tvg-id="TV.Land.HD.us2" tvg-name="TV Land" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s16123_dark_360w_270h.png" group-title="TV",TV Land #EXTINF:-1 tvg-chno="142" tvg-id="TV.Land.HD.us2" tvg-name="TV Land" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s16123_dark_360w_270h.png" group-title="TV",TV Land
https://fl31.moveonjoy.com/TV_LAND/index.m3u8 http://mytvstream.net:8080/live/30550113/30550113/46696.m3u8
#EXTINF:-1 tvg-chno="143" tvg-id="TV.ONE.HD.us2" tvg-name="TV One" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s35513_dark_360w_270h.png" group-title="TV",TV One #EXTINF:-1 tvg-chno="143" tvg-id="TV.ONE.HD.us2" tvg-name="TV One" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s35513_dark_360w_270h.png" group-title="TV",TV One
http://mytvstream.net:8080/live/30550113/30550113/20868.m3u8 http://mytvstream.net:8080/live/30550113/30550113/20868.m3u8

File diff suppressed because it is too large Load diff

View file

@ -21,7 +21,7 @@ from scrapers import (
streamhub, streamhub,
streamsgate, streamsgate,
totalsportek, totalsportek,
tvapp, tvpass,
watchfooty, watchfooty,
webcast, webcast,
xstreameast, xstreameast,
@ -65,12 +65,13 @@ async def main() -> None:
asyncio.create_task(embedhd.scrape(hdl_brwsr)), asyncio.create_task(embedhd.scrape(hdl_brwsr)),
asyncio.create_task(pixel.scrape(hdl_brwsr)), asyncio.create_task(pixel.scrape(hdl_brwsr)),
asyncio.create_task(ppv.scrape(xtrnl_brwsr)), asyncio.create_task(ppv.scrape(xtrnl_brwsr)),
asyncio.create_task(roxie.scrape(hdl_brwsr)),
asyncio.create_task(sport9.scrape(xtrnl_brwsr)), asyncio.create_task(sport9.scrape(xtrnl_brwsr)),
asyncio.create_task(streamcenter.scrape(xtrnl_brwsr)), asyncio.create_task(streamcenter.scrape(xtrnl_brwsr)),
# asyncio.create_task(streamhub.scrape(xtrnl_brwsr)), # asyncio.create_task(streamhub.scrape(xtrnl_brwsr)),
asyncio.create_task(streamsgate.scrape(xtrnl_brwsr)), asyncio.create_task(streamsgate.scrape(xtrnl_brwsr)),
asyncio.create_task(totalsportek.scrape(hdl_brwsr)), asyncio.create_task(totalsportek.scrape(hdl_brwsr)),
asyncio.create_task(tvapp.scrape(hdl_brwsr)), asyncio.create_task(tvpass.scrape(hdl_brwsr)),
# asyncio.create_task(webcast.scrape(hdl_brwsr)), # asyncio.create_task(webcast.scrape(hdl_brwsr)),
] ]
@ -78,7 +79,6 @@ async def main() -> None:
asyncio.create_task(fawa.scrape()), asyncio.create_task(fawa.scrape()),
asyncio.create_task(istreameast.scrape()), asyncio.create_task(istreameast.scrape()),
asyncio.create_task(pawa.scrape()), asyncio.create_task(pawa.scrape()),
asyncio.create_task(roxie.scrape()),
asyncio.create_task(shark.scrape()), asyncio.create_task(shark.scrape()),
asyncio.create_task(streambtw.scrape()), asyncio.create_task(streambtw.scrape()),
asyncio.create_task(xstreameast.scrape()), asyncio.create_task(xstreameast.scrape()),
@ -114,7 +114,7 @@ async def main() -> None:
| streamhub.urls | streamhub.urls
| streamsgate.urls | streamsgate.urls
| totalsportek.urls | totalsportek.urls
| tvapp.urls | tvpass.urls
| watchfooty.urls | watchfooty.urls
| webcast.urls | webcast.urls
| xstreameast.urls | xstreameast.urls

View file

@ -1,5 +1,4 @@
from functools import partial from functools import partial
from urllib.parse import urljoin
from playwright.async_api import Browser from playwright.async_api import Browser
@ -15,7 +14,7 @@ CACHE_FILE = Cache(TAG, exp=10_800)
API_FILE = Cache(f"{TAG}-api", exp=19_800) API_FILE = Cache(f"{TAG}-api", exp=19_800)
API_URL = "https://api.cdn-live.tv" API_URL = "https://api.cdn-live.tv/api/v1/events/sports"
async def get_events(cached_keys: list[str]) -> list[dict[str, str]]: async def get_events(cached_keys: list[str]) -> list[dict[str, str]]:
@ -27,7 +26,7 @@ async def get_events(cached_keys: list[str]) -> list[dict[str, str]]:
log.info("Refreshing API cache") log.info("Refreshing API cache")
if r := await network.request( if r := await network.request(
urljoin(API_URL, "api/v1/events/sports"), API_URL,
log=log, log=log,
params={"user": "cdnlivetv", "plan": "free"}, params={"user": "cdnlivetv", "plan": "free"},
): ):

View file

@ -1,5 +1,4 @@
from functools import partial from functools import partial
from urllib.parse import urljoin
from playwright.async_api import Browser from playwright.async_api import Browser
@ -15,7 +14,7 @@ CACHE_FILE = Cache(TAG, exp=5_400)
API_CACHE = Cache(f"{TAG}-api", exp=28_800) API_CACHE = Cache(f"{TAG}-api", exp=28_800)
BASE_URL = "https://embedhd.org" BASE_URL = "https://embedhd.org/api-event.php"
def fix_league(s: str) -> str: def fix_league(s: str) -> str:
@ -30,7 +29,7 @@ async def get_events(cached_keys: list[str]) -> list[dict[str, str]]:
api_data = {"timestamp": now.timestamp()} api_data = {"timestamp": now.timestamp()}
if r := await network.request(urljoin(BASE_URL, "api-event.php"), log=log): if r := await network.request(BASE_URL, log=log):
api_data: dict = r.json() api_data: dict = r.json()
api_data["timestamp"] = now.timestamp() api_data["timestamp"] = now.timestamp()

View file

@ -102,7 +102,7 @@ async def scrape() -> None:
log.info(f"Processing {len(events)} new URL(s)") log.info(f"Processing {len(events)} new URL(s)")
if events: if events:
now = Time.clean(Time.now()) now = Time.clean(Time.now()).timestamp()
for i, ev in enumerate(events, start=1): for i, ev in enumerate(events, start=1):
handler = partial( handler = partial(
@ -133,7 +133,7 @@ async def scrape() -> None:
"url": url, "url": url,
"logo": logo, "logo": logo,
"base": BASE_URL, "base": BASE_URL,
"timestamp": now.timestamp(), "timestamp": now,
"id": tvg_id or "Live.Event.us", "id": tvg_id or "Live.Event.us",
"href": ev["href"], "href": ev["href"],
"link": link, "link": link,

View file

@ -119,7 +119,7 @@ async def scrape() -> None:
log.info(f"Processing {len(events)} new URL(s)") log.info(f"Processing {len(events)} new URL(s)")
if events: if events:
now = Time.clean(Time.now()) now = Time.clean(Time.now()).timestamp()
for i, ev in enumerate(events, start=1): for i, ev in enumerate(events, start=1):
handler = partial( handler = partial(
@ -150,7 +150,7 @@ async def scrape() -> None:
"url": url, "url": url,
"logo": logo, "logo": logo,
"base": "https://gooz.aapmains.net", "base": "https://gooz.aapmains.net",
"timestamp": now.timestamp(), "timestamp": now,
"id": tvg_id or "Live.Event.us", "id": tvg_id or "Live.Event.us",
"link": link, "link": link,
} }

View file

@ -165,19 +165,19 @@ async def get_events(cached_keys: list[str]) -> list[dict[str, str]]:
XML_CACHE.write(events) XML_CACHE.write(events)
live = []
start_ts = now.delta(hours=-1).timestamp() start_ts = now.delta(hours=-1).timestamp()
end_ts = now.delta(minutes=5).timestamp() end_ts = now.delta(minutes=5).timestamp()
live = []
for k, v in events.items(): for k, v in events.items():
if k in cached_keys: if k in cached_keys:
continue continue
if ( if not (
v["sport"] not in VALID_SPORTS v["sport"] in VALID_SPORTS
and v["league"] not in VALID_SPORTS or v["league"] in VALID_SPORTS
and v["event"].lower() != "olympic games" or v["event"].lower() == "olympic games"
): ):
continue continue

View file

@ -15,7 +15,7 @@ TAG = "PAWA"
CACHE_FILE = Cache(TAG, exp=10_800) CACHE_FILE = Cache(TAG, exp=10_800)
BASE_URL = "https://pawastreams.net/feed" BASE_URL = "https://pawastreams.net/feed/"
async def process_event(url: str, url_num: int) -> str | None: async def process_event(url: str, url_num: int) -> str | None:
@ -102,7 +102,7 @@ async def scrape() -> None:
log.info(f"Processing {len(events)} new URL(s)") log.info(f"Processing {len(events)} new URL(s)")
if events: if events:
now = Time.clean(Time.now()) now = Time.clean(Time.now()).timestamp()
for i, ev in enumerate(events, start=1): for i, ev in enumerate(events, start=1):
handler = partial( handler = partial(
@ -133,7 +133,7 @@ async def scrape() -> None:
"url": url, "url": url,
"logo": logo, "logo": logo,
"base": link, "base": link,
"timestamp": now.timestamp(), "timestamp": now,
"id": tvg_id or "Live.Event.us", "id": tvg_id or "Live.Event.us",
"link": link, "link": link,
} }

View file

@ -1,6 +1,5 @@
import json import json
from functools import partial from functools import partial
from urllib.parse import urljoin
from playwright.async_api import Browser, Page from playwright.async_api import Browser, Page
@ -14,20 +13,20 @@ TAG = "PIXEL"
CACHE_FILE = Cache(TAG, exp=19_800) CACHE_FILE = Cache(TAG, exp=19_800)
BASE_URL = "https://pixelsport.tv" BASE_URL = "https://pixelsport.tv/backend/livetv/events"
async def get_api_data(page: Page) -> dict[str, list[dict, str, str]]: async def get_api_data(page: Page) -> dict[str, list[dict, str, str]]:
try: try:
await page.goto( await page.goto(
url := urljoin(BASE_URL, "backend/livetv/events"), BASE_URL,
wait_until="domcontentloaded", wait_until="domcontentloaded",
timeout=10_000, timeout=10_000,
) )
raw_json = await page.locator("pre").inner_text(timeout=5_000) raw_json = await page.locator("pre").inner_text(timeout=5_000)
except Exception as e: except Exception as e:
log.error(f'Failed to fetch "{url}": {e}') log.error(f'Failed to fetch "{BASE_URL}": {e}')
return {} return {}
@ -66,7 +65,7 @@ async def get_events(page: Page) -> dict[str, dict[str, str | float]]:
events[key] = { events[key] = {
"url": stream_link, "url": stream_link,
"logo": logo, "logo": logo,
"base": BASE_URL, "base": "https://pixelsport.tv",
"timestamp": now.timestamp(), "timestamp": now.timestamp(),
"id": tvg_id or "Live.Event.us", "id": tvg_id or "Live.Event.us",
} }

View file

@ -1,8 +1,8 @@
import asyncio import asyncio
import re
from functools import partial from functools import partial
from urllib.parse import urljoin from urllib.parse import urljoin
from playwright.async_api import Browser
from selectolax.parser import HTMLParser from selectolax.parser import HTMLParser
from .utils import Cache, Time, get_logger, leagues, network from .utils import Cache, Time, get_logger, leagues, network
@ -30,22 +30,6 @@ SPORT_ENDPOINTS = {
} }
async def process_event(url: str, url_num: int) -> str | None:
if not (html_data := await network.request(url, log=log)):
return
valid_m3u8 = re.compile(r"'clappr',\s+'([^\"]*)'", re.IGNORECASE)
if not (match := valid_m3u8.search(html_data.text)):
log.info(f"URL {url_num}) No M3U8 found")
return
log.info(f"URL {url_num}) Captured M3U8")
return match[1]
async def refresh_html_cache( async def refresh_html_cache(
url: str, url: str,
sport: str, sport: str,
@ -115,8 +99,8 @@ async def get_events(cached_keys: list[str]) -> list[dict[str, str]]:
live = [] live = []
start_ts = now.delta(minutes=-30).timestamp() start_ts = now.delta(hours=-1).timestamp()
end_ts = now.delta(minutes=30).timestamp() end_ts = now.delta(minutes=5).timestamp()
for k, v in events.items(): for k, v in events.items():
if k in cached_keys: if k in cached_keys:
@ -130,12 +114,14 @@ async def get_events(cached_keys: list[str]) -> list[dict[str, str]]:
return live return live
async def scrape() -> None: async def scrape(browser: Browser) -> None:
cached_urls = CACHE_FILE.load() cached_urls = CACHE_FILE.load()
cached_count = len(cached_urls) valid_urls = {k: v for k, v in cached_urls.items() if v["url"]}
urls.update(cached_urls) valid_count = cached_count = len(valid_urls)
urls.update(valid_urls)
log.info(f"Loaded {cached_count} event(s) from cache") log.info(f"Loaded {cached_count} event(s) from cache")
@ -146,21 +132,24 @@ async def scrape() -> None:
log.info(f"Processing {len(events)} new URL(s)") log.info(f"Processing {len(events)} new URL(s)")
if events: if events:
async with network.event_context(browser) as context:
for i, ev in enumerate(events, start=1): for i, ev in enumerate(events, start=1):
async with network.event_page(context) as page:
handler = partial( handler = partial(
process_event, network.process_event,
url=ev["link"], url=ev["link"],
url_num=i, url_num=i,
page=page,
log=log,
) )
url = await network.safe_process( url = await network.safe_process(
handler, handler,
url_num=i, url_num=i,
semaphore=network.HTTP_S, semaphore=network.PW_S,
log=log, log=log,
) )
if url:
sport, event, ts, link = ( sport, event, ts, link = (
ev["sport"], ev["sport"],
ev["event"], ev["event"],
@ -181,9 +170,14 @@ async def scrape() -> None:
"link": link, "link": link,
} }
urls[key] = cached_urls[key] = entry cached_urls[key] = entry
if new_count := len(cached_urls) - cached_count: if url:
valid_count += 1
urls[key] = entry
if new_count := valid_count - cached_count:
log.info(f"Collected and cached {new_count} new event(s)") log.info(f"Collected and cached {new_count} new event(s)")
else: else:

View file

@ -15,7 +15,7 @@ TAG = "SPORT9"
CACHE_FILE = Cache(TAG, exp=5_400) CACHE_FILE = Cache(TAG, exp=5_400)
BASE_URL = "https://sport9.ru" BASE_URL = "https://sport9.ru/"
async def get_events(cached_keys: list[str]) -> list[dict[str, str]]: async def get_events(cached_keys: list[str]) -> list[dict[str, str]]:
@ -104,7 +104,7 @@ async def scrape(browser: Browser) -> None:
log.info(f"Processing {len(events)} new URL(s)") log.info(f"Processing {len(events)} new URL(s)")
if events: if events:
now = Time.clean(Time.now()) now = Time.clean(Time.now()).timestamp()
async with network.event_context(browser, stealth=False) as context: async with network.event_context(browser, stealth=False) as context:
for i, ev in enumerate(events, start=1): for i, ev in enumerate(events, start=1):
@ -139,7 +139,7 @@ async def scrape(browser: Browser) -> None:
"url": url, "url": url,
"logo": logo, "logo": logo,
"base": "https://vividmosaica.com/", "base": "https://vividmosaica.com/",
"timestamp": now.timestamp(), "timestamp": now,
"id": tvg_id or "Live.Event.us", "id": tvg_id or "Live.Event.us",
"link": link, "link": link,
} }

View file

@ -17,7 +17,7 @@ CACHE_FILE = Cache(TAG, exp=10_800)
HTML_CACHE = Cache(f"{TAG}-html", exp=28_800) HTML_CACHE = Cache(f"{TAG}-html", exp=28_800)
MIRRORS = ["https://streamhub.pro", "https://livesports4u.net"] BASE_URL = "https://streamhub.pro/"
CATEGORIES = { CATEGORIES = {
"Soccer": "sport_68c02a4464a38", "Soccer": "sport_68c02a4464a38",
@ -35,17 +35,15 @@ CATEGORIES = {
async def refresh_html_cache( async def refresh_html_cache(
url: str,
date: str, date: str,
sport_id: str, sport_id: str,
ts: float, ts: float,
) -> dict[str, dict[str, str | float]]: ) -> dict[str, dict[str, str | float]]:
events = {} events = {}
if not ( if not (
html_data := await network.request( html_data := await network.request(
urljoin(url, f"events/{date}"), urljoin(BASE_URL, f"events/{date}"),
log=log, log=log,
params={"sport_id": sport_id}, params={"sport_id": sport_id},
) )
@ -95,7 +93,7 @@ async def refresh_html_cache(
return events return events
async def get_events(url: str, cached_keys: list[str]) -> list[dict[str, str]]: async def get_events(cached_keys: list[str]) -> list[dict[str, str]]:
now = Time.clean(Time.now()) now = Time.clean(Time.now())
if not (events := HTML_CACHE.load()): if not (events := HTML_CACHE.load()):
@ -103,7 +101,6 @@ async def get_events(url: str, cached_keys: list[str]) -> list[dict[str, str]]:
tasks = [ tasks = [
refresh_html_cache( refresh_html_cache(
url,
date, date,
sport_id, sport_id,
now.timestamp(), now.timestamp(),
@ -146,16 +143,9 @@ async def scrape(browser: Browser) -> None:
log.info(f"Loaded {cached_count} event(s) from cache") log.info(f"Loaded {cached_count} event(s) from cache")
if not (base_url := await network.get_base(MIRRORS)): log.info(f'Scraping from "{BASE_URL}"')
log.warning("No working PPV mirrors")
CACHE_FILE.write(cached_urls) events = await get_events(cached_urls.keys())
return
log.info(f'Scraping from "{base_url}"')
events = await get_events(base_url, cached_urls.keys())
log.info(f"Processing {len(events)} new URL(s)") log.info(f"Processing {len(events)} new URL(s)")

View file

@ -14,7 +14,7 @@ TAG = "TOTALSPRTK"
CACHE_FILE = Cache(TAG, exp=28_800) CACHE_FILE = Cache(TAG, exp=28_800)
BASE_URL = "https://live3.totalsportek777.com" BASE_URL = "https://live3.totalsportek777.com/"
def fix_txt(s: str) -> str: def fix_txt(s: str) -> str:

View file

@ -1,5 +1,5 @@
from functools import partial from functools import partial
from urllib.parse import urljoin, urlparse from urllib.parse import urljoin
from playwright.async_api import Browser from playwright.async_api import Browser
from selectolax.parser import HTMLParser from selectolax.parser import HTMLParser
@ -10,23 +10,19 @@ log = get_logger(__name__)
urls: dict[str, dict[str, str | float]] = {} urls: dict[str, dict[str, str | float]] = {}
TAG = "TVAPP" TAG = "TVPASS"
CACHE_FILE = Cache(TAG, exp=86_400) CACHE_FILE = Cache(TAG, exp=10_800)
HTML_CACHE = Cache(f"{TAG}-html", exp=28_800)
BASE_URL = "https://thetvapp.to" BASE_URL = "https://thetvapp.to"
def fix_url(s: str) -> str: async def refresh_html_cache(now_ts: float) -> dict[str, dict[str, str | float]]:
parsed = urlparse(s) log.info("Refreshing HTML cache")
base = f"origin.{parsed.netloc.split('.', 1)[-1]}" events = {}
return urljoin(f"http://{base}", parsed.path.replace("tracks-v1a1/", ""))
async def get_events(cached_keys: list[str]) -> list[dict[str, str]]:
events = []
if not (html_data := await network.request(BASE_URL, log=log)): if not (html_data := await network.request(BASE_URL, log=log)):
return events return events
@ -43,25 +39,56 @@ async def get_events(cached_keys: list[str]) -> list[dict[str, str]]:
continue continue
for a in row.css("a.list-group-item[href]"): for a in row.css("a.list-group-item[href]"):
event_name = a.text(strip=True).split(":", 1)[0]
if f"[{sport}] {event_name} ({TAG})" in cached_keys:
continue
if not (href := a.attributes.get("href")): if not (href := a.attributes.get("href")):
continue continue
events.append( if not (span := a.css_first("span")):
{ continue
event_time = span.text(strip=True)
event_dt = Time.from_str(event_time, timezone="UTC")
event_name = a.text(strip=True).split(":")[0]
key = f"[{sport}] {event_name} ({TAG})"
events[key] = {
"sport": sport, "sport": sport,
"event": event_name, "event": event_name,
"link": urljoin(BASE_URL, href), "link": urljoin(BASE_URL, href),
"event_ts": event_dt.timestamp(),
"timestamp": now_ts,
} }
)
return events return events
async def get_events(cached_keys: list[str]) -> list[dict[str, str]]:
now = Time.clean(Time.now())
if not (events := HTML_CACHE.load()):
events = await refresh_html_cache(now.timestamp())
HTML_CACHE.write(events)
live = []
start_ts = now.delta(minutes=-30).timestamp()
end_ts = now.delta(minutes=30).timestamp()
for k, v in events.items():
if k in cached_keys:
continue
if not start_ts <= v["event_ts"] <= end_ts:
continue
live.append({**v})
return live
async def scrape(browser: Browser) -> None: async def scrape(browser: Browser) -> None:
cached_urls = CACHE_FILE.load() cached_urls = CACHE_FILE.load()
@ -78,8 +105,6 @@ async def scrape(browser: Browser) -> None:
log.info(f"Processing {len(events)} new URL(s)") log.info(f"Processing {len(events)} new URL(s)")
if events: if events:
now = Time.clean(Time.now())
async with network.event_context(browser) as context: async with network.event_context(browser) as context:
for i, ev in enumerate(events, start=1): for i, ev in enumerate(events, start=1):
async with network.event_page(context) as page: async with network.event_page(context) as page:
@ -99,9 +124,10 @@ async def scrape(browser: Browser) -> None:
) )
if url: if url:
sport, event, link = ( sport, event, ts, link = (
ev["sport"], ev["sport"],
ev["event"], ev["event"],
ev["event_ts"],
ev["link"], ev["link"],
) )
@ -110,10 +136,10 @@ async def scrape(browser: Browser) -> None:
tvg_id, logo = leagues.get_tvg_info(sport, event) tvg_id, logo = leagues.get_tvg_info(sport, event)
entry = { entry = {
"url": fix_url(url), "url": url,
"logo": logo, "logo": logo,
"base": BASE_URL, "base": BASE_URL,
"timestamp": now.timestamp(), "timestamp": ts,
"id": tvg_id or "Live.Event.us", "id": tvg_id or "Live.Event.us",
"link": link, "link": link,
} }

View file

@ -1,11 +1,17 @@
## Base Log @ 2026-02-12 04:35 UTC ## Base Log @ 2026-02-11 04:40 UTC
### ✅ Working Streams: 144<br>❌ Dead Streams: 2 ### ✅ Working Streams: 138<br>❌ Dead Streams: 8
| Channel | Error (Code) | Link | | Channel | Error (Code) | Link |
| ------- | ------------ | ---- | | ------- | ------------ | ---- |
| C-SPAN | HTTP Error (403) | `http://mytvstream.net:8080/live/30550113/30550113/136589.m3u8` |
| Comedy TV | HTTP Error (000) | `https://fl1.moveonjoy.com/Comedy_TV/index.m3u8` |
| Crime & Investigation Network | HTTP Error (403) | `http://mytvstream.net:8080/live/30550113/30550113/53689.m3u8` |
| ESPN News | HTTP Error (000) | `http://mytvstream.net:8080/live/30550113/30550113/11707.m3u8` |
| ESPN2 | HTTP Error (000) | `http://mytvstream.net:8080/live/30550113/30550113/2210.m3u8` |
| Game Show Network | HTTP Error (403) | `http://mytvstream.net:8080/live/30550113/30550113/120633.m3u8` |
| Hallmark Mystery | HTTP Error (403) | `http://mytvstream.net:8080/live/30550113/30550113/10289.m3u8` | | Hallmark Mystery | HTTP Error (403) | `http://mytvstream.net:8080/live/30550113/30550113/10289.m3u8` |
| NFL RedZone | HTTP Error (000) | `http://mytvstream.net:8080/live/30550113/30550113/159118.m3u8` | | Ovation | HTTP Error (000) | `https://fl1.moveonjoy.com/Ovation/index.m3u8` |
--- ---
#### Base Channels URL #### Base Channels URL
``` ```