bskyweb: iterate on RSS format, based on feedback (#2269)

Thanks to Dave Winer (@scripting)!
zio/stable
bnewbold 2023-12-22 17:07:25 +01:00 committed by GitHub
parent 64dc8ff342
commit a5c151c041
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 19 additions and 5 deletions

View File

@ -1,8 +1,10 @@
package main
import (
"encoding/xml"
"fmt"
"net/http"
"time"
appbsky "github.com/bluesky-social/indigo/api/bsky"
"github.com/bluesky-social/indigo/atproto/syntax"
@ -10,6 +12,12 @@ import (
"github.com/labstack/echo/v4"
)
type ItemGUID struct {
XMLName xml.Name `xml:"guid"`
Value string `xml:",chardata"`
IsPerma bool `xml:"isPermalink,attr"`
}
// We don't actually populate the title for "posts".
// Some background: https://book.micro.blog/rss-for-microblogs/
type Item struct {
@ -17,8 +25,7 @@ type Item struct {
Link string `xml:"link,omitempty"`
Description string `xml:"description,omitempty"`
PubDate string `xml:"pubDate,omitempty"`
Author string `xml:"author,omitempty"`
GUID string `xml:"guid,omitempty"`
GUID ItemGUID
}
type rss struct {
@ -71,12 +78,19 @@ func (srv *Server) WebProfileRSS(c echo.Context) error {
if rec.Reply != nil {
continue
}
pubDate := ""
createdAt, err := syntax.ParseDatetimeLenient(rec.CreatedAt)
if nil == err {
pubDate = createdAt.Time().Format(time.RFC822Z)
}
posts = append(posts, Item{
Link: fmt.Sprintf("https://bsky.app/profile/%s/post/%s", pv.Handle, aturi.RecordKey().String()),
Description: rec.Text,
PubDate: rec.CreatedAt,
Author: "@" + pv.Handle,
GUID: aturi.String(),
PubDate: pubDate,
GUID: ItemGUID{
Value: aturi.String(),
IsPerma: false,
},
})
}