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