diff --git a/packages/backend/src/apps/youtube/triggers/index.ts b/packages/backend/src/apps/youtube/triggers/index.ts index 97cc2136..21aad966 100644 --- a/packages/backend/src/apps/youtube/triggers/index.ts +++ b/packages/backend/src/apps/youtube/triggers/index.ts @@ -1,3 +1,4 @@ import newVideoInChannel from './new-video-in-channel'; +import newVideoBySearch from './new-video-by-search'; -export default [newVideoInChannel]; +export default [newVideoBySearch, newVideoInChannel]; diff --git a/packages/backend/src/apps/youtube/triggers/new-video-by-search/index.ts b/packages/backend/src/apps/youtube/triggers/new-video-by-search/index.ts new file mode 100644 index 00000000..c61cb6fe --- /dev/null +++ b/packages/backend/src/apps/youtube/triggers/new-video-by-search/index.ts @@ -0,0 +1,47 @@ +import defineTrigger from '../../../../helpers/define-trigger'; + +export default defineTrigger({ + name: 'New video by search', + key: 'newVideoBySearch', + description: + 'Triggers when a new video is uploaded that matches a specific search string.', + arguments: [ + { + label: 'Query', + key: 'query', + type: 'string' as const, + required: true, + description: 'Search for videos that match this query.', + variables: true, + }, + ], + + async run($) { + const query = $.step.parameters.query; + + const params = { + pageToken: undefined as unknown as string, + part: 'snippet', + q: query, + maxResults: 50, + order: 'date', + type: 'video', + }; + + do { + const { data } = await $.http.get('/v3/search', { params }); + params.pageToken = data.nextPageToken; + + if (data?.items?.length) { + for (const item of data.items) { + $.pushTriggerItem({ + raw: item, + meta: { + internalId: item.etag, + }, + }); + } + } + } while (params.pageToken); + }, +}); diff --git a/packages/backend/src/apps/youtube/triggers/new-video-in-channel/index.ts b/packages/backend/src/apps/youtube/triggers/new-video-in-channel/index.ts index 1ff495b6..440a0972 100644 --- a/packages/backend/src/apps/youtube/triggers/new-video-in-channel/index.ts +++ b/packages/backend/src/apps/youtube/triggers/new-video-in-channel/index.ts @@ -7,7 +7,7 @@ export default defineTrigger({ 'Triggers when a new video is published to a specific Youtube channel.', arguments: [ { - label: 'Channel ID', + label: 'Channel', key: 'channelId', type: 'string' as const, required: true, diff --git a/packages/docs/pages/apps/youtube/triggers.md b/packages/docs/pages/apps/youtube/triggers.md index c0372ace..f0a80c1b 100644 --- a/packages/docs/pages/apps/youtube/triggers.md +++ b/packages/docs/pages/apps/youtube/triggers.md @@ -3,6 +3,8 @@ favicon: /favicons/youtube.svg items: - name: New video in channel desc: Triggers when a new video is published to a specific Youtube channel. + - name: New video by search + desc: Triggers when a new video is uploaded that matches a specific search string. ---