summaryrefslogtreecommitdiff
path: root/src/routes/api
diff options
context:
space:
mode:
Diffstat (limited to 'src/routes/api')
-rw-r--r--src/routes/api/channel/[id]/+server.ts18
-rw-r--r--src/routes/api/playlist/+server.ts23
-rw-r--r--src/routes/api/related/[id]/+server.ts19
-rw-r--r--src/routes/api/search/+server.ts18
-rw-r--r--src/routes/api/trending/+server.ts13
-rw-r--r--src/routes/api/video/[id]/+server.ts18
6 files changed, 109 insertions, 0 deletions
diff --git a/src/routes/api/channel/[id]/+server.ts b/src/routes/api/channel/[id]/+server.ts
new file mode 100644
index 0000000..c9aa67f
--- /dev/null
+++ b/src/routes/api/channel/[id]/+server.ts
@@ -0,0 +1,18 @@
+import { json } from '@sveltejs/kit';
+import { getChannel } from '$lib/server/ytdlp';
+import type { RequestHandler } from './$types';
+
+export const GET: RequestHandler = async ({ params }) => {
+ const { id } = params;
+ if (!id) {
+ return json({ error: 'Missing channel ID' }, { status: 400 });
+ }
+
+ try {
+ const channel = await getChannel(id);
+ return json(channel);
+ } catch (e) {
+ console.error('Channel fetch error:', e);
+ return json({ error: 'Failed to fetch channel' }, { status: 500 });
+ }
+};
diff --git a/src/routes/api/playlist/+server.ts b/src/routes/api/playlist/+server.ts
new file mode 100644
index 0000000..b70ac26
--- /dev/null
+++ b/src/routes/api/playlist/+server.ts
@@ -0,0 +1,23 @@
+import { json } from '@sveltejs/kit';
+import { getPlaylist } from '$lib/server/ytdlp';
+import type { RequestHandler } from './$types';
+
+export const GET: RequestHandler = async ({ url }) => {
+ const playlistUrl = url.searchParams.get('url');
+ if (!playlistUrl) {
+ return json({ error: 'Missing playlist URL' }, { status: 400 });
+ }
+
+ // Validate it's a YouTube playlist URL
+ if (!playlistUrl.includes('youtube.com/playlist') && !playlistUrl.includes('list=')) {
+ return json({ error: 'Invalid YouTube playlist URL' }, { status: 400 });
+ }
+
+ try {
+ const playlist = await getPlaylist(playlistUrl);
+ return json(playlist);
+ } catch (e) {
+ console.error('Playlist fetch error:', e);
+ return json({ error: 'Failed to fetch playlist' }, { status: 500 });
+ }
+};
diff --git a/src/routes/api/related/[id]/+server.ts b/src/routes/api/related/[id]/+server.ts
new file mode 100644
index 0000000..9fcd9c3
--- /dev/null
+++ b/src/routes/api/related/[id]/+server.ts
@@ -0,0 +1,19 @@
+import { json } from '@sveltejs/kit';
+import { getVideo, getRelatedVideos } from '$lib/server/ytdlp';
+import type { RequestHandler } from './$types';
+
+export const GET: RequestHandler = async ({ params }) => {
+ const { id } = params;
+ if (!id) {
+ return json({ error: 'Missing video ID' }, { status: 400 });
+ }
+
+ try {
+ const video = await getVideo(id);
+ const related = await getRelatedVideos(video.title, id);
+ return json(related);
+ } catch (e) {
+ console.error('Related videos fetch error:', e);
+ return json({ error: 'Failed to fetch related videos' }, { status: 500 });
+ }
+};
diff --git a/src/routes/api/search/+server.ts b/src/routes/api/search/+server.ts
new file mode 100644
index 0000000..57bf347
--- /dev/null
+++ b/src/routes/api/search/+server.ts
@@ -0,0 +1,18 @@
+import { json } from '@sveltejs/kit';
+import { search } from '$lib/server/ytdlp';
+import type { RequestHandler } from './$types';
+
+export const GET: RequestHandler = async ({ url }) => {
+ const query = url.searchParams.get('q');
+ if (!query) {
+ return json({ error: 'Missing query parameter' }, { status: 400 });
+ }
+
+ try {
+ const results = await search(query);
+ return json(results);
+ } catch (e) {
+ console.error('Search error:', e);
+ return json({ error: 'Search failed' }, { status: 500 });
+ }
+};
diff --git a/src/routes/api/trending/+server.ts b/src/routes/api/trending/+server.ts
new file mode 100644
index 0000000..b19ed21
--- /dev/null
+++ b/src/routes/api/trending/+server.ts
@@ -0,0 +1,13 @@
+import { json } from '@sveltejs/kit';
+import { getTrending } from '$lib/server/ytdlp';
+import type { RequestHandler } from './$types';
+
+export const GET: RequestHandler = async () => {
+ try {
+ const videos = await getTrending();
+ return json(videos);
+ } catch (e) {
+ console.error('Trending fetch error:', e);
+ return json({ error: 'Failed to fetch trending' }, { status: 500 });
+ }
+};
diff --git a/src/routes/api/video/[id]/+server.ts b/src/routes/api/video/[id]/+server.ts
new file mode 100644
index 0000000..9a64c36
--- /dev/null
+++ b/src/routes/api/video/[id]/+server.ts
@@ -0,0 +1,18 @@
+import { json } from '@sveltejs/kit';
+import { getVideo } from '$lib/server/ytdlp';
+import type { RequestHandler } from './$types';
+
+export const GET: RequestHandler = async ({ params }) => {
+ const { id } = params;
+ if (!id) {
+ return json({ error: 'Missing video ID' }, { status: 400 });
+ }
+
+ try {
+ const video = await getVideo(id);
+ return json(video);
+ } catch (e) {
+ console.error('Video fetch error:', e);
+ return json({ error: 'Failed to fetch video' }, { status: 500 });
+ }
+};