This commit is contained in:
yumoqing 2025-10-16 10:53:26 +08:00
parent 09f4a6ca81
commit a14e61a7fb
12 changed files with 293 additions and 16 deletions

View File

@ -1,4 +1,39 @@
-- ./iptvchannels.xlsx
drop table if exists iptvchannels;
CREATE TABLE iptvchannels
(
`id` VARCHAR(32) comment '编号',
`tv_group` VARCHAR(500) comment '频道组',
`tv_name` VARCHAR(500) comment '频道名称',
`logo_url` VARCHAR(1000) comment '台标url',
`url` VARCHAR(1000) comment 'url',
`media_type` VARCHAR(100) comment '媒体类型',
`download_date` VARCHAR(10) comment '下载日期',
`channel_delay` int comment '频道延迟',
`channel_grade` int comment '频道等级',
`del_flg` VARCHAR(1) comment '删除标志'
,primary key(id)
)
engine=innodb
default charset=utf8
comment 'IPTV频道清单'
;
CREATE INDEX iptvchannels_idx1 ON iptvchannels(tv_group);
CREATE INDEX iptvchannels_idx2 ON iptvchannels(tv_name);
CREATE UNIQUE INDEX iptvchannels_idx3 ON iptvchannels(url);
-- ./badchannels.xlsx
@ -24,4 +59,29 @@ comment '坏频道'
;
-- ./device.xlsx
drop table if exists device;
CREATE TABLE device
(
`id` VARCHAR(32) comment 'id',
`name` VARCHAR(255) comment '设备名称',
`takeover_flg` VARCHAR(1) comment '接管标志',
`userid` VARCHAR(32) comment '用户id'
,primary key(id)
)
engine=innodb
default charset=utf8
comment '设备表'
;

View File

@ -0,0 +1,25 @@
sql = "select * from iptvchannels where del_flg='0'"
ns = {
}
ns = params_kw.copy()
ns['sort'] = 'tv_name'
parts = []
tv_name = params_kw.get('tv_name', None)
if tv_name:
tv_name = '%' + tv_name + '%'
parts.append(' tv_name like ${tv_name}$ ')
ns['tv_name'] = tv_name
if len(parts) > 0:
sql += ' and ' + 'and'.join(parts)
sql += ' order by download_date desc'
db=DBPools()
if not params_kw.get('page'):
ns['page'] = 1
ns['rows'] = 100
async with db.sqlorContext('iptvdb') as sor:
recs = await sor.sqlPaging(sql, ns)
return recs

View File

@ -5,12 +5,23 @@
},
"subwidgets":[
{
"widgettype":"Icon",
"options":{
"url":"{{entire_url('/imgs/atvoe.svg')}}",
"cursor":"pointer",
"rate":1.5
},
"widgettype": "HBox",
"options":{},
"subwidgets":[
{
"widgettype":"Icon",
"options":{
"url":"{{entire_url('/imgs/atvoe.svg')}}",
"cursor":"pointer",
"rate":1.5
}
},{
"widgettype":"Title6",
"options":{
"text":"All TV On Earth"
}
}
],
"binds":[
{
"wid":"self",
@ -25,13 +36,8 @@
]
},
{
"id":"cur_tag",
"widgettype":"Title4",
"widgettype":"Filler",
"options":{
"height":"auto",
"otext":"全球电视📺",
"i18n":true,
"wrap":true
}
}
]

View File

@ -0,0 +1 @@
<svg t="1760580013596" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4539" width="100%" height="100%"><path d="M128 213.333333v512h276.906667v42.666667H85.333333V170.666667h853.333334v597.333333h-171.946667v-42.666667H896V213.333333H128z" fill="${color}" p-id="4540"></path><path d="M341.333333 490.666667a192 192 0 1 1 192 192A192.426667 192.426667 0 0 1 341.333333 490.666667z m42.666667 0A149.333333 149.333333 0 1 0 533.333333 341.333333 149.333333 149.333333 0 0 0 384 490.666667z" fill="${color}" p-id="4541"></path><path d="M597.333333 664.32l122.453334 176.64 34.986666-24.32L632.32 640l-34.986667 24.32z" fill="${color}" p-id="4542"></path></svg>

After

Width:  |  Height:  |  Size: 702 B

View File

@ -0,0 +1,3 @@
<svg t="1760580745980" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5545" width="100%" height="100%">
<path d="M905.46176 252.68224H109.73184c-46.20288 0-83.968 37.76512-83.968 83.968v462.6432c0 26.29632 31.0272 38.78912 49.5616 20.56192l58.6752-58.6752c11.4688-11.12064 26.97216-17.53088 42.82368-17.53088h728.61696c46.20288 0 83.968-37.76512 83.968-83.968V336.65024c0.02048-46.55104-37.74464-83.968-83.94752-83.968z m41.82016 406.99904c0 22.91712-18.88256 41.79968-41.82016 41.79968H137.37984L67.91168 771.2768V336.65024c0-23.26528 18.5344-41.82016 41.82016-41.82016h795.72992c22.91712 0 41.82016 18.55488 41.82016 41.82016v323.03104z m0 0" fill="${color}" p-id="5546"></path>
<path d="M312.19712 478.78144v132.13696h-47.22688v-128c0-35.06176-16.15872-52.61312-48.45568-52.61312-11.59168 0-21.8112 4.13696-30.65856 12.43136-9.9328 9.1136-15.74912 22.24128-17.38752 39.34208v128.8192H121.2416V396.75904h47.22688v24.86272c8.56064-10.21952 17.94048-17.8176 28.16-22.77376 10.48576-5.24288 22.2208-7.86432 35.20512-7.86432 53.57568-0.02048 80.36352 29.26592 80.36352 87.79776zM533.79072 426.5984c17.12128 21.8112 25.68192 51.9168 25.68192 90.29632h-160.29696c1.65888 20.15232 7.04512 35.34848 16.15872 45.568 9.1136 10.50624 22.2208 15.74912 39.34208 15.74912 14.35648 0 26.09152-3.31776 35.20512-9.9328 6.90176-5.24288 13.25056-13.94688 19.0464-26.09152h47.22688c-4.97664 20.15232-14.90944 36.864-29.81888 50.11456-19.33312 16.30208-43.06944 24.43264-71.24992 24.43264-31.76448 0-57.01632-9.78944-75.79648-29.40928-19.88608-20.43904-29.81888-48.31232-29.81888-83.6608 0-32.03072 9.37984-58.6752 28.16-79.93344 18.2272-21.8112 43.35616-32.72704 75.38688-32.72704 35.34848-0.04096 62.27968 11.83744 80.77312 35.59424z m-116.38784 16.13824c-8.56064 8.56064-14.35648 21.4016-17.38752 38.52288h110.1824c-4.13696-34.5088-22.77376-51.77344-55.9104-51.77344-15.74912 0-28.0576 4.42368-36.88448 13.25056zM573.97248 396.75904h52.18304l42.65984 158.22848 42.25024-158.22848h43.49952l42.25024 158.22848 42.65984-158.22848h52.18304L819.58912 610.9184h-43.90912l-42.65984-156.5696-43.06944 156.5696h-43.90912l-72.06912-214.15936z" fill="red" p-id="5547"></path></svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -27,7 +27,7 @@
{
"widgettype":"urlwidget",
"options":{
"url":"{{entire_url('search_channels.ui')}}"
"url":"{{entire_url('tabs.ui')}}"
}
}
]

View File

@ -1,4 +1,4 @@
# Where the iptv channels come from
# Source of channels
* [iptv](https://github.com/iptv-org/iptv)
* [freeiptv](https://github.com/ipstreet312/freeiptv)
@ -9,8 +9,8 @@
* [m3u8-xtream/m3u8-xtream-playlist](https://github.com/m3u8-xtream/m3u8-xtream-playlist)
# Legal Disclaimer
The playlists linked on this page are aggregated from various public sources and are provided for informational purposes only. We do not host, upload, or manage any streaming content. The streams are freely available on the internet and were collected from public sources.
The iptv channels on this website are aggregated from various public sources and are provided for informational purposes only. We do not host, upload, or manage any streaming content. The streams are freely available on the internet and were collected from public sources.
Users are responsible for ensuring their usage of these playlists complies with local laws and regulations regarding copyright and content access. We encourage users to support content creators by subscribing to official services.
Users are responsible for ensuring their usage of these iptv channels complies with local laws and regulations regarding copyright and content access. We encourage users to support content creators by subscribing to official services.

Binary file not shown.

61
wwwroot/newest/index.ui Normal file
View File

@ -0,0 +1,61 @@
{
"widgettype":"Cols",
"id":"channel_list",
"options":{
"width": "100%",
"height": "100%",
"data_url": "{{entire_url('/api/newest_channels.dspy')}}",
"data_params":{
},
"data_method":"POST",
"col_cwidth":22,
"record_view":{
"widgettype":"HBox",
"options":{
"cwidth":22,
"cheight":5
},
"subwidgets":[
{
"widgettype":"Image",
"options":{
"cwidth":1.5,
"cheight":1.5,
"url":"${logo_url}",
"default_url":"/imgs/tv.png"
}
},
{
"widgettype":"Title6",
"options":{
"text":"${tv_name}",
"wrap": true,
"halign":"left"
}
}
],
"binds":[
{
"wid":"self",
"event":"click",
"actiontype":"urlwidget",
"target":"PopupWindow",
"popup_options":{
"width":"80%",
"height":"80%",
"title":"${tv_name}"
},
"options":{
"params":{
"tv_name": "${tv_name}",
"url":"${url}",
"id":"${id}"
},
"method": "POST",
"url":"/play.ui"
}
}
]
}
}
}

View File

@ -0,0 +1,60 @@
{
"widgettype":"Cols",
"id":"channel_list",
"options":{
"width": "100%",
"height": "100%",
"data_url": "{{entire_url('/api/channels.dspy')}}",
"data_params":{
},
"data_method":"POST",
"col_cwidth":22,
"record_view":{
"widgettype":"HBox",
"options":{
"cwidth":22,
"cheight":5
},
"subwidgets":[
{
"widgettype":"Image",
"options":{
"cwidth":1.5,
"cheight":1.5,
"url":"${logo_url}",
"default_url":"/imgs/tv.png"
}
},
{
"widgettype":"Title6",
"options":{
"text":"${tv_name}",
"halign":"left"
}
}
],
"binds":[
{
"wid":"self",
"event":"click",
"actiontype":"urlwidget",
"target":"PopupWindow",
"popup_options":{
"width":"80%",
"height":"80%",
"title":"${tv_name}"
},
"options":{
"params":{
"tv_name": "${tv_name}",
"url":"${url}",
"id":"${id}"
},
"method": "POST",
"url":"/play.ui"
}
}
]
}
}
}

View File

@ -0,0 +1,36 @@
{
"widgettype":"VBox",
"options":{
"width":"100%",
"height":"100%"
},
"subwidgets":[
{
"widgettype":"urlwidget",
"options":{
"url":"{{entire_url('search.ui')}}"
}
},
{
"widgettype":"Filler",
"options":{},
"subwidgets":[
{
"widgettype":"urlwidget",
"options":{
"url":"{{entire_url('dc_channels.ui')}}"
}
}
]
}
],
"binds":[
{
"wid":"tv_name",
"event":"changed",
"actiontype":"method",
"target":"channel_list",
"method":"load_first_page"
}
]
}

View File

@ -0,0 +1,25 @@
{
"widgettype":"HBox",
"options":{
"height":"40px"
},
"subwidgets":[
{
"widgettype":"Text",
"options":{
"i18n":true,
"width":"120px",
"otext":"Search"
}
},
{
"id":"tv_name",
"widgettype":"UiStr",
"options":{
"height":"40px",
"name":"tv_name",
"value":""
}
}
]
}