iptv-app/ui/src/utils/txtParser.js
2026-02-04 18:02:26 +08:00

60 lines
1.2 KiB
JavaScript

/**
* IPTV-API TXT 格式解析器
*
* 格式:
* 分组名,#genre#
* 频道名,接口地址
* 频道名,接口地址
*
* 空行分隔不同分组
*/
export function parseTXT(content) {
const lines = content.split('\n').map(l => l.trim()).filter(l => l)
const channels = []
let currentGroup = '默认分组'
let id = 1
for (const line of lines) {
// 分组行:分组名,#genre#
if (line.includes(',#genre#')) {
currentGroup = line.split(',')[0].trim()
continue
}
// 频道行:频道名,接口地址
const commaIndex = line.indexOf(',')
if (commaIndex === -1) continue
const name = line.substring(0, commaIndex).trim()
const url = line.substring(commaIndex + 1).trim()
// 过滤无效行
if (!name || !url || !url.startsWith('http')) continue
channels.push({
id: String(id++),
name,
url,
group: currentGroup,
logo: ''
})
}
return channels
}
/**
* 转换为 M3U 格式
*/
export function convertToM3U(channels) {
let m3u = '#EXTM3U\n\n'
for (const ch of channels) {
m3u += `#EXTINF:-1 tvg-name="${ch.name}" tvg-logo="${ch.logo}" group-title="${ch.group}",${ch.name}\n`
m3u += `${ch.url}\n\n`
}
return m3u
}