commit d730aab7c92da74b395d43eb84a692c5e4c44abf
parent c9fd51105289cca1e985fb5429496d819ad30a0b
Author: Oliver Lowe <o@olowe.co>
Date: Fri, 18 Jul 2025 12:14:03 +0700
hn: link for Ask HN posts
Diffstat:
1 file changed, 25 insertions(+), 8 deletions(-)
diff --git a/src/hnatom/hnatom.go b/src/hnatom/hnatom.go
@@ -63,12 +63,12 @@ func Top() ([]int, error) {
return ids, err
}
-const maxEntries = 5
-
func entryContent(item *Item) []byte {
- buf := &bytes.Buffer{}
- fmt.Fprintf(buf, "Score: %d\n", item.Score)
- fmt.Fprintln(buf, "<br>")
+ buf := bytes.NewBufferString(item.Text)
+ if item.Text != "" {
+ buf.WriteString("<p>")
+ }
+ fmt.Fprintf(buf, "Score: %d<br>", item.Score)
comments := fmt.Sprintf("https://news.ycombinator.com/item?id=%d", item.ID)
fmt.Fprintf(buf, "<a href=%q>Comments: %d", comments, item.Descendants)
return buf.Bytes()
@@ -89,6 +89,10 @@ func init() {
}
func main() {
+ item, err := Get(44597668)
+ fmt.Printf("%+v\n", item)
+ os.Exit(1)
+
top, err := Top()
if err != nil {
log.Println("get top items:", err)
@@ -109,13 +113,22 @@ func main() {
Entries: make([]atom.Entry, *numItems),
}
+ var j int
for i := range top[:len(feed.Entries)] {
item, err := Get(top[i])
if err != nil {
log.Printf("get item %d: %v", top[i], err)
continue
}
- feed.Entries[i] = atom.Entry{
+ if item.Type != "story" {
+ continue
+ }
+ link := item.URL
+ if link == "" {
+ // Ask HN posts have no external URL set
+ link = fmt.Sprintf("https://news.ycombinator.com/item?id=%d", item.ID)
+ }
+ feed.Entries[j] = atom.Entry{
ID: fmt.Sprintf("%s/item/%d.json", apiRoot, top[i]),
Title: item.Title,
Updated: time.Unix(int64(item.Time), 0),
@@ -124,12 +137,16 @@ func main() {
URI: "https://news.ycombinator.com/user?id=" + item.By,
},
Content: []byte(entryContent(item)),
- Links: []atom.Link{{HRef: item.URL}},
+ Links: []atom.Link{{HRef: link}},
}
+ j++
}
+ feed.Entries = feed.Entries[:j]
- if err := xml.NewEncoder(os.Stdout).Encode(feed); err != nil {
+ b, err := xml.MarshalIndent(feed, "", "\t")
+ if err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
+ os.Stdout.Write(b)
}