Files
nlnieuws/cmd/dates2json/dates2json.go
Peter Kleiweg 5c651387af grote reorganisatie:
- HLN, NOS, NU, VRT: per week -> per dag
- yyyy-ww -> yyyy.ww
- yyyy*  -> yyyy/yyyy*
etc
2026-05-27 22:42:03 +02:00

89 lines
1.5 KiB
Go

package main
import (
e "codeberg.org/pebbe/errors"
"encoding/json"
"fmt"
"os"
"slices"
"strconv"
"strings"
"time"
)
type Date struct {
Week string `json:"week"`
First string `json:"first"`
Last string `json:"last"`
}
var (
x = e.ExitErr
dates = make([]Date, 0)
)
func main() {
dirs, err := os.ReadDir("/net/corpora/nlnieuws/data/json")
x(err)
for _, dir := range dirs {
if !dir.IsDir() {
continue
}
dirname := dir.Name()
if dirname[0] != '2' {
continue
}
files, err := os.ReadDir("/net/corpora/nlnieuws/data/json/" + dirname)
x(err)
for _, file := range files {
filename := file.Name()
if strings.HasPrefix(filename, "DATA-") && strings.HasSuffix(filename, "-4.json") {
addWeek(filename[5:12])
}
}
}
slices.Reverse(dates)
b, err := json.Marshal(dates)
x(err)
fmt.Println(string(b))
}
func addWeek(s string) {
week, err := strconv.Atoi(s[5:])
x(err)
year, err := strconv.Atoi(s[:4])
x(err)
// 1 januari
t := time.Date(year, 1, 1, 12, 0, 0, 0, time.UTC)
// zoek eerste donderdag
day := int(t.Weekday()) // 0 = zondag
donderdag := 4 - day
if donderdag < 0 {
donderdag = donderdag + 7
}
// schuif naar maandag voor eerste donderdag: donderdag - 3
// in de gewenste week: 7 * (week - 1)
t = t.AddDate(0, 0, donderdag-3+7*(week-1))
t2 := t.AddDate(0, 0, 6)
dates = append(dates, Date{
Week: s,
First: makeDate(t),
Last: makeDate(t2),
})
}
func makeDate(d time.Time) string {
return fmt.Sprintf("%d-%02d-%02d", d.Year(), int(d.Month()), d.Day())
}