scripts/tmdb-export/markdown.go

90 lines
1.7 KiB
Go

package main
import (
"fmt"
"os"
"strings"
"text/template"
"time"
)
const (
markdownTemplate = `---
tmdb: {{ .TMDBID }}
emdb: {{ .IMDBID }}
englishTitle: {{ .EnglishTitle }}
title: {{ .Title }}
year: {{ .Year }}
runtime: {{ .Runtime }}
directors: {{ .DirectorsYAML }}
inCollection: no
watchedOn:
rating:
---
# {{ .EnglishTitle }} ({{ .Year }})
Director(s): {{ .Directors }}
[TheMovieDB](https://www.themoviedb.org/movie/{{ .TMDBID }}), [IMDB](https://www.imdb.com/title/{{ .IMDBID }}/)
IMDB:
{{ .Summary }}
## Comment
`
)
func Export(movie Movie) error {
tpl, err := template.New("page").Parse(markdownTemplate)
if err != nil {
return err
}
filename := fmt.Sprintf("%s (%d).md", movie.EnglishTitle, movie.Year)
f, err := os.Create(filename)
if err != nil {
return err
}
runtime := time.Duration(movie.RunTime) * time.Minute
runtimeStr, _, ok := strings.Cut(runtime.String(), "m")
if !ok {
return fmt.Errorf("could not parse runtime format %s", runtime)
}
runtimeStr = fmt.Sprintf("%sm", runtimeStr)
data := struct {
TMDBID string
IMDBID string
EnglishTitle string
Title string
Year int
Runtime string
DirectorsYAML string
Directors string
Summary string
}{
TMDBID: movie.TMDBID,
IMDBID: movie.IMDBID,
EnglishTitle: movie.EnglishTitle,
Title: movie.Title,
Year: movie.Year,
Runtime: runtimeStr,
DirectorsYAML: strings.Join(movie.Directors, ", "),
Directors: fmt.Sprintf("[[%s]]", strings.Join(movie.Directors, "]], [[")),
Summary: movie.Summary,
}
if err := tpl.Execute(f, data); err != nil {
return err
}
if err := f.Close(); err != nil {
return err
}
return nil
}