mirror of
https://github.com/doms9/iptv.git
synced 2026-04-21 19:46:59 +02:00
Compare commits
No commits in common. "136e7731de64c5e6eb47501fc5603f32e9050de6" and "6a88ff5ae255ccbd60aff128d256cdc5ec301e5d" have entirely different histories.
136e7731de
...
6a88ff5ae2
11 changed files with 128161 additions and 130573 deletions
4074
M3U8/TV.m3u8
4074
M3U8/TV.m3u8
File diff suppressed because it is too large
Load diff
249923
M3U8/TV.xml
249923
M3U8/TV.xml
File diff suppressed because one or more lines are too long
132
M3U8/base.m3u8
132
M3U8/base.m3u8
|
|
@ -13,7 +13,7 @@ http://23.237.104.106:8080/USA_ACCN/mpegts
|
|||
https://turnerlive.warnermediacdn.com/hls/live/2023183/aseast/noslate/VIDEO_1_5128000.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="5" tvg-id="Altitude.Sports.us2" tvg-name="Altitude Sports" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s44263_dark_360w_270h.png" group-title="TV",Altitude Sports
|
||||
http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/162771.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/79545.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="6" tvg-id="AMC.HD.us2" tvg-name="AMC" tvg-logo="https://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s10021_dark_360w_270h.png" group-title="TV",AMC
|
||||
http://41.205.93.154/AMC/index.m3u8
|
||||
|
|
@ -22,13 +22,13 @@ http://41.205.93.154/AMC/index.m3u8
|
|||
http://23.237.104.106:8080/USA_ANIMAL_PLANET/index.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="8" tvg-id="Antenna.TV.us2" tvg-name="Antenna TV" tvg-logo="https://cdn.tvpassport.com/image/station/240x135/v3/70248-224D0.png" group-title="TV",Antenna TV
|
||||
http://mytvstream.net:8080/live/k4Svp2/645504/20180.m3u8
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/20180.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="9" tvg-id="ASPiRE.HD.us2" tvg-name="Aspire" tvg-logo="https://i.gyazo.com/0dec42cc5ef48c489cc10db906dc5b9b.png" group-title="TV",Aspire
|
||||
http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/162754.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/21927.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="10" tvg-id="AXS.TV.us2" tvg-name="AXS TV" tvg-logo="https://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s28506_dark_360w_270h.png" group-title="TV",AXS TV
|
||||
http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/162519.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/48324.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="11" 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
|
||||
https://bcovlive-a.akamaihd.net/7f5ec16d102f4b5d92e8e27bc95ff424/us-east-1/6240731308001/playlist.m3u8
|
||||
|
|
@ -46,7 +46,7 @@ http://23.237.104.106:8080/USA_BTN/index.m3u8
|
|||
http://23.237.104.106:8080/USA_BOOMERANG/index.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="16" tvg-id="Boomerang.us2" tvg-name="Boomerang" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s21883_dark_360w_270h.png" group-title="TV",Boomerang
|
||||
http://23.237.104.106:8080/USA_BOOMERANG/index.m3u8
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/14741.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="17" tvg-id="Bounce.TV.us2" tvg-name="Bounce TV" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s73067_dark_360w_270h.png" group-title="TV",Bounce TV
|
||||
http://212.102.60.231/BOUNCE_TV/index.m3u8
|
||||
|
|
@ -58,7 +58,7 @@ http://41.205.93.154/BRAVO/index.m3u8
|
|||
https://buzzrota-web.amagi.tv/playlist.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="20" tvg-id="CSPAN.us2" tvg-name="C-SPAN" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s10161_dark_360w_270h.png" group-title="TV",C-SPAN
|
||||
http://mytvstream.net:8080/live/k4Svp2/645504/136589.m3u8
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/136589.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="21" tvg-id="Cartoon.Network.HD.us2" tvg-name="Cartoon Network" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s12131_dark_360w_270h.png" group-title="TV",Cartoon Network
|
||||
http://23.237.104.106:8080/USA_CARTOON_NETWORK/index.m3u8
|
||||
|
|
@ -73,7 +73,7 @@ https://cbsn-us.cbsnstream.cbsnews.com/out/v1/55a8648e8f134e82a470f83d562deeca/m
|
|||
https://dai.google.com/linear/hls/event/GxrCGmwST0ixsrc_QgB6qw/master.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="25" tvg-id="CBS.Sports.Network.HD.us2" tvg-name="CBS Sports Network" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s16365_dark_360w_270h.png" group-title="TV",CBS Sports Network
|
||||
http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/162524.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/10454.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="26" tvg-id="Cinemax.HD.us2" tvg-name="Cinemax" tvg-logo="https://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s34933_dark_360w_270h.png" group-title="TV",Cinemax
|
||||
http://23.237.104.106:8080/USA_CINEMAX/index.m3u8
|
||||
|
|
@ -106,25 +106,25 @@ http://23.237.104.106:8080/USA_COOKING/index.m3u8
|
|||
https://cdn-uw2-prod.tsv2.amagi.tv/linear/amg01438-ewscrippscompan-courttv-tablo/playlist.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="36" tvg-id="COZI.TV.us2" tvg-name="Cozi TV" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s78851_dark_360w_270h.png" group-title="TV",Cozi TV
|
||||
http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/162527.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/11868.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="37" 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
|
||||
http://23.237.104.106:8080/USA_CRIME_INVESTIGATION/mpegts
|
||||
|
||||
#EXTINF:-1 tvg-chno="38" tvg-id="KTLA-DT.us_locals1" tvg-name="CW" tvg-logo="https://i.gyazo.com/afd5b481b327d204087dfde6a7741f9d.png" group-title="TV",CW
|
||||
http://mytvstream.net:8080/live/k4Svp2/645504/120889.m3u8
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/120889.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="39" tvg-id="Discovery.Channel.HD.us2" tvg-name="Discovery Channel" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s11150_dark_360w_270h.png" group-title="TV",Discovery Channel
|
||||
http://23.237.104.106:8080/USA_DISCOVERY/index.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="40" 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://mytvstream.net:8080/live/k4Svp2/645504/57347.m3u8
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/57347.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="41" 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
|
||||
http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/162531.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/9861.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="42" 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
|
||||
http://mytvstream.net:8080/live/k4Svp2/645504/20866.m3u8
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/20866.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="43" 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 Channel
|
||||
http://89.105.221.127/Disney/index.m3u8?token=test
|
||||
|
|
@ -145,46 +145,46 @@ https://starshare.st/live/P4B9TB9xR8/humongous2tonight/1003.ts
|
|||
http://23.237.104.106:8080/USA_ESPNU/index.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="49" tvg-id="ESPN2.HD.us2" tvg-name="ESPN2" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s12444_dark_360w_270h.png" group-title="TV",ESPN2
|
||||
http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/162676.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/2210.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="50" tvg-id="FanDuel.Sports.Network.Detroit.HD.us" tvg-name="FDSN Detroit" tvg-logo="https://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s54286_dark_360w_270h.png" group-title="TV",FDSN Detroit
|
||||
http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/163686.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/20930.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="51" tvg-id="FanDuel.Sports.Network.Florida.-.North.Florida.HD.us" tvg-name="FDSN Florida" tvg-logo="https://i.gyazo.com/fad701fbaaafe161b13b23ed9b50179b.png" group-title="TV",FDSN Florida
|
||||
http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/163696.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/46794.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="52" tvg-id="FanDuel.Sports.Network.Midwest.St..Louis.us" tvg-name="FDSN Midwest" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s11058_dark_360w_270h.png" group-title="TV",FDSN Midwest
|
||||
http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/163668.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/66795.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="53" tvg-id="FanDuel.Sports.Network.North.us" tvg-name="FDSN North" tvg-logo="https://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s10977_dark_360w_270h.png" group-title="TV",FDSN North
|
||||
http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/163682.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/58827.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="54" tvg-id="FanDuel.Sports.Network.Ohio.-.Cleveland.us" tvg-name="FDSN Ohio" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s49691_dark_360w_270h.png" group-title="TV",FDSN Ohio
|
||||
http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/163690.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/17752.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="55" tvg-id="FanDuel.Sports.Network.Oklahoma.us" tvg-name="FDSN Oklahoma" tvg-logo="https://i.gyazo.com/80ad6fd142cd67f06eef58d9ce5aa72b.png" group-title="TV",FDSN Oklahoma
|
||||
http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/163674.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/20934.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="56" tvg-id="FanDuel.Sports.Network.SoCal.us" tvg-name="FDSN SoCal" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s16743_dark_360w_270h.png" group-title="TV",FDSN SoCal
|
||||
http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/163692.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/221151.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="57" tvg-id="FanDuel.Sports.Network.South.us" tvg-name="FDSN South" tvg-logo="https://i.gyazo.com/4d9dc12af42d7bca785878215367d5b2.png" group-title="TV",FDSN South
|
||||
http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/163698.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/20922.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="58" tvg-id="FanDuel.Sports.Network.Southeast.us" tvg-name="FDSN Southeast" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s20789_dark_360w_270h.png" group-title="TV",FDSN Southeast
|
||||
http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/163670.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/2213.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="59" tvg-id="FanDuel.Sports.Network.Southwest.us" tvg-name="FDSN Southwest" tvg-logo="https://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s59629_dark_360w_270h.png" group-title="TV",FDSN Southwest
|
||||
http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/163694.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/21843.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="60" tvg-id="Fanduel.Sports.Sun.HD.us" tvg-name="FDSN Sun" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s61084_dark_360w_270h.png" group-title="TV",FDSN Sun
|
||||
http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/163688.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/104917.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="61" tvg-id="FanDuel.Sports.Network.West.us" tvg-name="FDSN West" tvg-logo="https://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s59627_dark_360w_270h.png" group-title="TV",FDSN West
|
||||
https://starshare.st/live/P4B9TB9xR8/humongous2tonight/3426.ts
|
||||
|
||||
#EXTINF:-1 tvg-chno="62" tvg-id="FanDuel.Sports.Network.Wisconsin.us" tvg-name="FDSN Wisconsin" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s16348_dark_360w_270h.png" group-title="TV",FDSN Wisconsin
|
||||
http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/163684.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/78599.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="63" tvg-id="plex.tv.FIFA+.plex" tvg-name="FIFA+ TV" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s136235_dark_360w_270h.png" group-title="TV",FIFA+ TV
|
||||
https://jmp2.uk/stvp-IN270000230
|
||||
|
|
@ -196,7 +196,7 @@ http://23.237.104.106:8080/USA_FOOD_NETWORK/index.m3u8
|
|||
http://stream.cammonitorplus.net/1772/index.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="66" 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
|
||||
http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/162539.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/17639.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="67" 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
|
||||
https://starshare.st/live/P4B9TB9xR8/humongous2tonight/51.ts
|
||||
|
|
@ -208,7 +208,7 @@ https://starshare.st/live/P4B9TB9xR8/humongous2tonight/3420.ts
|
|||
https://starshare.st/live/P4B9TB9xR8/humongous2tonight/55.ts
|
||||
|
||||
#EXTINF:-1 tvg-chno="70" tvg-id="Freeform.HD.us2" tvg-name="Freeform TV" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s10093_dark_360w_270h.png" group-title="TV",Freeform TV
|
||||
http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/162693.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/13370.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="71" tvg-id="Fuse.HD.us2" tvg-name="FUSE" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s14929_dark_360w_270h.png" group-title="TV",FUSE
|
||||
http://23.237.104.106:8080/USA_FUSE/index.m3u8
|
||||
|
|
@ -217,31 +217,31 @@ http://23.237.104.106:8080/USA_FUSE/index.m3u8
|
|||
http://23.237.104.106:8080/USA_FX/index.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="73" tvg-id="FX.Movie.Channel.HD.us2" tvg-name="FX Movie Channel" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s70253_dark_360w_270h.png" group-title="TV",FX Movie Channel
|
||||
http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/162697.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/10260.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="74" tvg-id="FXX.HD.us2" tvg-name="FXX" tvg-logo="https://raw.githubusercontent.com/tv-logo/tv-logos/refs/heads/main/countries/united-states/fxx-us.png" group-title="TV",FXX
|
||||
http://23.237.104.106:8080/USA_FXX/index.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="75" 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://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/162544.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/9240.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="76" 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://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/162699.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/120633.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="77" 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://mytvstream.net:8080/live/k4Svp2/645504/18366.m3u8
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/18366.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="78" 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://starshare.st/live/P4B9TB9xR8/humongous2tonight/3294.ts
|
||||
|
||||
#EXTINF:-1 tvg-chno="79" 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://mytvstream.net:8080/live/k4Svp2/645504/20861.m3u8
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/20861.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="80" 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
|
||||
|
||||
#EXTINF:-1 tvg-chno="81" tvg-id="Hallmark.Mystery.HD.us2" tvg-name="Hallmark Mystery" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s61522_dark_360w_270h.png" group-title="TV",Hallmark Mystery
|
||||
http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/162546.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/10289.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="82" tvg-id="HBO.East.us2" tvg-name="HBO" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s10240_dark_360w_270h.png" group-title="TV",HBO
|
||||
http://23.237.104.106:8080/USA_HBO/index.m3u8
|
||||
|
|
@ -253,13 +253,13 @@ http://23.237.104.106:8080/USA_HBO2/index.m3u8
|
|||
http://23.237.104.106:8080/USA_HBO_COMEDY/index.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="85" 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
|
||||
http://mytvstream.net:8080/live/k4Svp2/645504/17772.m3u8
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/17772.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="86" 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
|
||||
|
||||
#EXTINF:-1 tvg-chno="87" tvg-id="History.HD.us2" tvg-name="History Channel" tvg-logo="https://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s87679_dark_360w_270h.png" group-title="TV",History Channel
|
||||
http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/162548.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/15017.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="88" tvg-id="HLN.HD.us2" tvg-name="HLN TV" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s10145_dark_360w_270h.png" group-title="TV",HLN TV
|
||||
http://23.237.104.106:8080/USA_HLN/index.m3u8
|
||||
|
|
@ -268,10 +268,10 @@ http://23.237.104.106:8080/USA_HLN/index.m3u8
|
|||
http://89.105.221.127/INSP/index.m3u8?token=test
|
||||
|
||||
#EXTINF:-1 tvg-chno="90" tvg-id="Investigation.Discovery.HD.us2" tvg-name="Investigation Discovery" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s16615_dark_360w_270h.png" group-title="TV",Investigation Discovery
|
||||
http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/162708.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/46810.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="91" tvg-id="ION.Television.HD.us2" tvg-name="ION TV" tvg-logo="https://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s18633_dark_360w_270h.png" group-title="TV",ION TV
|
||||
http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/162550.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/9297.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="92" tvg-id="Lifetime.HD.us2" tvg-name="Lifetime" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s10918_dark_360w_270h.png" group-title="TV",Lifetime
|
||||
http://41.205.93.154/LIFETIME/index.m3u8
|
||||
|
|
@ -280,19 +280,19 @@ http://41.205.93.154/LIFETIME/index.m3u8
|
|||
http://23.237.104.106:8080/USA_LMN/index.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="94" 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
|
||||
http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/162758.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/13379.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="95" 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
|
||||
http://89.105.221.127/MLBNetwork/mpegts?token=test
|
||||
|
||||
#EXTINF:-1 tvg-chno="96" 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://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/162559.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/10399.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="97" tvg-id="MSG.National.us2" tvg-name="MSG" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s10979_dark_360w_270h.png" group-title="TV",MSG
|
||||
http://23.237.104.106:8080/USA_MSG/index.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="98" tvg-id="MSNBC.HD.us2" tvg-name="MSNBC" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s16300_dark_360w_270h.png" group-title="TV",MSNBC
|
||||
http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/162560.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/9296.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="99" tvg-id="MTV.-.Music.Television.HD.us2" tvg-name="MTV" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s10986_dark_360w_270h.png" group-title="TV",MTV
|
||||
http://23.237.104.106:8080/USA_MTV/index.m3u8
|
||||
|
|
@ -307,25 +307,25 @@ http://212.102.60.231/NBA_TV/index.m3u8
|
|||
http://stream.cammonitorplus.net/1812/index.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="103" tvg-id="NBC.Sports.Bay.Area.HD.us2" tvg-name="NBC Sports Bay Area" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s63138_dark_360w_270h.png" group-title="TV",NBC Sports Bay Area
|
||||
http://mytvstream.net:8080/live/k4Svp2/645504/9900.m3u8
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/9900.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="104" tvg-id="NBC.Sports.Boston.HD.us2" tvg-name="NBC Sports Boston" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s49198_dark_360w_270h.png" group-title="TV",NBC Sports Boston
|
||||
http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/162566.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/20939.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="105" tvg-id="NBC.Sports.California.SAT.us2" tvg-name="NBC Sports California" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s45540_dark_360w_270h.png" group-title="TV",NBC Sports California
|
||||
http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/162769.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/20940.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="106" tvg-id="a90a91570ce0536cbb22b591ad7e0da2" tvg-name="NBC Sports NOW" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s114140_dark_360w_270h.png" group-title="TV",NBC Sports NOW
|
||||
https://jmp2.uk/stvp-USBD420002446
|
||||
|
||||
#EXTINF:-1 tvg-chno="107" tvg-id="NBC.Sports.Philadelphia.HD.us2" tvg-name="NBC Sports Philadelphia" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s32571_dark_360w_270h.png" group-title="TV",NBC Sports Philadelphia
|
||||
http://mytvstream.net:8080/live/k4Svp2/645504/20943.m3u8
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/20943.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="108" tvg-id="New.England.Sports.Network.HD.us2" tvg-name="NESN" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s35038_dark_360w_270h.png" group-title="TV",NESN
|
||||
http://23.237.104.106:8080/USA_NESN/index.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="109" 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://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/162727.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/161450.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="110" 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
|
||||
|
|
@ -334,10 +334,10 @@ http://23.237.104.106:8080/USA_NFL_NETWORK/index.m3u8
|
|||
https://starshare.st/live/P4B9TB9xR8/humongous2tonight/23550.ts
|
||||
|
||||
#EXTINF:-1 tvg-chno="112" tvg-id="NHL.Network.HD.us2" tvg-name="NHL Network" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s58570_dark_360w_270h.png" group-title="TV",NHL Network
|
||||
http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/169385.ts
|
||||
http://hardcoremedia.xyz/live/rabdsbmz/3731346838/257211.ts
|
||||
|
||||
#EXTINF:-1 tvg-chno="113" tvg-id="Nick.Jr.HD.us2" tvg-name="Nick Jr" tvg-logo="https://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s19211_dark_360w_270h.png" group-title="TV",Nick Jr
|
||||
http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/162571.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/46710.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="114" tvg-id="Nickelodeon.HD.us2" tvg-name="Nickelodeon" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s11006_dark_360w_270h.png" group-title="TV",Nickelodeon
|
||||
http://23.237.104.106:8080/USA_NICKELODEON/index.m3u8
|
||||
|
|
@ -361,7 +361,7 @@ http://23.237.104.106:8080/USA_PARAMOUNT_NETWORK/index.m3u8
|
|||
https://2-fss-2.streamhoster.com/pl_140/amlst:200914-1298290/playlist.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="121" 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
|
||||
http://mytvstream.net:8080/live/k4Svp2/645504/20976.m3u8
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/20976.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="122" 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
|
||||
|
|
@ -373,7 +373,7 @@ https://starshare.st/live/P4B9TB9xR8/humongous2tonight/5030.ts
|
|||
http://212.102.60.231/QVC/index.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="125" tvg-id="ReelzChannel.HD.us2" tvg-name="Reelz Channel" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s68385_dark_360w_270h.png" group-title="TV",Reelz Channel
|
||||
http://23.237.104.106:8080/USA_REELZ/index.m3u8
|
||||
http://212.102.60.231/REELZ/index.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="126" tvg-id="SEC.Network.HD.us2" tvg-name="SEC Network" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s89535_dark_360w_270h.png" group-title="TV",SEC Network
|
||||
http://23.237.104.106:8080/USA_SEC_NETWORK/index.m3u8
|
||||
|
|
@ -382,7 +382,7 @@ http://23.237.104.106:8080/USA_SEC_NETWORK/index.m3u8
|
|||
http://23.237.104.106:8080/USA_SHOWTIME/index.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="128" tvg-id="Showtime.Extreme.HD.us2" tvg-name="Showtime Extreme" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s18086_dark_360w_270h.png" group-title="TV",Showtime Extreme
|
||||
http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/162734.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/13220.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="129" tvg-id="Sky.Family.HD.uk" tvg-name="Sky Family" tvg-logo="https://d2n0069hmnqmmx.cloudfront.net/epgdata/1.0/newchanlogos/80/35/skychb4018.png" group-title="TV",Sky Family
|
||||
https://starshare.st/live/P4B9TB9xR8/humongous2tonight/274.ts
|
||||
|
|
@ -391,37 +391,37 @@ https://starshare.st/live/P4B9TB9xR8/humongous2tonight/274.ts
|
|||
https://starshare.st/live/P4B9TB9xR8/humongous2tonight/23.ts
|
||||
|
||||
#EXTINF:-1 tvg-chno="131" 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://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/45866.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/31150.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="132" 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://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/162583.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/2214.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="133" 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
|
||||
https://starshare.st/live/P4B9TB9xR8/humongous2tonight/3428.ts
|
||||
|
||||
#EXTINF:-1 tvg-chno="134" tvg-id="Spectrum.SportsNet.LA.Dodgers.HD.us2" tvg-name="Spectrum SportsNet LA Dodgers" tvg-logo="https://i.gyazo.com/765cce528ddda366695bb178d9dee6da.png" group-title="TV",Spectrum SportsNet LA Dodgers
|
||||
http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/162585.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/31636.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="135" tvg-id="Spectrum.SportsNet.Lakers.HD.us2" tvg-name="Spectrum SportsNet Lakers" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s77422_dark_360w_270h.png" group-title="TV",Spectrum SportsNet Lakers
|
||||
http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/162739.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/21842.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="136" tvg-id="Sportsman.Channel.us2" tvg-name="Sportsman Channel" tvg-logo="https://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s33930_dark_360w_270h.png" group-title="TV",Sportsman Channel
|
||||
http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/162586.ts
|
||||
http://212.102.60.231/SPORTSMAN_CHANNEL/index.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="137" tvg-id="Sportsnet.360.HD.ca2" tvg-name="Sportsnet 360" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s49952_dark_360w_270h.png" group-title="TV",Sportsnet 360
|
||||
https://stream.decentdoubts.net/803/index.m3u8
|
||||
https://stream.decentdoubts.net/803/index.m3u8?token=MnJPcXQ1NlRydE9iZ3BqYXNxMjJ5SlNucTV5dG02K0QyNHZJeDZlbmxZVERxNEduaVp1UnBxU2VlWmF0ZnRlRGxaMm0wNStDbnJOOXJJM0puSytpbkE9PQ==
|
||||
|
||||
#EXTINF:-1 tvg-chno="138" tvg-id="Sportsnet.East.ca2" tvg-name="Sportsnet East" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s62109_dark_360w_270h.png" group-title="TV",Sportsnet East
|
||||
https://stream.decentdoubts.net/801/index.m3u8
|
||||
https://stream.decentdoubts.net/801/index.m3u8?token=MnJPcXQ1NlRydE9iZ3BqYXNxMjJ5SlNucTV5dG02K0QyNHZJeDZlbmxZVERxNEduaVp1UnBxU2VlWmF0ZnRlRGxaMm0wNStDbnJOOXJJM0puSytpbkE9PQ==
|
||||
|
||||
#EXTINF:-1 tvg-chno="139" tvg-id="SNY.SportsNet.New.York.HD.us2" tvg-name="SportsNet New York" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s50038_dark_360w_270h.png" group-title="TV",SportsNet New York
|
||||
http://212.102.60.231/SNY/index.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="140" tvg-id="Sportsnet.One.ca2" tvg-name="Sportsnet One" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s68859_dark_360w_270h.png" group-title="TV",Sportsnet One
|
||||
https://stream.decentdoubts.net/808/index.m3u8
|
||||
https://stream.decentdoubts.net/808/index.m3u8?token=MnJPcXQ1NlRydE9iZ3BqYXNxMjJ5SlNucTV5dG02K0QyNHZJeDZlbmxZVERxNEduaVp1UnBxU2VlWmF0ZnRlRGxaMm0wNStDbnJOOXJJM0puSytpbkE9PQ==
|
||||
|
||||
#EXTINF:-1 tvg-chno="141" tvg-id="SportsNet.Pittsburgh.HD.us2" tvg-name="SportsNet Pittsburgh" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s26028_dark_360w_270h.png" group-title="TV",SportsNet Pittsburgh
|
||||
http://mytvstream.net:8080/live/k4Svp2/645504/108178.m3u8
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/108178.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="142" tvg-id="Starz.HD.us2" tvg-name="Starz" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s12719_dark_360w_270h.png" group-title="TV",Starz
|
||||
http://23.237.104.106:8080/USA_STARZ/index.m3u8
|
||||
|
|
@ -436,10 +436,10 @@ http://23.237.104.106:8080/USA_SYFY/index.m3u8
|
|||
https://turnerlive.warnermediacdn.com/hls/live/2023172/tbseast/slate/VIDEO_0_3564000.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="146" 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
|
||||
http://mytvstream.net:8080/live/k4Svp2/645504/20184.m3u8
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/20184.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="147" 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://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/162591.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/18926.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="148" tvg-id="TLC.HD.(US).us2" tvg-name="TLC" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s11158_dark_360w_270h.png" group-title="TV",TLC
|
||||
http://89.105.221.127/tlc/mpegts?token=test
|
||||
|
|
@ -451,22 +451,22 @@ https://turnerlive.warnermediacdn.com/hls/live/2023168/tnteast/slate/VIDEO_0_356
|
|||
https://turnerlive.warnermediacdn.com/hls/live/2023176/trueast/slate/VIDEO_0_3564000.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="151" tvg-id="TSN.1.ca2" tvg-name="TSN1" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s11182_dark_360w_270h.png" group-title="TV",TSN1
|
||||
https://stream.decentdoubts.net/805/index.m3u8
|
||||
https://stream.decentdoubts.net/805/index.m3u8?token=MnJPcXQ1NlRydE9iZ3BqYXNxMjJ5SlNucTV5dG02K0QyNHZJeDZlbmxZVERxNEduaVp1
|
||||
|
||||
#EXTINF:-1 tvg-chno="152" tvg-id="TSN.2.ca2" tvg-name="TSN2" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s61474_dark_360w_270h.png" group-title="TV",TSN2
|
||||
https://stream.decentdoubts.net/806/index.m3u8
|
||||
https://stream.decentdoubts.net/806/index.m3u8?token=MnJPcXQ1NlRydE9iZ3BqYXNxMjJ5SlNucTV5dG02K0QyNHZJeDZlbmxZVERxNEduaVp1
|
||||
|
||||
#EXTINF:-1 tvg-chno="153" tvg-id="Turner.Classic.Movies.HD.us2" tvg-name="Turner Classic Movies" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s12852_dark_360w_270h.png" group-title="TV",Turner Classic Movies
|
||||
https://turnerlive.warnermediacdn.com/hls/live/2023186/tcmeast/noslate/VIDEO_1_5128000.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="154" 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
|
||||
http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/162596.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/46696.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="155" 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/k4Svp2/645504/20868.m3u8
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/20868.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="156" tvg-id="USA.Network.HD.us2" tvg-name="USA East" tvg-logo="http://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s11207_dark_360w_270h.png" group-title="TV",USA East
|
||||
http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/162604.ts
|
||||
http://mytvstream.net:8080/live/5AGbfz/324331/10252.m3u8
|
||||
|
||||
#EXTINF:-1 tvg-chno="157" tvg-id="VH1.HD.us2" tvg-name="VH1" tvg-logo="https://schedulesdirect-api20141201-logos.s3.dualstack.us-east-1.amazonaws.com/stationLogos/s11218_dark_360w_270h.png" group-title="TV",VH1
|
||||
http://23.237.104.106:8080/USA_VH1/index.m3u8
|
||||
|
|
|
|||
3942
M3U8/events.m3u8
3942
M3U8/events.m3u8
File diff suppressed because it is too large
Load diff
|
|
@ -67,6 +67,8 @@ async def main() -> None:
|
|||
asyncio.create_task(ppv.scrape(xtrnl_brwsr)),
|
||||
asyncio.create_task(roxie.scrape(hdl_brwsr)),
|
||||
asyncio.create_task(streamcenter.scrape(hdl_brwsr)),
|
||||
asyncio.create_task(streamhub.scrape(xtrnl_brwsr)),
|
||||
asyncio.create_task(streamsgate.scrape(xtrnl_brwsr)),
|
||||
]
|
||||
|
||||
httpx_tasks = [
|
||||
|
|
@ -76,8 +78,6 @@ async def main() -> None:
|
|||
asyncio.create_task(ovogoal.scrape()),
|
||||
asyncio.create_task(pawa.scrape()),
|
||||
asyncio.create_task(shark.scrape()),
|
||||
asyncio.create_task(streamhub.scrape()),
|
||||
asyncio.create_task(streamsgate.scrape()),
|
||||
asyncio.create_task(streamtpnew.scrape()),
|
||||
asyncio.create_task(totalsportek.scrape()),
|
||||
asyncio.create_task(tvapp.scrape()),
|
||||
|
|
|
|||
|
|
@ -64,34 +64,36 @@ async def get_events(cached_keys: list[str]) -> list[dict[str, str]]:
|
|||
|
||||
soup = HTMLParser(html_data.content)
|
||||
|
||||
sport = None
|
||||
for card in soup.css(".section-title"):
|
||||
sport = fix_league(card.text(strip=True))
|
||||
|
||||
for node in soup.css(".wrapper *"):
|
||||
if (cls := node.attributes.get("class")) == "section-title":
|
||||
sport = fix_league(node.text(strip=True))
|
||||
node = card.next
|
||||
|
||||
if node.tag == "a" and cls == "match":
|
||||
if not sport:
|
||||
continue
|
||||
while node:
|
||||
if node.attributes.get("class") == "section-title":
|
||||
break
|
||||
|
||||
if not (team_elems := node.css(".team")):
|
||||
continue
|
||||
elif node.tag == "a" and node.attributes.get("class") == "match":
|
||||
if not (team_elems := node.css(".team")):
|
||||
continue
|
||||
|
||||
if not (href := node.attributes.get("href")):
|
||||
continue
|
||||
if not (href := node.attributes.get("href")):
|
||||
continue
|
||||
|
||||
event_name = " vs ".join(team.text(strip=True) for team in team_elems)
|
||||
event_name = " vs ".join(team.text(strip=True) for team in team_elems)
|
||||
|
||||
if f"[{sport}] {event_name} ({TAG})" in cached_keys:
|
||||
continue
|
||||
if f"[{sport}] {event_name} ({TAG})" in cached_keys:
|
||||
continue
|
||||
|
||||
events.append(
|
||||
{
|
||||
"sport": sport,
|
||||
"event": event_name,
|
||||
"link": href,
|
||||
}
|
||||
)
|
||||
events.append(
|
||||
{
|
||||
"sport": sport,
|
||||
"event": event_name,
|
||||
"link": href,
|
||||
}
|
||||
)
|
||||
|
||||
node = node.next
|
||||
|
||||
return events
|
||||
|
||||
|
|
|
|||
|
|
@ -1,165 +1,165 @@
|
|||
import re
|
||||
from functools import partial
|
||||
|
||||
from playwright.async_api import Browser
|
||||
|
||||
from .utils import Cache, Time, get_logger, leagues, network
|
||||
|
||||
log = get_logger(__name__)
|
||||
|
||||
urls: dict[str, dict[str, str | float]] = {}
|
||||
|
||||
TAG = "PPV"
|
||||
|
||||
CACHE_FILE = Cache(TAG, exp=10_800)
|
||||
|
||||
API_FILE = Cache(f"{TAG}-api", exp=19_800)
|
||||
|
||||
API_MIRRORS = [
|
||||
"https://api.ppv.to/api/streams",
|
||||
"https://api.ppv.cx/api/streams",
|
||||
"https://api.ppv.sh/api/streams",
|
||||
"https://api.ppv.la/api/streams",
|
||||
]
|
||||
|
||||
|
||||
def fix_url(s: str) -> str:
|
||||
pattern = re.compile(r"index\.m3u8$", re.I)
|
||||
|
||||
return pattern.sub(r"tracks-v1a1/mono.ts.m3u8", s)
|
||||
|
||||
|
||||
async def get_events(url: str, cached_keys: list[str]) -> list[dict[str, str]]:
|
||||
now = Time.clean(Time.now())
|
||||
|
||||
if not (api_data := API_FILE.load(per_entry=False)):
|
||||
log.info("Refreshing API cache")
|
||||
|
||||
api_data = {"timestamp": now.timestamp()}
|
||||
|
||||
if r := await network.request(url, log=log):
|
||||
api_data: dict = r.json()
|
||||
|
||||
API_FILE.write(api_data)
|
||||
|
||||
events = []
|
||||
|
||||
start_dt = now.delta(hours=-1)
|
||||
end_dt = now.delta(minutes=5)
|
||||
|
||||
for stream_group in api_data.get("streams", []):
|
||||
sport = stream_group["category"]
|
||||
|
||||
if sport == "24/7 Streams":
|
||||
continue
|
||||
|
||||
for event in stream_group.get("streams", []):
|
||||
name = event.get("name")
|
||||
|
||||
start_ts = event.get("starts_at")
|
||||
|
||||
logo = event.get("poster")
|
||||
|
||||
iframe = event.get("iframe")
|
||||
|
||||
if not (name and start_ts and iframe):
|
||||
continue
|
||||
|
||||
if f"[{sport}] {name} ({TAG})" in cached_keys:
|
||||
continue
|
||||
|
||||
event_dt = Time.from_ts(start_ts)
|
||||
|
||||
if not start_dt <= event_dt <= end_dt:
|
||||
continue
|
||||
|
||||
events.append(
|
||||
{
|
||||
"sport": sport,
|
||||
"event": name,
|
||||
"link": f"{iframe}#player=clappr#autoplay=true",
|
||||
"logo": logo,
|
||||
"timestamp": event_dt.timestamp(),
|
||||
}
|
||||
)
|
||||
|
||||
return events
|
||||
|
||||
|
||||
async def scrape(browser: Browser) -> None:
|
||||
cached_urls = CACHE_FILE.load()
|
||||
|
||||
valid_urls = {k: v for k, v in cached_urls.items() if v["url"]}
|
||||
|
||||
valid_count = cached_count = len(valid_urls)
|
||||
|
||||
urls.update(valid_urls)
|
||||
|
||||
log.info(f"Loaded {cached_count} event(s) from cache")
|
||||
|
||||
if not (api_url := await network.get_base(API_MIRRORS)):
|
||||
log.warning("No working PPV mirrors")
|
||||
|
||||
CACHE_FILE.write(cached_urls)
|
||||
|
||||
return
|
||||
|
||||
log.info(f'Scraping from "{api_url}"')
|
||||
|
||||
if events := await get_events(api_url, cached_urls.keys()):
|
||||
log.info(f"Processing {len(events)} new URL(s)")
|
||||
|
||||
async with network.event_context(browser, stealth=False) as context:
|
||||
for i, ev in enumerate(events, start=1):
|
||||
async with network.event_page(context) as page:
|
||||
handler = partial(
|
||||
network.process_event,
|
||||
url=(link := ev["link"]),
|
||||
url_num=i,
|
||||
page=page,
|
||||
timeout=6,
|
||||
log=log,
|
||||
)
|
||||
|
||||
url = await network.safe_process(
|
||||
handler,
|
||||
url_num=i,
|
||||
semaphore=network.PW_S,
|
||||
log=log,
|
||||
)
|
||||
|
||||
sport, event, logo, ts = (
|
||||
ev["sport"],
|
||||
ev["event"],
|
||||
ev["logo"],
|
||||
ev["timestamp"],
|
||||
)
|
||||
|
||||
key = f"[{sport}] {event} ({TAG})"
|
||||
|
||||
tvg_id, pic = leagues.get_tvg_info(sport, event)
|
||||
|
||||
entry = {
|
||||
"url": url,
|
||||
"logo": logo or pic,
|
||||
"base": link,
|
||||
"timestamp": ts,
|
||||
"id": tvg_id or "Live.Event.us",
|
||||
"link": link,
|
||||
}
|
||||
|
||||
cached_urls[key] = entry
|
||||
|
||||
if url:
|
||||
valid_count += 1
|
||||
|
||||
entry["url"] = fix_url(url)
|
||||
|
||||
urls[key] = entry
|
||||
|
||||
log.info(f"Collected and cached {valid_count - cached_count} new event(s)")
|
||||
|
||||
else:
|
||||
log.info("No new events found")
|
||||
|
||||
CACHE_FILE.write(cached_urls)
|
||||
import re
|
||||
from functools import partial
|
||||
|
||||
from playwright.async_api import Browser
|
||||
|
||||
from .utils import Cache, Time, get_logger, leagues, network
|
||||
|
||||
log = get_logger(__name__)
|
||||
|
||||
urls: dict[str, dict[str, str | float]] = {}
|
||||
|
||||
TAG = "PPV"
|
||||
|
||||
CACHE_FILE = Cache(TAG, exp=10_800)
|
||||
|
||||
API_FILE = Cache(f"{TAG}-api", exp=19_800)
|
||||
|
||||
API_MIRRORS = [
|
||||
"https://api.ppv.to/api/streams",
|
||||
"https://api.ppv.cx/api/streams",
|
||||
"https://api.ppv.sh/api/streams",
|
||||
"https://api.ppv.la/api/streams",
|
||||
]
|
||||
|
||||
|
||||
def fix_url(s: str) -> str:
|
||||
pattern = re.compile(r"index\.m3u8$", re.I)
|
||||
|
||||
return pattern.sub(r"tracks-v1a1/mono.ts.m3u8", s)
|
||||
|
||||
|
||||
async def get_events(url: str, cached_keys: list[str]) -> list[dict[str, str]]:
|
||||
now = Time.clean(Time.now())
|
||||
|
||||
if not (api_data := API_FILE.load(per_entry=False)):
|
||||
log.info("Refreshing API cache")
|
||||
|
||||
api_data = {"timestamp": now.timestamp()}
|
||||
|
||||
if r := await network.request(url, log=log):
|
||||
api_data: dict = r.json()
|
||||
|
||||
API_FILE.write(api_data)
|
||||
|
||||
events = []
|
||||
|
||||
start_dt = now.delta(minutes=-30)
|
||||
end_dt = now.delta(minutes=30)
|
||||
|
||||
for stream_group in api_data.get("streams", []):
|
||||
sport = stream_group["category"]
|
||||
|
||||
if sport == "24/7 Streams":
|
||||
continue
|
||||
|
||||
for event in stream_group.get("streams", []):
|
||||
name = event.get("name")
|
||||
|
||||
start_ts = event.get("starts_at")
|
||||
|
||||
logo = event.get("poster")
|
||||
|
||||
iframe = event.get("iframe")
|
||||
|
||||
if not (name and start_ts and iframe):
|
||||
continue
|
||||
|
||||
if f"[{sport}] {name} ({TAG})" in cached_keys:
|
||||
continue
|
||||
|
||||
event_dt = Time.from_ts(start_ts)
|
||||
|
||||
if not start_dt <= event_dt <= end_dt:
|
||||
continue
|
||||
|
||||
events.append(
|
||||
{
|
||||
"sport": sport,
|
||||
"event": name,
|
||||
"link": f"{iframe}#player=clappr#autoplay=true",
|
||||
"logo": logo,
|
||||
"timestamp": event_dt.timestamp(),
|
||||
}
|
||||
)
|
||||
|
||||
return events
|
||||
|
||||
|
||||
async def scrape(browser: Browser) -> None:
|
||||
cached_urls = CACHE_FILE.load()
|
||||
|
||||
valid_urls = {k: v for k, v in cached_urls.items() if v["url"]}
|
||||
|
||||
valid_count = cached_count = len(valid_urls)
|
||||
|
||||
urls.update(valid_urls)
|
||||
|
||||
log.info(f"Loaded {cached_count} event(s) from cache")
|
||||
|
||||
if not (api_url := await network.get_base(API_MIRRORS)):
|
||||
log.warning("No working PPV mirrors")
|
||||
|
||||
CACHE_FILE.write(cached_urls)
|
||||
|
||||
return
|
||||
|
||||
log.info(f'Scraping from "{api_url}"')
|
||||
|
||||
if events := await get_events(api_url, cached_urls.keys()):
|
||||
log.info(f"Processing {len(events)} new URL(s)")
|
||||
|
||||
async with network.event_context(browser, stealth=False) as context:
|
||||
for i, ev in enumerate(events, start=1):
|
||||
async with network.event_page(context) as page:
|
||||
handler = partial(
|
||||
network.process_event,
|
||||
url=(link := ev["link"]),
|
||||
url_num=i,
|
||||
page=page,
|
||||
timeout=6,
|
||||
log=log,
|
||||
)
|
||||
|
||||
url = await network.safe_process(
|
||||
handler,
|
||||
url_num=i,
|
||||
semaphore=network.PW_S,
|
||||
log=log,
|
||||
)
|
||||
|
||||
sport, event, logo, ts = (
|
||||
ev["sport"],
|
||||
ev["event"],
|
||||
ev["logo"],
|
||||
ev["timestamp"],
|
||||
)
|
||||
|
||||
key = f"[{sport}] {event} ({TAG})"
|
||||
|
||||
tvg_id, pic = leagues.get_tvg_info(sport, event)
|
||||
|
||||
entry = {
|
||||
"url": url,
|
||||
"logo": logo or pic,
|
||||
"base": link,
|
||||
"timestamp": ts,
|
||||
"id": tvg_id or "Live.Event.us",
|
||||
"link": link,
|
||||
}
|
||||
|
||||
cached_urls[key] = entry
|
||||
|
||||
if url:
|
||||
valid_count += 1
|
||||
|
||||
entry["url"] = fix_url(url)
|
||||
|
||||
urls[key] = entry
|
||||
|
||||
log.info(f"Collected and cached {valid_count - cached_count} new event(s)")
|
||||
|
||||
else:
|
||||
log.info("No new events found")
|
||||
|
||||
CACHE_FILE.write(cached_urls)
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
import asyncio
|
||||
import re
|
||||
from functools import partial
|
||||
from urllib.parse import urljoin, urlparse
|
||||
from urllib.parse import urljoin
|
||||
|
||||
from playwright.async_api import Browser
|
||||
from selectolax.parser import HTMLParser
|
||||
|
||||
from .utils import Cache, Time, get_logger, leagues, network
|
||||
|
|
@ -34,61 +34,6 @@ SPORT_ENDPOINTS = [
|
|||
]
|
||||
|
||||
|
||||
async def process_event(url: str, url_num: int) -> tuple[str | None, str | None]:
|
||||
if not (event_data := await network.request(url, log=log)):
|
||||
log.warning(f"URL {url_num}) Failed to load url.")
|
||||
return
|
||||
|
||||
soup_1 = HTMLParser(event_data.content)
|
||||
|
||||
ifr_1 = soup_1.css_first("iframe#playerIframe")
|
||||
|
||||
if not ifr_1 or not (src := ifr_1.attributes.get("src")):
|
||||
log.warning(f"URL {url_num}) No iframe element found.")
|
||||
return
|
||||
|
||||
parsed = urlparse(src)
|
||||
|
||||
ifr_1_src = urljoin(
|
||||
BASE_URL,
|
||||
f"embed1/{parsed.path.split('/')[-1].split('_')[0]}.php",
|
||||
)
|
||||
|
||||
if not (
|
||||
ifr_1_src_data := await network.request(
|
||||
ifr_1_src,
|
||||
headers={"Referer": url},
|
||||
log=log,
|
||||
)
|
||||
):
|
||||
log.warning(f"URL {url_num}) Failed to load iframe source. (IFR1)")
|
||||
return
|
||||
|
||||
soup_2 = HTMLParser(ifr_1_src_data.content)
|
||||
|
||||
ifr_2 = soup_2.css_first("center iframe")
|
||||
|
||||
if not ifr_2 or not (ifr_2_src := ifr_2.attributes.get("src")):
|
||||
log.warning(f"URL {url_num}) Unable to locate iframe. (IFR2)")
|
||||
return
|
||||
|
||||
ifr_2_src = f"https:{ifr_2_src}" if ifr_2_src.startswith("//") else ifr_2_src
|
||||
|
||||
if not (ifr_2_src_data := await network.request(ifr_2_src, log=log)):
|
||||
log.warning(f"URL {url_num}) Failed to load iframe source.")
|
||||
return
|
||||
|
||||
valid_m3u8 = re.compile(r"src:\s+(\'|\")([^\']+)(\'|\")", re.I)
|
||||
|
||||
if not (match := valid_m3u8.search(ifr_2_src_data.text)):
|
||||
log.warning(f"URL {url_num}) No source found.")
|
||||
return
|
||||
|
||||
log.info(f"URL {url_num}) Captured M3U8")
|
||||
|
||||
return match[2]
|
||||
|
||||
|
||||
async def refresh_html_cache(
|
||||
date: str,
|
||||
sport_id: str,
|
||||
|
|
@ -170,8 +115,8 @@ async def get_events(cached_keys: list[str]) -> list[dict[str, str]]:
|
|||
|
||||
live = []
|
||||
|
||||
start_ts = now.delta(minutes=-30).timestamp()
|
||||
end_ts = now.delta(minutes=30).timestamp()
|
||||
start_ts = now.delta(hours=-1).timestamp()
|
||||
end_ts = now.delta(minutes=1).timestamp()
|
||||
|
||||
for k, v in events.items():
|
||||
if k in cached_keys:
|
||||
|
|
@ -185,7 +130,7 @@ async def get_events(cached_keys: list[str]) -> list[dict[str, str]]:
|
|||
return live
|
||||
|
||||
|
||||
async def scrape() -> None:
|
||||
async def scrape(browser: Browser) -> None:
|
||||
cached_urls = CACHE_FILE.load()
|
||||
|
||||
valid_urls = {k: v for k, v in cached_urls.items() if v["url"]}
|
||||
|
|
@ -201,47 +146,52 @@ async def scrape() -> None:
|
|||
if events := await get_events(cached_urls.keys()):
|
||||
log.info(f"Processing {len(events)} new URL(s)")
|
||||
|
||||
for i, ev in enumerate(events, start=1):
|
||||
async with network.event_context(browser, stealth=False) as context:
|
||||
for i, ev in enumerate(events, start=1):
|
||||
async with network.event_page(context) as page:
|
||||
handler = partial(
|
||||
network.process_event,
|
||||
url=(link := ev["link"]),
|
||||
url_num=i,
|
||||
page=page,
|
||||
timeout=5,
|
||||
log=log,
|
||||
)
|
||||
|
||||
handler = partial(
|
||||
process_event,
|
||||
url=(link := ev["link"]),
|
||||
url_num=i,
|
||||
)
|
||||
url = await network.safe_process(
|
||||
handler,
|
||||
url_num=i,
|
||||
semaphore=network.PW_S,
|
||||
log=log,
|
||||
)
|
||||
|
||||
url = await network.safe_process(
|
||||
handler,
|
||||
url_num=i,
|
||||
semaphore=network.PW_S,
|
||||
log=log,
|
||||
)
|
||||
sport, event, ts = (
|
||||
ev["sport"],
|
||||
ev["event"],
|
||||
ev["event_ts"],
|
||||
)
|
||||
|
||||
sport, event, ts = (
|
||||
ev["sport"],
|
||||
ev["event"],
|
||||
ev["event_ts"],
|
||||
)
|
||||
key = f"[{sport}] {event} ({TAG})"
|
||||
|
||||
key = f"[{sport}] {event} ({TAG})"
|
||||
tvg_id, logo = leagues.get_tvg_info(sport, event)
|
||||
|
||||
tvg_id, logo = leagues.get_tvg_info(sport, event)
|
||||
entry = {
|
||||
"url": url,
|
||||
"logo": logo,
|
||||
"base": "https://storytrench.net/",
|
||||
"timestamp": ts,
|
||||
"id": tvg_id or "Live.Event.us",
|
||||
"link": link,
|
||||
}
|
||||
|
||||
entry = {
|
||||
"url": url,
|
||||
"logo": logo,
|
||||
"base": "https://hardsmart.click",
|
||||
"timestamp": ts,
|
||||
"id": tvg_id or "Live.Event.us",
|
||||
"link": link,
|
||||
"UA": "curl/8.19.0",
|
||||
}
|
||||
cached_urls[key] = entry
|
||||
|
||||
cached_urls[key] = entry
|
||||
if url:
|
||||
valid_count += 1
|
||||
|
||||
if url:
|
||||
valid_count += 1
|
||||
entry["url"] = url.split("?")[0]
|
||||
|
||||
urls[key] = entry
|
||||
urls[key] = entry
|
||||
|
||||
log.info(f"Collected and cached {valid_count - cached_count} new event(s)")
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,10 @@
|
|||
import asyncio
|
||||
import re
|
||||
from functools import partial
|
||||
from itertools import chain
|
||||
from typing import Any
|
||||
from urllib.parse import urljoin
|
||||
|
||||
from selectolax.parser import HTMLParser
|
||||
from playwright.async_api import Browser
|
||||
|
||||
from .utils import Cache, Time, get_logger, leagues, network
|
||||
|
||||
|
|
@ -47,42 +46,6 @@ def get_event(t1: str, t2: str) -> str:
|
|||
return f"{t1.strip()} vs {t2.strip()}"
|
||||
|
||||
|
||||
async def process_event(url: str, url_num: int) -> tuple[str | None, str | None]:
|
||||
if not (event_data := await network.request(url, log=log)):
|
||||
log.warning(f"URL {url_num}) Failed to load url.")
|
||||
return
|
||||
|
||||
soup_1 = HTMLParser(event_data.content)
|
||||
|
||||
ifr = soup_1.css_first("iframe")
|
||||
|
||||
if not ifr or not (src := ifr.attributes.get("src")):
|
||||
log.warning(f"URL {url_num}) No iframe element found.")
|
||||
return
|
||||
|
||||
ifr_src = f"https:{src}" if src.startswith("//") else src
|
||||
|
||||
if not (
|
||||
ifr_src_data := await network.request(
|
||||
ifr_src,
|
||||
headers={"Referer": url},
|
||||
log=log,
|
||||
)
|
||||
):
|
||||
log.warning(f"URL {url_num}) Failed to load iframe source. (IFR1)")
|
||||
return
|
||||
|
||||
valid_m3u8 = re.compile(r"file:\s+(\'|\")([^\"]*)(\'|\")", re.I)
|
||||
|
||||
if not (match := valid_m3u8.search(ifr_src_data.text)):
|
||||
log.warning(f"URL {url_num}) No source found.")
|
||||
return
|
||||
|
||||
log.info(f"URL {url_num}) Captured M3U8")
|
||||
|
||||
return match[2]
|
||||
|
||||
|
||||
async def refresh_api_cache(now_ts: float) -> list[dict[str, Any]]:
|
||||
tasks = [network.request(url, log=log) for url in SPORT_URLS]
|
||||
|
||||
|
|
@ -111,8 +74,8 @@ async def get_events(cached_keys: list[str]) -> list[dict[str, str]]:
|
|||
|
||||
events = []
|
||||
|
||||
start_dt = now.delta(minutes=-30)
|
||||
end_dt = now.delta(minutes=30)
|
||||
start_dt = now.delta(hours=-1)
|
||||
end_dt = now.delta(minutes=5)
|
||||
|
||||
for stream_group in api_data:
|
||||
date = stream_group.get("time")
|
||||
|
|
@ -155,7 +118,7 @@ async def get_events(cached_keys: list[str]) -> list[dict[str, str]]:
|
|||
return events
|
||||
|
||||
|
||||
async def scrape() -> None:
|
||||
async def scrape(browser: Browser) -> None:
|
||||
cached_urls = CACHE_FILE.load()
|
||||
|
||||
valid_urls = {k: v for k, v in cached_urls.items() if v["url"]}
|
||||
|
|
@ -171,45 +134,51 @@ async def scrape() -> None:
|
|||
if events := await get_events(cached_urls.keys()):
|
||||
log.info(f"Processing {len(events)} new URL(s)")
|
||||
|
||||
for i, ev in enumerate(events, start=1):
|
||||
handler = partial(
|
||||
process_event,
|
||||
url=(link := ev["link"]),
|
||||
url_num=i,
|
||||
)
|
||||
async with network.event_context(browser, stealth=False) as context:
|
||||
for i, ev in enumerate(events, start=1):
|
||||
async with network.event_page(context) as page:
|
||||
handler = partial(
|
||||
network.process_event,
|
||||
url=(link := ev["link"]),
|
||||
url_num=i,
|
||||
page=page,
|
||||
log=log,
|
||||
)
|
||||
|
||||
url = await network.safe_process(
|
||||
handler,
|
||||
url_num=i,
|
||||
semaphore=network.PW_S,
|
||||
log=log,
|
||||
)
|
||||
url = await network.safe_process(
|
||||
handler,
|
||||
url_num=i,
|
||||
semaphore=network.PW_S,
|
||||
log=log,
|
||||
)
|
||||
|
||||
sport, event, ts = (
|
||||
ev["sport"],
|
||||
ev["event"],
|
||||
ev["timestamp"],
|
||||
)
|
||||
sport, event, ts = (
|
||||
ev["sport"],
|
||||
ev["event"],
|
||||
ev["timestamp"],
|
||||
)
|
||||
|
||||
key = f"[{sport}] {event} ({TAG})"
|
||||
key = f"[{sport}] {event} ({TAG})"
|
||||
|
||||
tvg_id, logo = leagues.get_tvg_info(sport, event)
|
||||
tvg_id, logo = leagues.get_tvg_info(sport, event)
|
||||
|
||||
entry = {
|
||||
"url": url,
|
||||
"logo": logo,
|
||||
"base": "https://streamfree.click",
|
||||
"timestamp": ts,
|
||||
"id": tvg_id or "Live.Event.us",
|
||||
"link": link,
|
||||
}
|
||||
entry = {
|
||||
"url": url,
|
||||
"logo": logo,
|
||||
"base": "https://instreams.click/",
|
||||
"timestamp": ts,
|
||||
"id": tvg_id or "Live.Event.us",
|
||||
"link": link,
|
||||
}
|
||||
|
||||
cached_urls[key] = entry
|
||||
cached_urls[key] = entry
|
||||
|
||||
if url:
|
||||
valid_count += 1
|
||||
if url:
|
||||
valid_count += 1
|
||||
|
||||
urls[key] = entry
|
||||
entry["url"] = url.split("&e")[0]
|
||||
|
||||
urls[key] = entry
|
||||
|
||||
log.info(f"Collected and cached {valid_count - cached_count} new event(s)")
|
||||
|
||||
|
|
|
|||
|
|
@ -27,26 +27,36 @@ def fix_txt(s: str) -> str:
|
|||
async def process_event(url: str, url_num: int) -> str | None:
|
||||
if not (event_data := await network.request(url, log=log)):
|
||||
log.warning(f"URL {url_num}) Failed to load url.")
|
||||
|
||||
return
|
||||
|
||||
soup_1 = HTMLParser(event_data.content)
|
||||
|
||||
iframe_1 = soup_1.css_first("iframe")
|
||||
|
||||
if not iframe_1 or not (iframe_1_src := iframe_1.attributes.get("src")):
|
||||
if not (iframe_1 := soup_1.css_first("iframe")):
|
||||
log.warning(f"URL {url_num}) No iframe element found. (IFR1)")
|
||||
|
||||
return
|
||||
|
||||
if not (iframe_1_src := iframe_1.attributes.get("src")):
|
||||
log.warning(f"URL {url_num}) No iframe source found. (IFR1)")
|
||||
|
||||
return
|
||||
|
||||
if not (iframe_1_src_data := await network.request(iframe_1_src, log=log)):
|
||||
log.warning(f"URL {url_num}) Failed to load iframe source. (IFR1)")
|
||||
|
||||
return
|
||||
|
||||
soup_2 = HTMLParser(iframe_1_src_data.content)
|
||||
|
||||
iframe_2 = soup_2.css_first("iframe")
|
||||
|
||||
if not iframe_2 or not (iframe_2_src := iframe_2.attributes.get("src")):
|
||||
if not (iframe_2 := soup_2.css_first("iframe")):
|
||||
log.warning(f"URL {url_num}) No iframe element found. (IFR2)")
|
||||
|
||||
return
|
||||
|
||||
if not (iframe_2_src := iframe_2.attributes.get("src")):
|
||||
log.warning(f"URL {url_num}) No iframe source found. (IFR2)")
|
||||
|
||||
return
|
||||
|
||||
if not (
|
||||
|
|
@ -57,12 +67,14 @@ async def process_event(url: str, url_num: int) -> str | None:
|
|||
)
|
||||
):
|
||||
log.warning(f"URL {url_num}) Failed to load iframe source. (IFR2)")
|
||||
|
||||
return
|
||||
|
||||
valid_m3u8 = re.compile(r'currentStreamUrl\s+=\s+"([^"]*)"', re.I)
|
||||
|
||||
if not (match := valid_m3u8.search(iframe_2_src_data.text)):
|
||||
log.warning(f"URL {url_num}) No Clappr source found.")
|
||||
log.warning(f"URL {url_num}) No Clappr source found. (IFR2)")
|
||||
|
||||
return
|
||||
|
||||
log.info(f"URL {url_num}) Captured M3U8")
|
||||
|
|
|
|||
12
readme.md
12
readme.md
|
|
@ -1,14 +1,12 @@
|
|||
## Base Log @ 2026-04-06 15:11 UTC
|
||||
## Base Log @ 2026-04-05 15:00 UTC
|
||||
|
||||
### ✅ Working Streams: 156<br>❌ Dead Streams: 5
|
||||
### ✅ Working Streams: 158<br>❌ Dead Streams: 3
|
||||
|
||||
| Channel | Error (Code) | Link |
|
||||
| ------- | ------------ | ---- |
|
||||
| Antenna TV | HTTP Error (403) | `http://mytvstream.net:8080/live/k4Svp2/645504/20180.m3u8` |
|
||||
| Hallmark Mystery | HTTP Error (403) | `http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/162546.ts` |
|
||||
| Nick Jr | HTTP Error (403) | `http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/162571.ts` |
|
||||
| Spectrum SportsNet LA Dodgers | HTTP Error (403) | `http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/162585.ts` |
|
||||
| Spectrum SportsNet Lakers | HTTP Error (403) | `http://tv.proyectox.vip:8080/live/eEiiLll09384Ecaiman34RtR/KTap2pdJx7/162739.ts` |
|
||||
| Antenna TV | HTTP Error (403) | `http://mytvstream.net:8080/live/5AGbfz/324331/20180.m3u8` |
|
||||
| Lifetime | HTTP Error (404) | `http://41.205.93.154/LIFETIME/index.m3u8` |
|
||||
| TV One | HTTP Error (403) | `http://mytvstream.net:8080/live/5AGbfz/324331/20868.m3u8` |
|
||||
---
|
||||
#### Base Channels URL
|
||||
```
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue