Write new entries in the same file #3
This commit is contained in:
parent
4f8b167e7d
commit
a11318072f
67
main.go
67
main.go
|
@ -1,12 +1,16 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
"html/template"
|
"html/template"
|
||||||
|
"io"
|
||||||
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
|
"regexp"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/jinzhu/now"
|
"github.com/jinzhu/now"
|
||||||
|
@ -16,12 +20,31 @@ import (
|
||||||
"p83.nl/go/ekster/pkg/jf2"
|
"p83.nl/go/ekster/pkg/jf2"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
log.SetFlags(log.LstdFlags | log.Lshortfile)
|
||||||
|
}
|
||||||
func main() {
|
func main() {
|
||||||
u, err := url.Parse(os.Args[1])
|
u, err := url.Parse(os.Args[1])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
filename := os.Args[2]
|
||||||
|
|
||||||
|
re, err := regexp.Compile(`<span class="next-entry"></span>`)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
f, err := openAndCreate(filename)
|
||||||
|
|
||||||
|
data, err := ioutil.ReadAll(f)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
f.Close()
|
||||||
|
|
||||||
|
var buf bytes.Buffer
|
||||||
items, err := getEntriesForFeed(u)
|
items, err := getEntriesForFeed(u)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
|
@ -29,19 +52,53 @@ func main() {
|
||||||
|
|
||||||
items = filterEntriesAfter(items, now.With(time.Now()).Monday())
|
items = filterEntriesAfter(items, now.With(time.Now()).Monday())
|
||||||
|
|
||||||
err = outputEntries(items)
|
err = outputEntries(items, &buf)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
output := re.ReplaceAll(data, buf.Bytes())
|
||||||
|
err = ioutil.WriteFile(filename, output, 0666)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func outputEntries(items []microsub.Item) error {
|
func openAndCreate(filename string) (io.ReadCloser, error) {
|
||||||
|
f, err := os.Open(filename)
|
||||||
|
if err != nil && !os.IsExist(err) {
|
||||||
|
t, err := template.ParseFiles("templates/full.html")
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
f, err = os.Create(filename)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
err = t.Execute(f, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
err = f.Close()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
f, err = os.Open(filename)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
} else if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return f, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func outputEntries(items []microsub.Item, w io.Writer) error {
|
||||||
t, err := template.ParseFiles("templates/weekly.html")
|
t, err := template.ParseFiles("templates/weekly.html")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
err = t.Execute(w, items)
|
||||||
err = t.Execute(os.Stdout, items)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
11
templates/full.html
Normal file
11
templates/full.html
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<title>Weekly summaries</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="h-feed">
|
||||||
|
<h1 class="p-name">Weekly</h1>
|
||||||
|
<span class="next-entry"></span>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -1,25 +1,14 @@
|
||||||
<html lang="en">
|
<span class="next-entry"></span>
|
||||||
<head>
|
<div class="h-entry">
|
||||||
<title>Weekly summaries</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="h-feed">
|
|
||||||
<h1 class="p-name">Weekly</h1>
|
|
||||||
|
|
||||||
{{ range . }}
|
{{ range . }}
|
||||||
<div class="h-entry">
|
<h2 class="p-name">{{ .Name }}</h2>
|
||||||
<h2 class="p-name">{{ .Name }}</h2>
|
{{ if .Content }}
|
||||||
{{ if .Content }}
|
{{ if .Content.HTML }}
|
||||||
{{ if .Content.HTML }}
|
<div class="e-content">{{ .Content.HTML }}</div>
|
||||||
<div class="e-content">{{ .Content.HTML }}</div>
|
{{ else }}
|
||||||
{{ else }}
|
<div class="p-content">{{ .Content.Text }}</div>
|
||||||
<div class="p-content">{{ .Content.Text }}</div>
|
|
||||||
{{ end }}
|
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
<time datetime="{{ .Published }}">{{ .Published }}</time>
|
<time datetime="{{ .Published }}">{{ .Published }}</time>
|
||||||
</div>
|
|
||||||
{{ end }}
|
{{ end }}
|
||||||
</div>
|
</div>
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user