Улучшен парсинг названий каналов (#7)
This commit is contained in:
@@ -106,17 +106,28 @@ func parseAttributes(line string) map[string]string {
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
// parseName парсит название канала из строки тега #EXTINF
|
// parseTitle парсит название канала из строки тега #EXTINF
|
||||||
func parseName(line string) string {
|
func parseTitle(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], " ")
|
|
||||||
}
|
|
||||||
|
|
||||||
regex := regexp.MustCompile(`['"]?\s*,\s*(.+)`)
|
regex := regexp.MustCompile(`['"]?\s*,\s*(.+)`)
|
||||||
regexMatches := regex.FindAllStringSubmatch(line, -1)
|
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-адресу
|
// Download загружает плейлист по URL-адресу
|
||||||
@@ -170,7 +181,7 @@ func (pls *Playlist) Parse() Playlist {
|
|||||||
if strings.HasPrefix(line, "#EXTINF") {
|
if strings.HasPrefix(line, "#EXTINF") {
|
||||||
isChannel = true
|
isChannel = true
|
||||||
tmpChannel.Attributes = parseAttributes(line)
|
tmpChannel.Attributes = parseAttributes(line)
|
||||||
tmpChannel.Title = parseName(line)
|
tmpChannel.Title = parseTitle(line)
|
||||||
|
|
||||||
if tmpChannel.Title == "" {
|
if tmpChannel.Title == "" {
|
||||||
if tvgid, ok := tmpChannel.Attributes["tvg-id"]; ok {
|
if tvgid, ok := tmpChannel.Attributes["tvg-id"]; ok {
|
||||||
|
|||||||
Reference in New Issue
Block a user