Initial commit
This commit is contained in:
commit
c0b3067f10
14
env.sample
Normal file
14
env.sample
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# Secrets and API Keys
|
||||||
|
IMDB_API_KEY=your_imdb_api_key
|
||||||
|
IGDB_API_KEY=your_igdb_api_key
|
||||||
|
ISBNDB_API_KEY=your_isbndb_api_key
|
||||||
|
FANART_API_KEY=your_fanart_api_key
|
||||||
|
SPOTIFY_API_KEY=your_spotify_api_key
|
||||||
|
|
||||||
|
# Ruta a los archivos de Obsidian
|
||||||
|
OBSIDIAN_YAML_PATH=/ruta/a/tu/vault/obsidian/
|
||||||
|
|
||||||
|
# Directorios
|
||||||
|
MARKDOWN_OUTPUT_DIR=output/markdown
|
||||||
|
IMAGES_OUTPUT_DIR=output/images
|
||||||
|
TEMPLATES_DIR=templates
|
8
go.mod
Normal file
8
go.mod
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
module hugo-medialog
|
||||||
|
|
||||||
|
go 1.21.4
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/joho/godotenv v1.5.1
|
||||||
|
gopkg.in/yaml.v3 v3.0.1
|
||||||
|
)
|
6
go.sum
Normal file
6
go.sum
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
|
||||||
|
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
|
||||||
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
||||||
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||||
|
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
0
internal/libros/controller.go
Normal file
0
internal/libros/controller.go
Normal file
17
internal/libros/model.go
Normal file
17
internal/libros/model.go
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
package libros
|
||||||
|
|
||||||
|
type Libro struct {
|
||||||
|
Title string `yaml:"title"`
|
||||||
|
Author string `yaml:"author"`
|
||||||
|
Link string `yaml:"link"`
|
||||||
|
Year int `yaml:"year"`
|
||||||
|
Rate float64 `yaml:"rate"`
|
||||||
|
Progress string `yaml:"progress"`
|
||||||
|
Image string `yaml:"image"`
|
||||||
|
Poster string `yaml:"poster-image"`
|
||||||
|
Background string `yaml:"background-image"`
|
||||||
|
Date string `yaml:"date"`
|
||||||
|
Tags []string
|
||||||
|
}
|
||||||
|
|
||||||
|
type Libros []Libro
|
0
internal/musica/controller.go
Normal file
0
internal/musica/controller.go
Normal file
16
internal/musica/model.go
Normal file
16
internal/musica/model.go
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
package musica
|
||||||
|
|
||||||
|
type Musica struct {
|
||||||
|
Title string `yaml:"title"`
|
||||||
|
Subtitle string `yaml:"subtitle"`
|
||||||
|
Link string `yaml:"link"`
|
||||||
|
Year int `yaml:"year"`
|
||||||
|
Rate float64 `yaml:"rate"`
|
||||||
|
Image string `yaml:"image"`
|
||||||
|
Poster string `yaml:"poster-image"`
|
||||||
|
Background string `yaml:"background-image"`
|
||||||
|
Date string `yaml:"date"`
|
||||||
|
Tags []string
|
||||||
|
}
|
||||||
|
|
||||||
|
type Musicas []Musica
|
64
internal/peliculas/controller.go
Normal file
64
internal/peliculas/controller.go
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
// internal/peliculas/controller.go
|
||||||
|
package peliculas
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"hugo-medialog/utils"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
|
||||||
|
"gopkg.in/yaml.v3"
|
||||||
|
)
|
||||||
|
|
||||||
|
func LoadPeliculas(obsidianPath string) ([]Pelicula, error) {
|
||||||
|
moviesFile := filepath.Join(obsidianPath, "pelis.yml.md")
|
||||||
|
fileData, err := os.ReadFile(moviesFile)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var peliculas []Pelicula
|
||||||
|
err = yaml.Unmarshal(fileData, &peliculas)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return peliculas, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func ProcessPeliculas(peliculas []Pelicula) error {
|
||||||
|
for _, pelicula := range peliculas {
|
||||||
|
fmt.Printf("Título: %s, Puntuación: %.1f, Fecha: %s\n",
|
||||||
|
pelicula.Title, pelicula.Rate, pelicula.Date)
|
||||||
|
// Aquí se pueden hacer las llamadas a APIs externas (IMDb, Fanart.tv)
|
||||||
|
// y generar el markdown en base a las plantillas.
|
||||||
|
err := generatePeliculaMarkdown(pelicula)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func generatePeliculaMarkdown(pelicula Pelicula) error {
|
||||||
|
templatePath := filepath.Join(os.Getenv("TEMPLATES_DIR"), "pelicula.md.tpl")
|
||||||
|
outputDir := os.Getenv("MARKDOWN_OUTPUT_DIR")
|
||||||
|
if err := utils.CreateDirIfNotExists(outputDir); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
outputPath := filepath.Join(outputDir, fmt.Sprintf("%s.md", pelicula.Title))
|
||||||
|
|
||||||
|
data := map[string]interface{}{
|
||||||
|
"Title": pelicula.Title,
|
||||||
|
"Link": "https://imdb.com/enlace", // Obtener el enlace de IMDb
|
||||||
|
"Subtitle": pelicula.Year,
|
||||||
|
"Year": pelicula.Year,
|
||||||
|
"Rate": pelicula.Rate,
|
||||||
|
"Image": pelicula.Image,
|
||||||
|
"Poster": pelicula.Poster,
|
||||||
|
"Background": pelicula.Background,
|
||||||
|
"Date": pelicula.Date,
|
||||||
|
}
|
||||||
|
|
||||||
|
return utils.GenerateMarkdown(templatePath, outputPath, data)
|
||||||
|
}
|
16
internal/peliculas/model.go
Normal file
16
internal/peliculas/model.go
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
package peliculas
|
||||||
|
|
||||||
|
type Pelicula struct {
|
||||||
|
Title string `yaml:"title"`
|
||||||
|
Subtitle string `yaml:"subtitle"`
|
||||||
|
Link string `yaml:"link"`
|
||||||
|
Year int `yaml:"year"`
|
||||||
|
Rate float64 `yaml:"rate"`
|
||||||
|
Image string `yaml:"image"`
|
||||||
|
Poster string `yaml:"poster-image"`
|
||||||
|
Background string `yaml:"background-image"`
|
||||||
|
Date string `yaml:"date"`
|
||||||
|
Tags []string
|
||||||
|
}
|
||||||
|
|
||||||
|
type Peliculas []Pelicula
|
0
internal/series/controller.go
Normal file
0
internal/series/controller.go
Normal file
17
internal/series/model.go
Normal file
17
internal/series/model.go
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
package series
|
||||||
|
|
||||||
|
type Serie struct {
|
||||||
|
Title string `yaml:"title"`
|
||||||
|
Link string `yaml:"link"`
|
||||||
|
Subtitle string `yaml:"subtitle"`
|
||||||
|
Year int `yaml:"year"`
|
||||||
|
Rate float64 `yaml:"rate"`
|
||||||
|
Progress string `yaml:"progress"`
|
||||||
|
Image string `yaml:"image"`
|
||||||
|
Poster string `yaml:"poster-image"`
|
||||||
|
Background string `yaml:"background-image"`
|
||||||
|
Date string `yaml:"date"`
|
||||||
|
Tags []string
|
||||||
|
}
|
||||||
|
|
||||||
|
type Series []Serie
|
0
internal/videojuegos/controller.go
Normal file
0
internal/videojuegos/controller.go
Normal file
17
internal/videojuegos/model.go
Normal file
17
internal/videojuegos/model.go
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
package videojuegos
|
||||||
|
|
||||||
|
type Videojuego struct {
|
||||||
|
Title string `yaml:"title"`
|
||||||
|
Link string `yaml:"link"`
|
||||||
|
Subtitle string `yaml:"subtitle"`
|
||||||
|
Year int `yaml:"year"`
|
||||||
|
Rate float64 `yaml:"rate"`
|
||||||
|
Progress string `yaml:"progress"`
|
||||||
|
Image string `yaml:"image"`
|
||||||
|
Poster string `yaml:"poster-image"`
|
||||||
|
Background string `yaml:"background-image"`
|
||||||
|
Date string `yaml:"date"`
|
||||||
|
Tags []string
|
||||||
|
}
|
||||||
|
|
||||||
|
type Videojuegos []Videojuego
|
27
main.go
Normal file
27
main.go
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"hugo-medialog/internal/peliculas"
|
||||||
|
"hugo-medialog/utils"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
// Cargar el archivo .env
|
||||||
|
utils.LoadConfig()
|
||||||
|
|
||||||
|
obsidianPath := os.Getenv("OBSIDIAN_YAML_PATH")
|
||||||
|
|
||||||
|
// Peliculas
|
||||||
|
moviesList, err := peliculas.LoadPeliculas(obsidianPath)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("Error reading peliculas file: %v\n", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
err = peliculas.ProcessPeliculas(moviesList)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("Error processing peliculas: %v\n", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
4
obsidian/libros.yml.md
Normal file
4
obsidian/libros.yml.md
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
- title: "The Catcher in the Rye"
|
||||||
|
progress: "50%"
|
||||||
|
rate: 7.5
|
||||||
|
date: 2024-10-08
|
4
obsidian/musica.yml.md
Normal file
4
obsidian/musica.yml.md
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
- title: "Random Access Memories"
|
||||||
|
spotify_id: "4m2880jivSbbyEGAKfITCa"
|
||||||
|
rate: 9.8
|
||||||
|
date: 2024-10-08
|
9
obsidian/pelis.yml.md
Normal file
9
obsidian/pelis.yml.md
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
- title: "Inception"
|
||||||
|
imdb:
|
||||||
|
rate: 8.5
|
||||||
|
date: 2024-10-08
|
||||||
|
|
||||||
|
- title: "Matrix"
|
||||||
|
imdb:
|
||||||
|
rate: 9.8
|
||||||
|
date: "2024-10-08"
|
4
obsidian/series.yml.md
Normal file
4
obsidian/series.yml.md
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
- title: "Breaking Bad"
|
||||||
|
progress: "10%"
|
||||||
|
rate: 9.2
|
||||||
|
date: 2024-10-08
|
4
obsidian/videojuegos.yml.md
Normal file
4
obsidian/videojuegos.yml.md
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
- title: "The Legend of Zelda: Breath of the Wild"
|
||||||
|
progress: "40%"
|
||||||
|
rate: 9.8
|
||||||
|
date: 2024-10-08
|
0
services/fanart.go
Normal file
0
services/fanart.go
Normal file
0
services/igdb.go
Normal file
0
services/igdb.go
Normal file
0
services/imdb.go
Normal file
0
services/imdb.go
Normal file
0
services/isbndb.go
Normal file
0
services/isbndb.go
Normal file
0
services/spotify.go
Normal file
0
services/spotify.go
Normal file
23
templates/libro.md.tpl
Normal file
23
templates/libro.md.tpl
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
---
|
||||||
|
title: "{{ .Title }}"
|
||||||
|
link: "{{ .Link }}"
|
||||||
|
subtitle: "{{ .Subtitle }}"
|
||||||
|
author: "{{ .Author }}"
|
||||||
|
year: {{ .Year }}
|
||||||
|
rate: {{ .Rate }}
|
||||||
|
progress: {{ .Progress }}
|
||||||
|
image: {{ .Image }}
|
||||||
|
poster-image: {{ .PosterImage }}
|
||||||
|
background-image: {{ .BackgroundImage }}
|
||||||
|
date: {{ .Date }}
|
||||||
|
draft: false
|
||||||
|
tags: {{ .Tags }}
|
||||||
|
---
|
||||||
|
|
||||||
|
# {{ .Title }}
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
{{ .Overview }}
|
||||||
|
|
||||||
|
## My thoughts
|
21
templates/musica.md.tpl
Normal file
21
templates/musica.md.tpl
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
title: "{{ .Title }}"
|
||||||
|
link: "{{ .Link }}"
|
||||||
|
subtitle: "{{ .Subtitle }}"
|
||||||
|
year: {{ .Year }}
|
||||||
|
rate: {{ .Rate }}
|
||||||
|
image: {{ .Image }}
|
||||||
|
poster-image: {{ .PosterImage }}
|
||||||
|
background-image: {{ .BackgroundImage }}
|
||||||
|
date: {{ .Date }}
|
||||||
|
draft: false
|
||||||
|
tags: {{ .Tags }}
|
||||||
|
---
|
||||||
|
|
||||||
|
# {{ .Title }}
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
{{ .Overview }}
|
||||||
|
|
||||||
|
## My thoughts
|
21
templates/pelicula.md.tpl
Normal file
21
templates/pelicula.md.tpl
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
title: "{{ .Title }}"
|
||||||
|
link: "{{ .Link }}"
|
||||||
|
subtitle: "{{ .Subtitle }}"
|
||||||
|
year: {{ .Year }}
|
||||||
|
rate: {{ .Rate }}
|
||||||
|
image: {{ .Image }}
|
||||||
|
poster-image: {{ .PosterImage }}
|
||||||
|
background-image: {{ .BackgroundImage }}
|
||||||
|
date: {{ .Date }}
|
||||||
|
draft: false
|
||||||
|
tags: {{ .Tags }}
|
||||||
|
---
|
||||||
|
|
||||||
|
# {{ .Title }}
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
{{ .Overview }}
|
||||||
|
|
||||||
|
## My thoughts
|
22
templates/serie.md.tpl
Normal file
22
templates/serie.md.tpl
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
---
|
||||||
|
title: "{{ .Title }}"
|
||||||
|
link: "{{ .Link }}"
|
||||||
|
subtitle: "{{ .Subtitle }}"
|
||||||
|
year: {{ .Year }}
|
||||||
|
rate: {{ .Rate }}
|
||||||
|
progress: {{ .Progress }}
|
||||||
|
image: {{ .Image }}
|
||||||
|
poster-image: {{ .PosterImage }}
|
||||||
|
background-image: {{ .BackgroundImage }}
|
||||||
|
date: {{ .Date }}
|
||||||
|
draft: false
|
||||||
|
tags: {{ .Tags }}
|
||||||
|
---
|
||||||
|
|
||||||
|
# {{ .Title }}
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
{{ .Overview }}
|
||||||
|
|
||||||
|
## My thoughts
|
22
templates/videojuego.md.tpl
Normal file
22
templates/videojuego.md.tpl
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
---
|
||||||
|
title: "{{ .Title }}"
|
||||||
|
link: "{{ .Link }}"
|
||||||
|
subtitle: "{{ .Subtitle }}"
|
||||||
|
year: {{ .Year }}
|
||||||
|
rate: {{ .Rate }}
|
||||||
|
progress: {{ .Progress }}
|
||||||
|
image: {{ .Image }}
|
||||||
|
poster-image: {{ .PosterImage }}
|
||||||
|
background-image: {{ .BackgroundImage }}
|
||||||
|
date: {{ .Date }}
|
||||||
|
draft: false
|
||||||
|
tags: {{ .Tags }}
|
||||||
|
---
|
||||||
|
|
||||||
|
# {{ .Title }}
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
{{ .Overview }}
|
||||||
|
|
||||||
|
## My thoughts
|
31
utils/config.go
Normal file
31
utils/config.go
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
package utils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io/ioutil"
|
||||||
|
"log"
|
||||||
|
"path/filepath"
|
||||||
|
|
||||||
|
"github.com/joho/godotenv"
|
||||||
|
)
|
||||||
|
|
||||||
|
func LoadConfig() {
|
||||||
|
err := godotenv.Load()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal("Error loading .env file")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func ReadFiles(dir string) ([]string, error) {
|
||||||
|
files, err := ioutil.ReadDir(dir)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var filePaths []string
|
||||||
|
for _, file := range files {
|
||||||
|
if !file.IsDir() && filepath.Ext(file.Name()) == ".md" {
|
||||||
|
filePaths = append(filePaths, filepath.Join(dir, file.Name()))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return filePaths, nil
|
||||||
|
}
|
25
utils/file_reader.go
Normal file
25
utils/file_reader.go
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
// utils/file_reader.go
|
||||||
|
package utils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
|
||||||
|
"gopkg.in/yaml.v3"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Función para leer el archivo YAML
|
||||||
|
func ReadYMLFile(filePath string, out interface{}) error {
|
||||||
|
data, err := ioutil.ReadFile(filePath)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error al leer el archivo %s: %v", filePath, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deserializar el contenido YAML en la estructura Go pasada en "out"
|
||||||
|
err = yaml.Unmarshal(data, out)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error al deserializar el archivo %s: %v", filePath, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
30
utils/utils.go
Normal file
30
utils/utils.go
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
// utils/utils.go
|
||||||
|
package utils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"os"
|
||||||
|
"text/template"
|
||||||
|
)
|
||||||
|
|
||||||
|
func CreateDirIfNotExists(dir string) error {
|
||||||
|
if _, err := os.Stat(dir); os.IsNotExist(err) {
|
||||||
|
return os.MkdirAll(dir, 0755)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func GenerateMarkdown(templatePath string, outputPath string, data map[string]interface{}) error {
|
||||||
|
tmpl, err := template.ParseFiles(templatePath)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
var output bytes.Buffer
|
||||||
|
err = tmpl.Execute(&output, data)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return os.WriteFile(outputPath, output.Bytes(), 0644)
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user