83 lines
No EOL
5 KiB
TypeScript
83 lines
No EOL
5 KiB
TypeScript
'use server'
|
|
|
|
import { NextRequest, NextResponse } from 'next/server'
|
|
|
|
export async function POST(request: NextRequest) {
|
|
try {
|
|
const { region = 'VN' } = await request.json()
|
|
|
|
const regionTopics: Record<string, any[]> = {
|
|
VN: [
|
|
{ hashtag: '#foodchallenge', desc: 'Thử thách 24 giờ chỉ ăn một món 🍜', usernames: ['anvlog', 'foodie.vn', 'monanvn', 'nauananh'] },
|
|
{ hashtag: '#tech', desc: 'Mua đồ công nghệ giá rẻ ở đâu? 🛒', usernames: ['techreview', 'dienthoaivui', 'congnghe247'] },
|
|
{ hashtag: '#beauty', desc: 'Hướng dẫn make-up tự nhiên cho người mới 💄', usernames: ['lamdep365', 'beautyqueen', 'trangdiem'] },
|
|
{ hashtag: '#fashion', desc: 'Phong cách thời trang mùa hè 2024 👗', usernames: ['fashionista', 'thoitrangvn', 'baochi'] },
|
|
{ hashtag: '#fitness', desc: 'Bí quyết tập gym tại nhà cho người bận rộn 💪', usernames: ['fitlife', 'gymhome', 'workoutvn'] },
|
|
{ hashtag: '#travel', desc: 'Du lịch Việt Nam - Đà Lạt mùa hoa lavender 🌸', usernames: ['dulichvn', 'travelblog', 'xuhuong'] },
|
|
{ hashtag: '#dance', desc: 'Dance challenge tuần này 🕺💃', usernames: ['dancelover', 'nhaycue', 'beatvn'] },
|
|
{ hashtag: '#comedy', desc: 'Hài hước mỗi ngày - Tiếu nhân nhà giàu 😆', usernames: ['funnyvn', 'haivuive', 'mcodinguyen'] },
|
|
{ hashtag: '#recipe', desc: 'Nấu ăn ngon cho cả nhà - Món ngon mỗi ngày 🍳', usernames: ['chefhome', 'nauanngon', 'maicook'] },
|
|
{ hashtag: '#motivation', desc: 'Truyền động lực mỗi sáng - Đừng bỏ cuộc 🔥', usernames: ['motivation', 'tuluc', 'camhung'] },
|
|
],
|
|
US: [
|
|
{ hashtag: '#food', desc: 'What I eat in a day 🍕', usernames: ['foodie', 'cooking_with_emma'] },
|
|
{ hashtag: '#fitness', desc: 'Gym routine that actually works 💪', usernames: ['fitness_journey', 'gymrat'] },
|
|
{ hashtag: '#dance', desc: 'New dance challenge 🕺💃', usernames: ['dance_vibes', ' choreography_'] },
|
|
{ hashtag: '#comedy', desc: 'POV: When Monday hits different 😆', usernames: ['comedy_central', 'relatable'] },
|
|
{ hashtag: '#travel', desc: 'Best hidden gems in [City] ✈️', usernames: ['travel_guides', 'wanderlust'] },
|
|
{ hashtag: '#fashion', desc: 'Summer fashion inspo 2024 👗', usernames: ['fashion_inspo', 'style_daily'] },
|
|
{ hashtag: '#beauty', desc: 'Simple daily makeup routine 💄', usernames: ['beauty_tips', 'glow_getter'] },
|
|
{ hashtag: '#lifestyle', desc: 'Day in my life vlog 📹', usernames: ['vlog_life', 'daily_vibes'] },
|
|
{ hashtag: '#recipe', desc: 'Easy recipe for beginners 🍳', usernames: ['cooking_101', 'chef_mike'] },
|
|
{ hashtag: '#pets', desc: 'My pet doing the funniest thing 🐕', usernames: ['pet_life', 'furparent'] },
|
|
],
|
|
GLOBAL: [
|
|
{ hashtag: '#food', desc: 'Best food from my country 🍜', usernames: ['global_foodie'] },
|
|
{ hashtag: '#travel', desc: 'Traveling the world on a budget ✈️', usernames: ['wanderworld'] },
|
|
{ hashtag: '#dance', desc: 'Viral dance challenge 2024 🕺', usernames: ['danceworld'] },
|
|
{ hashtag: '#fitness', desc: 'Home workout no equipment 💪', usernames: ['fit_home'] },
|
|
{ hashtag: '#comedy', desc: 'Things only [ nationality ] understand 😆', usernames: ['comedy_world'] },
|
|
{ hashtag: '#fashion', desc: 'Street style looks 👗', usernames: ['streetstyle'] },
|
|
{ hashtag: '#beauty', desc: 'Skincare routine for beginners 💄', usernames: ['glow_essentials'] },
|
|
{ hashtag: '#music', desc: 'Original song cover 🎵', usernames: ['cover_singer'] },
|
|
{ hashtag: '#nature', desc: 'Most beautiful places on Earth 🌄', usernames: ['nature_finds'] },
|
|
{ hashtag: '#art', desc: 'Digital art process 🎨', usernames: ['digital_art'] },
|
|
],
|
|
}
|
|
|
|
const topics = regionTopics[region] || regionTopics.GLOBAL
|
|
|
|
const videos = topics.map((topic, i) => {
|
|
const username = topic.usernames[Math.floor(Math.random() * topic.usernames.length)]
|
|
const playCount = Math.floor(Math.random() * 5000000) + 500000
|
|
const likeCount = Math.floor(playCount * (0.15 + Math.random() * 0.2))
|
|
|
|
return {
|
|
id: `${region}${Date.now()}${i}`,
|
|
url: `https://www.tiktok.com/@${username}/video/${region}${i}`,
|
|
thumbnail: `https://picsum.photos/seed/trending${region}${i}/360/640`,
|
|
caption: `${topic.desc} ${topic.hashtag}`,
|
|
playCount,
|
|
likeCount,
|
|
commentCount: Math.floor(likeCount * 0.02),
|
|
shareCount: Math.floor(likeCount * 0.01),
|
|
authorName: username,
|
|
authorAvatar: `https://api.dicebear.com/7.x/initials/svg?seed=${username}`,
|
|
hashtags: [topic.hashtag],
|
|
}
|
|
})
|
|
|
|
return NextResponse.json({
|
|
videos,
|
|
region,
|
|
count: videos.length,
|
|
source: 'generated'
|
|
})
|
|
} catch (error: any) {
|
|
console.error('API error:', error)
|
|
return NextResponse.json({
|
|
videos: [],
|
|
error: error.message
|
|
}, { status: 500 })
|
|
}
|
|
} |