From e8f81703e00b4246a3ba326c83579c219ef6fc5c Mon Sep 17 00:00:00 2001 From: DesSolo Date: Thu, 30 Jul 2020 08:32:31 +0400 Subject: [PATCH] Initial --- m3ujson.go | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 m3ujson.go diff --git a/m3ujson.go b/m3ujson.go new file mode 100644 index 0000000..9c61260 --- /dev/null +++ b/m3ujson.go @@ -0,0 +1,84 @@ +package main + +import ( + "encoding/json" + "errors" + "flag" + "fmt" + "io/ioutil" + "log" + "net/http" + "regexp" + "strings" +) + +var Provider string + +type TVChannel struct { + Name string `json:"name"` + Provider string `json:"provider"` + Url string `json:"url"` + Source string `json:"source"` +} + +func getM3U(url string) ([]byte, error) { + resp, err := http.Get(url) + if err != nil { + return nil, err + } + data, err := ioutil.ReadAll(resp.Body) + if err != nil { + return nil, err + } + if err := resp.Body.Close(); err != nil { + return nil, err + } + return data, nil +} + +func convertToStruct(m3u []byte) ([]TVChannel, error){ + var TvChannels []TVChannel + + re := regexp.MustCompile("#EXTINF.+,([^\\n]+)\\r\\n.*\\n(http://.+)\\r") + for _, items := range re.FindAllSubmatch(m3u, -1) { + source := string(items[2]) + url := strings.Split(source, "/") + channel := TVChannel{ + string(items[1]), + Provider, + "/" + url[len(url)-2], + source, + } + TvChannels = append(TvChannels, channel) + } + if len(TvChannels) == 0 { + return nil, errors.New("not found channels in target") + } + return TvChannels, nil +} + +func init() { + flag.StringVar(&Provider, "p", "Edem", "Provider name") +} + +func main() { + flag.Parse() + + if len(flag.Args()) < 1 { + flag.Usage() + log.Fatalln("Url should be specifically") + } + m3u, err := getM3U(flag.Args()[len(flag.Args())-1]) + if err != nil { + log.Fatalln(err) + } + channels, err := convertToStruct(m3u) + if err != nil { + log.Fatalln(err) + } + data, err := json.MarshalIndent(channels, "", " ") + if err != nil { + log.Fatalln(err) + } + fmt.Println(string(data)) +}