Улучшен парсинг названий каналов (#7)
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user