fix: Generate feeds for series in addition to podcast #19

Merged
timharek merged 4 commits from bugfix-allow-series into main 2024-04-02 14:27:00 +00:00
1 changed files with 25 additions and 6 deletions
Showing only changes of commit 82c4f8d22f - Show all commits

View File

@ -28,12 +28,19 @@ interface Manifest {
async function withDownloadLink( async function withDownloadLink(
episode: _OriginalEpisode, episode: _OriginalEpisode,
type: catalogComponents["schemas"]["Type"],
): Promise<OriginalEpisode> { ): Promise<OriginalEpisode> {
// getting stream link // getting stream link
const [playbackStatus, playbackResponse] = await get<Manifest>( let [playbackStatus, playbackResponse] = await get<Manifest>(
`https://psapi.nrk.no/playback/manifest/podcast/${episode.episodeId}`, `https://psapi.nrk.no/playback/manifest/podcast/${episode.episodeId}`,
); );
if (type === "series") {
[playbackStatus, playbackResponse] = await get<Manifest>(
`https://psapi.nrk.no/playback/manifest/program/${episode.episodeId}`,
);
}
if (playbackStatus === OK && playbackResponse) { if (playbackStatus === OK && playbackResponse) {
return { ...episode, url: playbackResponse.playable.assets[0].url }; return { ...episode, url: playbackResponse.playable.assets[0].url };
} else { } else {
@ -47,14 +54,13 @@ export const nrkRadio = {
searchComponents["schemas"]["searchresult"] searchComponents["schemas"]["searchresult"]
>(`https://psapi.nrk.no/radio/search/search?q=${query}`); >(`https://psapi.nrk.no/radio/search/search?q=${query}`);
if (status === OK && response) { if (status === OK && response) {
console.log("res", response.results);
return response.results.series?.results; return response.results.series?.results;
} else { } else {
throw `Something went wrong with ${query} - got status ${status}`; throw `Something went wrong with ${query} - got status ${status}`;
} }
}, },
getSerieData: async (seriesId: string) => { getSerieData: async (seriesId: string) => {
const [ let [
[episodeStatus, episodeResponse], [episodeStatus, episodeResponse],
[seriesStatus, serieResponse], [seriesStatus, serieResponse],
] = await Promise.all([ ] = await Promise.all([
@ -66,20 +72,33 @@ export const nrkRadio = {
), ),
]); ]);
if (episodeStatus !== OK || seriesStatus !== OK) {
[
[episodeStatus, episodeResponse],
[seriesStatus, serieResponse],
] = await Promise.all([
get<catalogComponents["schemas"]["EpisodesHalResource"]>(
`https://psapi.nrk.no/radio/catalog/series/${seriesId}/episodes`,
),
get<catalogComponents["schemas"]["SeriesHalResource"]>(
`https://psapi.nrk.no/radio/catalog/series/${seriesId}`,
),
]);
}
if ( if (
episodeStatus === OK && seriesStatus === OK && episodeStatus === OK && seriesStatus === OK &&
serieResponse?.series && episodeResponse?._embedded.episodes?.length serieResponse?.series && episodeResponse?._embedded.episodes?.length
) { ) {
const episodes = await Promise.all( const episodes = await Promise.all(
episodeResponse._embedded.episodes.map((episode) => withDownloadLink(episode)), episodeResponse._embedded.episodes.map((episode) => withDownloadLink(episode, serieResponse.type)),
); );
return { return {
...serieResponse.series, ...serieResponse.series,
episodes, episodes,
}; };
} else {
throw `Error getting episodes for ${seriesId}: EpisodeStatus: ${episodeStatus}. SerieStatus: ${seriesStatus}`;
} }
throw `Error getting episodes for ${seriesId}: EpisodeStatus: ${episodeStatus}. SerieStatus: ${seriesStatus}`;
}, },
getEpisode: async (seriesId: string, episodeId: string): Promise<OriginalEpisode | null> => { getEpisode: async (seriesId: string, episodeId: string): Promise<OriginalEpisode | null> => {
const url = `https://psapi.nrk.no/radio/catalog/podcast/${seriesId}/episodes/${episodeId}`; const url = `https://psapi.nrk.no/radio/catalog/podcast/${seriesId}/episodes/${episodeId}`;