From 4eace3fb7e676572f87b03fb6c87c6b7648203e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C4=B1dvan=20Akca?= Date: Tue, 17 Oct 2023 13:00:43 +0300 Subject: [PATCH] feat(youtube): add new video in channel trigger --- packages/backend/src/apps/youtube/index.ts | 2 + .../src/apps/youtube/triggers/index.ts | 3 ++ .../triggers/new-video-in-channel/index.ts | 48 +++++++++++++++++++ packages/docs/pages/.vitepress/config.js | 5 +- packages/docs/pages/apps/youtube/triggers.md | 12 +++++ packages/docs/pages/guide/available-apps.md | 1 + 6 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 packages/backend/src/apps/youtube/triggers/index.ts create mode 100644 packages/backend/src/apps/youtube/triggers/new-video-in-channel/index.ts create mode 100644 packages/docs/pages/apps/youtube/triggers.md diff --git a/packages/backend/src/apps/youtube/index.ts b/packages/backend/src/apps/youtube/index.ts index e95b147b..0f9a0ef4 100644 --- a/packages/backend/src/apps/youtube/index.ts +++ b/packages/backend/src/apps/youtube/index.ts @@ -1,6 +1,7 @@ import defineApp from '../../helpers/define-app'; import addAuthHeader from './common/add-auth-header'; import auth from './auth'; +import triggers from './triggers'; export default defineApp({ name: 'Youtube', @@ -13,4 +14,5 @@ export default defineApp({ supportsConnections: true, beforeRequest: [addAuthHeader], auth, + triggers, }); diff --git a/packages/backend/src/apps/youtube/triggers/index.ts b/packages/backend/src/apps/youtube/triggers/index.ts new file mode 100644 index 00000000..97cc2136 --- /dev/null +++ b/packages/backend/src/apps/youtube/triggers/index.ts @@ -0,0 +1,3 @@ +import newVideoInChannel from './new-video-in-channel'; + +export default [newVideoInChannel]; 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 new file mode 100644 index 00000000..1ff495b6 --- /dev/null +++ b/packages/backend/src/apps/youtube/triggers/new-video-in-channel/index.ts @@ -0,0 +1,48 @@ +import defineTrigger from '../../../../helpers/define-trigger'; + +export default defineTrigger({ + name: 'New video in channel', + key: 'newVideoInChannel', + description: + 'Triggers when a new video is published to a specific Youtube channel.', + arguments: [ + { + label: 'Channel ID', + key: 'channelId', + type: 'string' as const, + required: true, + description: + 'Get the new videos uploaded to this channel. If the URL of the youtube channel looks like this www.youtube.com/channel/UCbxb2fqe9oNgglAoYqsYOtQ then you must use UCbxb2fqe9oNgglAoYqsYOtQ as a value in this field.', + variables: true, + }, + ], + + async run($) { + const channelId = $.step.parameters.channelId as string; + + const params = { + pageToken: undefined as unknown as string, + part: 'snippet', + channelId: channelId, + 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/docs/pages/.vitepress/config.js b/packages/docs/pages/.vitepress/config.js index c768a220..11e5c795 100644 --- a/packages/docs/pages/.vitepress/config.js +++ b/packages/docs/pages/.vitepress/config.js @@ -415,7 +415,10 @@ export default defineConfig({ text: 'Youtube', collapsible: true, collapsed: true, - items: [{ text: 'Connection', link: '/apps/youtube/connection' }], + items: [ + { text: 'Triggers', link: '/apps/youtube/triggers' }, + { text: 'Connection', link: '/apps/youtube/connection' }, + ], }, ], '/': [ diff --git a/packages/docs/pages/apps/youtube/triggers.md b/packages/docs/pages/apps/youtube/triggers.md new file mode 100644 index 00000000..c0372ace --- /dev/null +++ b/packages/docs/pages/apps/youtube/triggers.md @@ -0,0 +1,12 @@ +--- +favicon: /favicons/youtube.svg +items: + - name: New video in channel + desc: Triggers when a new video is published to a specific Youtube channel. +--- + + + + diff --git a/packages/docs/pages/guide/available-apps.md b/packages/docs/pages/guide/available-apps.md index aaf04bfb..8b6a0d9c 100644 --- a/packages/docs/pages/guide/available-apps.md +++ b/packages/docs/pages/guide/available-apps.md @@ -43,3 +43,4 @@ The following integrations are currently supported by Automatisch. - [Typeform](/apps/typeform/triggers) - [Webhooks](/apps/webhooks/triggers) - [WordPress](/apps/wordpress/triggers) +- [Youtube](/apps/youtube/triggers)