Улучшен парсинг названий каналов (#7)

This commit is contained in:
2025-11-18 23:49:28 +08:00
parent ac062aa1ba
commit c9486c54b2

View File

@@ -106,17 +106,28 @@ func parseAttributes(line string) map[string]string {
return result
}
// parseName парсит название канала из строки тега #EXTINF
func parseName(line string) string {
//TODO https://git.axenov.dev/IPTV/iptvc/issues/7
parts := strings.Split(line, ",")
if len(parts) == 2 {
return strings.Trim(parts[1], " ")
}
// parseTitle парсит название канала из строки тега #EXTINF
func parseTitle(line string) string {
// сначала пытаемся по-доброму: в строке есть тег, могут быть атрибуты,
// есть запятая-разделитель, после неё -- название канала (с запятыми или без)
regex := regexp.MustCompile(`['"]?\s*,\s*(.+)`)
regexMatches := regex.FindAllStringSubmatch(line, -1)
return regexMatches[0][1]
if len(regexMatches) > 0 && len(regexMatches[0]) >= 2 {
return strings.TrimSpace(regexMatches[0][1])
}
// теперь пытаемся хоть как-то: в строке есть тег, могут быть атрибуты,
// НЕТ запятой-разделителя и название канала (с запятыми или без)
lastQuotePos := strings.LastIndexAny(line, `,"'`)
if lastQuotePos != -1 && lastQuotePos < len(line)-1 {
afterLastQuote := line[lastQuotePos+1:]
name := strings.TrimSpace(afterLastQuote)
if name != "" {
return name
}
}
return line // ну штош
}
// Download загружает плейлист по URL-адресу
@@ -170,7 +181,7 @@ func (pls *Playlist) Parse() Playlist {
if strings.HasPrefix(line, "#EXTINF") {
isChannel = true
tmpChannel.Attributes = parseAttributes(line)
tmpChannel.Title = parseName(line)
tmpChannel.Title = parseTitle(line)
if tmpChannel.Title == "" {
if tvgid, ok := tmpChannel.Attributes["tvg-id"]; ok {