feedkit now contains a reusable core, while weatherfeeder is a concrete implementation that includes weather-specific functions.
52 lines
1.2 KiB
Go
52 lines
1.2 KiB
Go
package nws
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"strings"
|
|
|
|
"gitea.maximumdirect.net/ejr/feedkit/config"
|
|
"gitea.maximumdirect.net/ejr/feedkit/event"
|
|
)
|
|
|
|
type ForecastSource struct {
|
|
name string
|
|
url string
|
|
userAgent string
|
|
}
|
|
|
|
func NewForecastSource(cfg config.SourceConfig) (*ForecastSource, error) {
|
|
if strings.TrimSpace(cfg.Name) == "" {
|
|
return nil, fmt.Errorf("nws_forecast: name is required")
|
|
}
|
|
if cfg.Params == nil {
|
|
return nil, fmt.Errorf("nws_forecast %q: params are required (need params.url and params.user_agent)", cfg.Name)
|
|
}
|
|
|
|
url, ok := cfg.ParamString("url", "URL")
|
|
if !ok {
|
|
return nil, fmt.Errorf("nws_forecast %q: params.url is required", cfg.Name)
|
|
}
|
|
|
|
ua, ok := cfg.ParamString("user_agent", "userAgent")
|
|
if !ok {
|
|
return nil, fmt.Errorf("nws_forecast %q: params.user_agent is required", cfg.Name)
|
|
}
|
|
|
|
return &ForecastSource{
|
|
name: cfg.Name,
|
|
url: url,
|
|
userAgent: ua,
|
|
}, nil
|
|
}
|
|
|
|
func (s *ForecastSource) Name() string { return s.name }
|
|
|
|
// Kind is used for routing/policy.
|
|
func (s *ForecastSource) Kind() event.Kind { return event.Kind("forecast") }
|
|
|
|
func (s *ForecastSource) Poll(ctx context.Context) ([]event.Event, error) {
|
|
_ = ctx
|
|
return nil, fmt.Errorf("nws.ForecastSource.Poll: TODO implement (url=%s)", s.url)
|
|
}
|