Skip to content

Instantly share code, notes, and snippets.

@jemygraw
Created August 4, 2015 05:04
Show Gist options
  • Save jemygraw/ed3b48dd0d8a1d92f1a5 to your computer and use it in GitHub Desktop.
Save jemygraw/ed3b48dd0d8a1d92f1a5 to your computer and use it in GitHub Desktop.
replace the domain in the m3u8 files
package main
import (
"bufio"
"flag"
"fmt"
"os"
"path/filepath"
"strings"
)
func main() {
var fromDomain string
var toDomain string
var inputDir string
var outputDir string
var suffix string
flag.StringVar(&fromDomain, "from", "", "from domain")
flag.StringVar(&toDomain, "to", "", "to domain")
flag.StringVar(&inputDir, "in", "", "input dir")
flag.StringVar(&outputDir, "out", "", "output dir")
flag.StringVar(&suffix, "suffix", "", "file name suffix")
flag.Parse()
if fromDomain == "" {
fmt.Println("no from domain specified")
return
}
if toDomain == "" {
fmt.Println("no to domain specified")
return
}
if inputDir == "" {
fmt.Println("no input dir specified")
return
}
if outputDir == "" {
fmt.Println("no output dir specified")
return
}
err := replace(fromDomain, toDomain, inputDir, outputDir, suffix)
if err != nil {
fmt.Println(err)
}
}
func replace(fromDomain, toDomain, inputDir, outputDir, suffix string) error {
err := filepath.Walk(inputDir, func(path string, fi os.FileInfo, err error) (retErr error) {
if !fi.IsDir() {
if suffix != "" && !strings.HasSuffix(path, suffix) {
return
}
fInput, openErr := os.Open(path)
if openErr != nil {
retErr = openErr
return
}
defer fInput.Close()
fInputDir, pErr1 := filepath.Abs(inputDir)
if pErr1 != nil {
retErr = pErr1
return
}
fOutputDir, pErr2 := filepath.Abs(outputDir)
if pErr2 != nil {
retErr = pErr2
return
}
fOutputPath := strings.Replace(path, fInputDir, fOutputDir, -1)
fOutputRelPath := filepath.Dir(fOutputPath)
retErr = os.MkdirAll(fOutputRelPath, 0755)
if retErr != nil {
return
}
fOutput, openErr2 := os.OpenFile(fOutputPath, os.O_CREATE|os.O_WRONLY, 0666)
if openErr2 != nil {
retErr = openErr2
return
}
defer fOutput.Close()
fInputReader := bufio.NewScanner(fInput)
fInputReader.Split(bufio.ScanLines)
for fInputReader.Scan() {
line := fInputReader.Text()
if strings.Contains(line, fromDomain) {
line = strings.Replace(line, fromDomain, toDomain, -1)
}
_, wErr := fOutput.WriteString(fmt.Sprintln(line))
if wErr != nil {
retErr = wErr
return
}
}
}
return
})
return err
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment