v0.2/multi-origin-website #72
|
@ -1,12 +1,15 @@
|
|||
import Layout from "@/components/Layout";
|
||||
|
||||
import Home from "@/components/Pages/Home";
|
||||
import { VideoAgent } from "@/utils/agent";
|
||||
|
||||
import { fetchGalleryData } from '@/utils/scrape/xvideos/gallery';
|
||||
import { getPlatformCookie } from "@/utils/cookies/read";
|
||||
|
||||
export default async function HomePage() {
|
||||
|
||||
const data = await fetchGalleryData()
|
||||
const platform = await getPlatformCookie()
|
||||
|
||||
const data = await new VideoAgent(platform).getGallery()
|
||||
|
||||
return (
|
||||
<Layout>
|
||||
|
|
|
@ -2,11 +2,14 @@ import Layout from "@/components/Layout";
|
|||
|
||||
import Search from "@/components/Pages/Search";
|
||||
|
||||
import { fetchGalleryData } from "@/utils/scrape/xvideos/gallery";
|
||||
import { VideoAgent } from "@/utils/agent";
|
||||
import { getPlatformCookie } from "@/utils/cookies/read";
|
||||
|
||||
export default async function SearchPage({ params }: { params: { query: string } }) {
|
||||
|
||||
const data = await fetchGalleryData({ query: params.query })
|
||||
const platform = await getPlatformCookie()
|
||||
|
||||
const data = await new VideoAgent(platform).getGallery({ query: params.query })
|
||||
|
||||
return <Layout>
|
||||
<Search data={data} query={decodeURIComponent(params.query)} />
|
||||
|
|
|
@ -6,10 +6,9 @@ import Video from "@/components/Pages/Video";
|
|||
|
||||
import { decodeVideoUrlPath } from '@/utils/string';
|
||||
|
||||
import { fetchVideoData } from '@/utils/scrape/xvideos/video';
|
||||
|
||||
import { useLocale } from 'next-intl';
|
||||
import { Platforms } from '@/meta/settings';
|
||||
import { VideoAgent } from '@/utils/agent';
|
||||
|
||||
export default async function VideoPage({ params }: { params: { platform: Platforms, id: string } }) {
|
||||
|
||||
|
@ -23,7 +22,9 @@ export default async function VideoPage({ params }: { params: { platform: Platfo
|
|||
|
||||
const decodedId = decodeVideoUrlPath(id)
|
||||
|
||||
const [data, related] = await fetchVideoData(decodedId)
|
||||
const [data, related] = await new VideoAgent(platform).getVideo(decodedId)
|
||||
|
||||
//const [data, related] = await fetchVideoData(decodedId)
|
||||
|
||||
if (!data.lowResUrl) {
|
||||
redirect(`/${locale}/404`)
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
import { Platforms } from "./settings"
|
||||
|
||||
export interface FetchParams {
|
||||
baseUrl?: string
|
||||
query?: string
|
||||
}
|
||||
|
||||
export interface GalleryData {
|
||||
videoUrl: string
|
||||
imgUrl: string
|
||||
|
|
|
@ -27,6 +27,7 @@ export enum Themes {
|
|||
}
|
||||
|
||||
export const DEFAULT_THEME = Themes.light
|
||||
export const DEFAULT_PLATFORM = Platforms.xvideos
|
||||
|
||||
export interface LangOption {
|
||||
label: string;
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
import { FetchParams, GalleryData, VideoData } from "@/meta/data";
|
||||
|
||||
import { Platforms } from "@/meta/settings";
|
||||
|
||||
import { fetchXVideosGalleryData } from "./scrape/xvideos/gallery";
|
||||
import { fetchXvideosVideoData } from "./scrape/xvideos/video";
|
||||
|
||||
export class VideoAgent {
|
||||
platform: Platforms;
|
||||
|
||||
constructor(platform: Platforms) {
|
||||
this.platform = platform
|
||||
}
|
||||
|
||||
public getGallery = async (params?: FetchParams): Promise<GalleryData[]> => {
|
||||
switch (this.platform) {
|
||||
case Platforms.xvideos:
|
||||
return await fetchXVideosGalleryData(params)
|
||||
default:
|
||||
return []
|
||||
}
|
||||
}
|
||||
|
||||
public getVideo = async (id: string, params?: FetchParams): Promise<[VideoData, GalleryData[]]> => {
|
||||
switch (this.platform) {
|
||||
case Platforms.xvideos:
|
||||
return await fetchXvideosVideoData(id, params)
|
||||
default:
|
||||
return [{ lowResUrl: '' }, []]
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,11 +1,17 @@
|
|||
'use server'
|
||||
|
||||
import { Cookies as AppCookies, DEFAULT_PLATFORM, Platforms } from '@/meta/settings';
|
||||
import { cookies } from 'next/headers'
|
||||
|
||||
export async function getCookie(name: string) {
|
||||
export async function getCookie(name: AppCookies) {
|
||||
return cookies().get(name);
|
||||
}
|
||||
|
||||
export async function hasCookie(name: string):Promise<boolean> {
|
||||
export async function hasCookie(name: AppCookies):Promise<boolean> {
|
||||
return cookies().has(name)
|
||||
}
|
||||
|
||||
export async function getPlatformCookie(): Promise<Platforms> {
|
||||
const platformCookie = await getCookie(AppCookies.platform)
|
||||
return platformCookie && platformCookie.value ? platformCookie.value as Platforms : DEFAULT_PLATFORM
|
||||
}
|
|
@ -1,12 +1,13 @@
|
|||
'use server'
|
||||
|
||||
import { Cookies as AppCookies } from '@/meta/settings';
|
||||
import { cookies } from 'next/headers'
|
||||
|
||||
export async function deleteCookie(name: string) {
|
||||
export async function deleteCookie(name: AppCookies) {
|
||||
cookies().delete(name)
|
||||
}
|
||||
|
||||
export async function setCookie(name: string, value: string) {
|
||||
export async function setCookie(name: AppCookies, value: string) {
|
||||
cookies().set(name, value, {
|
||||
sameSite: 'lax',
|
||||
secure: false
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { GalleryData } from '@/meta/data';
|
||||
import { FetchParams, GalleryData } from '@/meta/data';
|
||||
import axios, { AxiosError } from 'axios';
|
||||
|
||||
import * as cheerio from "cheerio";
|
||||
|
@ -6,12 +6,7 @@ import { getHeaders } from '../headers';
|
|||
import { getXVideosQueryUrl } from './url';
|
||||
import { Platforms } from '@/meta/settings';
|
||||
|
||||
interface FetchParams {
|
||||
baseUrl?: string
|
||||
query?: string
|
||||
}
|
||||
|
||||
export const fetchGalleryData = async (params?: FetchParams): Promise<GalleryData[]> => {
|
||||
export const fetchXVideosGalleryData = async (params?: FetchParams): Promise<GalleryData[]> => {
|
||||
|
||||
let data: GalleryData[] = [];
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { XVIDEOS_BASE_URL } from '@/constants/urls';
|
||||
import { GalleryData, VideoData } from '@/meta/data';
|
||||
import { FetchParams, GalleryData, VideoData } from '@/meta/data';
|
||||
|
||||
import axios, { AxiosError } from 'axios';
|
||||
|
||||
|
@ -7,12 +7,7 @@ import * as cheerio from "cheerio";
|
|||
import { findRelatedVideos, findVideoUrlInsideTagStringByFunctionNameAndExtension } from '../../string';
|
||||
import { getHeaders } from '../headers';
|
||||
|
||||
interface FetchParams {
|
||||
baseUrl?: string
|
||||
query?: string
|
||||
}
|
||||
|
||||
export const fetchVideoData = async (videoId: string, params?: FetchParams): Promise<[VideoData, GalleryData[]]> => {
|
||||
export const fetchXvideosVideoData = async (videoId: string, params?: FetchParams): Promise<[VideoData, GalleryData[]]> => {
|
||||
|
||||
let data: VideoData = {
|
||||
lowResUrl: ''
|
||||
|
|
Loading…
Reference in New Issue