all repos

moviefeed @ ce3ebf3ed7c5e93f858b27c84e72e140c6a226cf

rss feed server for tracking new tv show episodes
1 files changed, 22 insertions(+), 23 deletions(-)
refactor: use the helper
Author: Oleksandr Smirnov olexsmir@gmail.com
Committed at: 2026-01-13 14:57:16 +0200
Change ID: lvxuprytuvpxsvwyzsxqnrnlzommxzom
Parent: 48a749b
M api.go

@@ -60,14 +60,8 @@ "https://api.themoviedb.org/3/find/%s?api_key=%s&external_source=imdb_id",

showID, apiKey, ) - resp, err := http.Get(url) + result, err := makeRequest[tmdbFindResponse](url) if err != nil { - return "", fmt.Errorf("failed to fetch TMDB ID: %w", err) - } - defer resp.Body.Close() - - var result tmdbFindResponse - if err := json.NewDecoder(resp.Body).Decode(&result); err != nil { return "", err }

@@ -86,18 +80,11 @@ if err != nil {

return nil, err } - // Get show details url := fmt.Sprintf("https://api.themoviedb.org/3/tv/%s?api_key=%s", tmdbID, apiKey) - resp, err := http.Get(url) + show, err := makeRequest[tmdbShowDetails](url) if err != nil { return nil, err } - defer resp.Body.Close() - - var show tmdbShowDetails - if err := json.NewDecoder(resp.Body).Decode(&show); err != nil { - return nil, err - } seasonsToFetch := []int{1} if show.NumberOfSeasons > 1 {

@@ -108,18 +95,11 @@ var allEpisodes []TMDBEpisode

for _, season := range seasonsToFetch { seasonURL := fmt.Sprintf("https://api.themoviedb.org/3/tv/%s/season/%d?api_key=%s", tmdbID, season, apiKey) - resp, err := http.Get(seasonURL) + seasonData, err := makeRequest[tmdbSeasonResponse](seasonURL) if err != nil { slog.Warn("failed to fetch season", "season", season, "show", tmdbID, "err", err) continue } - defer resp.Body.Close() - - var seasonData tmdbSeasonResponse - if err := json.NewDecoder(resp.Body).Decode(&seasonData); err != nil { - slog.Warn("failed to decode season", "season", season, "show", tmdbID, "err", err) - continue - } for _, ep := range seasonData.Episodes { ep.ShowName = show.Name

@@ -152,3 +132,22 @@ }

} return recent } + +func makeRequest[T any](url string) (*T, error) { + resp, err := http.Get(url) + if err != nil { + return nil, fmt.Errorf("failed to fetch %s: %w", url, err) + } + defer func() { + if err := resp.Body.Close(); err != nil { + slog.Error("failed to close response body", "err", err) + } + }() + + var result T + if err := json.NewDecoder(resp.Body).Decode(&result); err != nil { + return nil, fmt.Errorf("failed to decode response: %w", err) + } + + return &result, nil +}