44 lines
958 B
Go
44 lines
958 B
Go
package parser
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/yourname/reddit-scraper/internal/fetcher"
|
|
"github.com/yourname/reddit-scraper/internal/types"
|
|
)
|
|
|
|
// ParseJSONPost converts a fetcher.JSONPost into a normalized types.Post.
|
|
// It validates mandatory fields and returns an error if the post should be skipped.
|
|
func ParseJSONPost(j fetcher.JSONPost) (types.Post, error) {
|
|
var p types.Post
|
|
if j.ID == "" {
|
|
return p, fmt.Errorf("missing id")
|
|
}
|
|
if j.Subreddit == "" {
|
|
return p, fmt.Errorf("missing subreddit")
|
|
}
|
|
if j.Title == "" {
|
|
return p, fmt.Errorf("missing title")
|
|
}
|
|
if j.CreatedUTC <= 0 {
|
|
return p, fmt.Errorf("invalid created_utc")
|
|
}
|
|
|
|
p.ID = j.ID
|
|
p.Subreddit = j.Subreddit
|
|
p.Title = j.Title
|
|
if j.Author == "" {
|
|
p.Author = "[deleted]"
|
|
} else {
|
|
p.Author = j.Author
|
|
}
|
|
p.CreatedUTC = int64(j.CreatedUTC)
|
|
p.Score = j.Score
|
|
p.NumComments = j.NumComments
|
|
p.Content = j.Selftext
|
|
p.URL = j.URL
|
|
p.Permalink = j.Permalink
|
|
|
|
return p, nil
|
|
}
|