add support for links as posts
This commit is contained in:
parent
2bb3946237
commit
bfa829d8c7
4 changed files with 240 additions and 33 deletions
164
bsky/parse.go
164
bsky/parse.go
|
@ -123,6 +123,160 @@ type ParsedEmbeds struct {
|
|||
Height int64
|
||||
}
|
||||
|
||||
type FetchedPost struct {
|
||||
URI string `json:"uri"`
|
||||
Cid string `json:"cid"`
|
||||
Author struct {
|
||||
Did string `json:"did"`
|
||||
Handle string `json:"handle"`
|
||||
DisplayName string `json:"displayName"`
|
||||
Avatar string `json:"avatar"`
|
||||
Associated struct {
|
||||
Chat struct {
|
||||
AllowIncoming string `json:"allowIncoming"`
|
||||
} `json:"chat"`
|
||||
} `json:"associated"`
|
||||
Labels []interface{} `json:"labels"`
|
||||
CreatedAt time.Time `json:"createdAt"`
|
||||
} `json:"author"`
|
||||
Record *Post `json:"record"`
|
||||
// Record struct {
|
||||
// Type string `json:"$type"`
|
||||
// CreatedAt time.Time `json:"createdAt"`
|
||||
// Embed struct {
|
||||
// Type string `json:"$type"`
|
||||
// Media struct {
|
||||
// Type string `json:"$type"`
|
||||
// Images []struct {
|
||||
// Alt string `json:"alt"`
|
||||
// AspectRatio struct {
|
||||
// Height int `json:"height"`
|
||||
// Width int `json:"width"`
|
||||
// } `json:"aspectRatio"`
|
||||
// Image struct {
|
||||
// Type string `json:"$type"`
|
||||
// Ref struct {
|
||||
// Link string `json:"$link"`
|
||||
// } `json:"ref"`
|
||||
// MimeType string `json:"mimeType"`
|
||||
// Size int `json:"size"`
|
||||
// } `json:"image"`
|
||||
// } `json:"images"`
|
||||
// } `json:"media"`
|
||||
// Record struct {
|
||||
// Type string `json:"$type"`
|
||||
// Record struct {
|
||||
// Cid string `json:"cid"`
|
||||
// URI string `json:"uri"`
|
||||
// } `json:"record"`
|
||||
// } `json:"record"`
|
||||
// } `json:"embed"`
|
||||
// Labels struct {
|
||||
// Type string `json:"$type"`
|
||||
// Values []struct {
|
||||
// Val string `json:"val"`
|
||||
// } `json:"values"`
|
||||
// } `json:"labels"`
|
||||
// Langs []string `json:"langs"`
|
||||
// Text string `json:"text"`
|
||||
// } `json:"record"`
|
||||
Embed struct {
|
||||
Type string `json:"$type"`
|
||||
Media struct {
|
||||
Type string `json:"$type"`
|
||||
Images []struct {
|
||||
Thumb string `json:"thumb"`
|
||||
Fullsize string `json:"fullsize"`
|
||||
Alt string `json:"alt"`
|
||||
AspectRatio struct {
|
||||
Height int `json:"height"`
|
||||
Width int `json:"width"`
|
||||
} `json:"aspectRatio"`
|
||||
} `json:"images"`
|
||||
} `json:"media"`
|
||||
Record struct {
|
||||
Record struct {
|
||||
Type string `json:"$type"`
|
||||
URI string `json:"uri"`
|
||||
Cid string `json:"cid"`
|
||||
Author struct {
|
||||
Did string `json:"did"`
|
||||
Handle string `json:"handle"`
|
||||
DisplayName string `json:"displayName"`
|
||||
Avatar string `json:"avatar"`
|
||||
Associated struct {
|
||||
Chat struct {
|
||||
AllowIncoming string `json:"allowIncoming"`
|
||||
} `json:"chat"`
|
||||
} `json:"associated"`
|
||||
Labels []interface{} `json:"labels"`
|
||||
CreatedAt time.Time `json:"createdAt"`
|
||||
} `json:"author"`
|
||||
Value struct {
|
||||
Type string `json:"$type"`
|
||||
CreatedAt time.Time `json:"createdAt"`
|
||||
Embed struct {
|
||||
Type string `json:"$type"`
|
||||
AspectRatio struct {
|
||||
Height int `json:"height"`
|
||||
Width int `json:"width"`
|
||||
} `json:"aspectRatio"`
|
||||
Video struct {
|
||||
Type string `json:"$type"`
|
||||
Ref struct {
|
||||
Link string `json:"$link"`
|
||||
} `json:"ref"`
|
||||
MimeType string `json:"mimeType"`
|
||||
Size int `json:"size"`
|
||||
} `json:"video"`
|
||||
} `json:"embed"`
|
||||
Facets []struct {
|
||||
Type string `json:"$type"`
|
||||
Features []struct {
|
||||
Type string `json:"$type"`
|
||||
Did string `json:"did"`
|
||||
} `json:"features"`
|
||||
Index struct {
|
||||
ByteEnd int `json:"byteEnd"`
|
||||
ByteStart int `json:"byteStart"`
|
||||
} `json:"index"`
|
||||
} `json:"facets"`
|
||||
Langs []string `json:"langs"`
|
||||
Text string `json:"text"`
|
||||
} `json:"value"`
|
||||
Labels []interface{} `json:"labels"`
|
||||
LikeCount int `json:"likeCount"`
|
||||
ReplyCount int `json:"replyCount"`
|
||||
RepostCount int `json:"repostCount"`
|
||||
QuoteCount int `json:"quoteCount"`
|
||||
IndexedAt time.Time `json:"indexedAt"`
|
||||
Embeds []struct {
|
||||
Type string `json:"$type"`
|
||||
Cid string `json:"cid"`
|
||||
Playlist string `json:"playlist"`
|
||||
Thumbnail string `json:"thumbnail"`
|
||||
AspectRatio struct {
|
||||
Height int `json:"height"`
|
||||
Width int `json:"width"`
|
||||
} `json:"aspectRatio"`
|
||||
} `json:"embeds"`
|
||||
} `json:"record"`
|
||||
} `json:"record"`
|
||||
} `json:"embed,omitempty"`
|
||||
ReplyCount int `json:"replyCount"`
|
||||
RepostCount int `json:"repostCount"`
|
||||
LikeCount int `json:"likeCount"`
|
||||
QuoteCount int `json:"quoteCount"`
|
||||
IndexedAt time.Time `json:"indexedAt"`
|
||||
Labels []struct {
|
||||
Src string `json:"src"`
|
||||
URI string `json:"uri"`
|
||||
Cid string `json:"cid"`
|
||||
Val string `json:"val"`
|
||||
Cts time.Time `json:"cts"`
|
||||
} `json:"labels"`
|
||||
}
|
||||
|
||||
func (b *BSky) ParsePost(post []byte) (*Post, error) {
|
||||
var p = &Post{}
|
||||
err := json.Unmarshal(post, &p)
|
||||
|
@ -160,12 +314,10 @@ func (post *Post) ProcessFacets(aliases []Records) string {
|
|||
switch feature.Type {
|
||||
case "app.bsky.richtext.facet#mention":
|
||||
link := fmt.Sprintf(`<a href="https://bsky.app/profile/%s">%s</a>`, feature.Did, post.Text[start:end])
|
||||
if aliases != nil {
|
||||
for _, alias := range aliases {
|
||||
if alias.Value.Subject == feature.Did {
|
||||
link = fmt.Sprintf(`<a href="%s">%s</a>`,
|
||||
strings.SplitN(alias.Value.Target, "#", 2)[0], strings.SplitN(alias.Value.Target, "#", 2)[1])
|
||||
}
|
||||
for _, alias := range aliases {
|
||||
if alias.Value.Subject == feature.Did {
|
||||
link = fmt.Sprintf(`<a href="%s">%s</a>`,
|
||||
strings.SplitN(alias.Value.Target, "#", 2)[0], strings.SplitN(alias.Value.Target, "#", 2)[1])
|
||||
}
|
||||
}
|
||||
result.WriteString(link)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue