reddit-scrapper/internal/parser/parser.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
}