Use shpub to send micropub when no file is specified

This commit is contained in:
Peter Stuifzand 2019-12-23 22:36:19 +01:00
parent 745da46fb6
commit aecf1fd6b3
2 changed files with 77 additions and 46 deletions

68
main.go
View File

@ -10,6 +10,7 @@ import (
"net/http"
"net/url"
"os"
"os/exec"
"regexp"
"strings"
"time"
@ -31,27 +32,36 @@ func init() {
log.SetFlags(log.LstdFlags | log.Lshortfile)
}
func micropub(name, content, server string) error {
var args []string
if server != "" {
args = append(args, "-s", server)
}
args = append(args, "-d", "article", "--html", "--json", name, content)
cmd := exec.Command("shpub", args...)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
return cmd.Run()
}
func main() {
u, err := url.Parse(os.Args[1])
if err != nil {
log.Fatal(err)
}
filename := os.Args[2]
var filename string
outputFile := false
if len(os.Args) >= 3 {
filename = os.Args[2]
outputFile = true
}
re, err := regexp.Compile(`<span class="next-entry"></span>`)
if err != nil {
log.Fatal(err)
}
f, err := forceCreate(filename)
data, err := ioutil.ReadAll(f)
if err != nil {
log.Fatal(err)
}
f.Close()
var buf bytes.Buffer
items, err := getEntriesForFeed(u)
if err != nil {
@ -63,15 +73,38 @@ func main() {
summary := getSummary(monday, items)
if outputFile {
_, err = buf.Write([]byte(`<span class="next-entry"></span>`))
if err != nil {
log.Fatal(err)
}
}
err = outputEntries(summary, &buf)
if err != nil {
log.Fatal(err)
}
output := re.ReplaceAll(data, buf.Bytes())
err = ioutil.WriteFile(filename, output, 0666)
if err != nil {
log.Fatal(err)
if outputFile {
f, err := forceCreate(filename)
data, err := ioutil.ReadAll(f)
if err != nil {
log.Fatal(err)
}
f.Close()
output := re.ReplaceAll(data, buf.Bytes())
err = ioutil.WriteFile(filename, output, 0666)
if err != nil {
log.Fatal(err)
}
} else {
err = micropub(summary.Name, buf.String(), "p83.nl")
if err != nil {
log.Fatal(err)
}
}
}
@ -83,9 +116,9 @@ func getSummary(monday time.Time, items []microsub.Item) Summary {
grouped[itemType] = append(grouped[itemType], item)
}
summary := Summary{
Name: fmt.Sprintf("Digest for Week %d-%d", week, year),
Items: items,
Grouped: grouped,
Name: fmt.Sprintf("Digest for Week %d-%d", week, year),
Items: items,
Grouped: grouped,
}
return summary
}
@ -146,6 +179,7 @@ func outputEntries(summary Summary, w io.Writer) error {
if err != nil {
log.Fatal(err)
}
err = t.Execute(w, summary)
if err != nil {
return err

View File

@ -1,32 +1,29 @@
<span class="next-entry"></span>
<div class="h-entry">
<h2 class="p-name">{{ .Name }}</h2>
{{ range $k, $items := .Grouped }}
<h3>{{ index $.PostTypes $k }}</h3>
<ul class="{{ $k }}">
{{ range $items }}
{{ if eq $k "like-of" }}
{{ range .LikeOf }}
<li><a href="{{ . }}">{{ . }}</a></li>
{{ end }}
{{ else if eq $k "repost-of" }}
{{ range .RepostOf }}
<li><a href="{{ . }}">{{ . }}</a></li>
{{ end }}
{{ else if eq $k "in-reply-to" }}
{{ range .InReplyTo }}
<li><a href="{{ . }}">{{ . }}</a></li>
{{ end }}
{{ range $k, $items := .Grouped }}
<h3>{{ index $.PostTypes $k }}</h3>
<ul class="{{ $k }}">
{{ range $items }}
{{ if eq $k "like-of" }}
{{ range .LikeOf }}
<li><a href="{{ . }}">{{ . }}</a></li>
{{ end }}
{{ else if eq $k "repost-of" }}
{{ range .RepostOf }}
<li><a href="{{ . }}">{{ . }}</a></li>
{{ end }}
{{ else if eq $k "in-reply-to" }}
{{ range .InReplyTo }}
<li><a href="{{ . }}">{{ . }}</a></li>
{{ end }}
{{ else }}
{{ if .Checkin }}
<li><a href="{{ .URL }}">Checkin at {{ .Checkin.Name }} in {{ .Checkin.Locality }}
, {{ .Checkin.Region }}</a></li>
{{ else if .Content }}
<li><a href="{{ .URL }}">{{ .Content.Text }}</a></li>
{{ else }}
{{ if .Checkin }}
<li><a href="{{ .URL }}">Checkin at {{ .Checkin.Name }} in {{ .Checkin.Locality }}, {{ .Checkin.Region }}</a></li>
{{ else if .Content }}
<li><a href="{{ .URL }}">{{ .Content.Text }}</a></li>
{{ else }}
<li><a href="{{ .URL }}">{{ .Name }}</a></li>
{{ end }}
<li><a href="{{ .URL }}">{{ .Name }}</a></li>
{{ end }}
{{ end }}
</ul>
{{ end }}
</div>
{{ end }}
</ul>
{{ end }}