Created
August 4, 2015 05:04
-
-
Save jemygraw/ed3b48dd0d8a1d92f1a5 to your computer and use it in GitHub Desktop.
replace the domain in the m3u8 files
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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