Compare commits
2 commits
6110eddf68
...
8f9260b357
Author | SHA1 | Date | |
---|---|---|---|
8f9260b357 | |||
7db4b81ce3 |
5 changed files with 37 additions and 21 deletions
7
.gitignore
vendored
7
.gitignore
vendored
|
@ -1,2 +1,9 @@
|
||||||
/data
|
/data
|
||||||
/covers
|
/covers
|
||||||
|
/bdm
|
||||||
|
/buch_des_monats.iml
|
||||||
|
/.idea/inspectionProfiles/Project_Default.xml
|
||||||
|
/.idea/.gitignore
|
||||||
|
/.idea/misc.xml
|
||||||
|
/.idea/modules.xml
|
||||||
|
/.idea/vcs.xml
|
||||||
|
|
4
go.mod
4
go.mod
|
@ -1,5 +1,3 @@
|
||||||
module okoyono.de/buchdesmonats
|
module okoyono.de/buchdesmonats
|
||||||
|
|
||||||
go 1.16
|
go 1.20
|
||||||
|
|
||||||
require github.com/a-h/gemini v0.0.61
|
|
||||||
|
|
2
go.sum
2
go.sum
|
@ -1,2 +0,0 @@
|
||||||
github.com/a-h/gemini v0.0.61 h1:WSV9f5T6Vut9gIATUhqAh9KfsA4/kqcUIbTiDbsn1JY=
|
|
||||||
github.com/a-h/gemini v0.0.61/go.mod h1:p9wvIRDc2s3Lnbkw7CgNzDNgJHPuXDwh3dOF7w0NT8s=
|
|
33
src/bdm.go
33
src/bdm.go
|
@ -2,15 +2,13 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
//"html/template"
|
|
||||||
xmltpl "text/template"
|
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
|
xmltpl "text/template"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Item struct {
|
type Item struct {
|
||||||
|
@ -41,14 +39,24 @@ func (i Item) downloadCover() error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
defer resp.Body.Close()
|
defer func(Body io.ReadCloser) {
|
||||||
|
err := Body.Close()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal("Can not close the response body")
|
||||||
|
}
|
||||||
|
}(resp.Body)
|
||||||
|
|
||||||
out, err := os.Create(i.targetFilename())
|
out, err := os.Create(i.targetFilename())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
defer out.Close()
|
defer func(out *os.File) {
|
||||||
|
err := out.Close()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal("Can not close the file")
|
||||||
|
}
|
||||||
|
}(out)
|
||||||
|
|
||||||
_, err = io.Copy(out, resp.Body)
|
_, err = io.Copy(out, resp.Body)
|
||||||
|
|
||||||
|
@ -65,16 +73,21 @@ func getItems(filename string) []Item {
|
||||||
log.Fatal(filename + " is missing")
|
log.Fatal(filename + " is missing")
|
||||||
}
|
}
|
||||||
|
|
||||||
defer resp.Body.Close()
|
defer func(Body io.ReadCloser) {
|
||||||
|
err := Body.Close()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal("Can not close the response body")
|
||||||
|
}
|
||||||
|
}(resp.Body)
|
||||||
|
|
||||||
content, err := ioutil.ReadAll(resp.Body)
|
content, err := io.ReadAll(resp.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal("Can not download the file. Network problem?")
|
log.Fatal("Can not download the file. Network problem?")
|
||||||
}
|
}
|
||||||
|
|
||||||
currentYear := ""
|
currentYear := ""
|
||||||
currentMonth := 0
|
currentMonth := 0
|
||||||
re := regexp.MustCompile(`^[^[]+ \[(?P<author>[^"]+)"(?P<title>[^"]+)"\]\([^=]+=(?P<isbn>[0-9]+).*$`)
|
re := regexp.MustCompile(`^[^[]+ \[(?P<author>[^"]+)"(?P<title>[^"]+)"]\([^=]+=(?P<isbn>[0-9]+).*$`)
|
||||||
yearRe := regexp.MustCompile(`^## (?P<year>20[0-9]{2})$`)
|
yearRe := regexp.MustCompile(`^## (?P<year>20[0-9]{2})$`)
|
||||||
|
|
||||||
var yearBucket []Item
|
var yearBucket []Item
|
||||||
|
@ -86,7 +99,7 @@ func getItems(filename string) []Item {
|
||||||
currentMonth = 0
|
currentMonth = 0
|
||||||
|
|
||||||
// Add the bucket in reverse order
|
// Add the bucket in reverse order
|
||||||
for i := len(yearBucket)-1; i >= 0; i-- {
|
for i := len(yearBucket) - 1; i >= 0; i-- {
|
||||||
items = append(items, yearBucket[i])
|
items = append(items, yearBucket[i])
|
||||||
}
|
}
|
||||||
yearBucket = nil
|
yearBucket = nil
|
||||||
|
@ -118,7 +131,7 @@ func getTemplate(sourceFile string, templateFilename string, w http.ResponseWrit
|
||||||
// Get all items from the git repo
|
// Get all items from the git repo
|
||||||
items := getItems(sourceFile)
|
items := getItems(sourceFile)
|
||||||
|
|
||||||
// Generate the restulting HTML
|
// Generate the resulting HTML
|
||||||
t, err := xmltpl.ParseFiles("templates/" + templateFilename)
|
t, err := xmltpl.ParseFiles("templates/" + templateFilename)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html lang="de">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<title>okoyono.de -- Buch des Monats</title>
|
<title>okoyono.de -- Buch des Monats</title>
|
||||||
|
|
Loading…
Reference in a new issue