feat: integrate Cloudinary image upload, Instagram Feed, and fix Next.js warnings
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
"use server";
|
||||
|
||||
export async function getInstagramPosts() {
|
||||
try {
|
||||
const response = await fetch('https://instagram120.p.rapidapi.com/api/instagram/posts?v=1', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'x-rapidapi-key': process.env.RAPIDAPI_KEY || '762dc41c1dmshc120ecf29aa240ap11dc66jsn87f410b870f5',
|
||||
'x-rapidapi-host': 'instagram120.p.rapidapi.com',
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify({ username: 'kozmosbeach', maxId: '' }),
|
||||
// CRITICAL ADIM: Veriyi 24 saat boyunca önbellekte tut (Saniye cinsinden: 24 * 60 * 60)
|
||||
next: { revalidate: 86400 }
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error("Instagram API request failed");
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
|
||||
// The RapidAPI endpoint usually returns an array of posts or { data: { items: [...] } }
|
||||
// Based on standard Instagram120 response, it returns { result: { edges: [{node: {}}] } }
|
||||
let posts = [];
|
||||
if (data && data.result && data.result.edges && Array.isArray(data.result.edges)) {
|
||||
posts = data.result.edges.map((edge: any) => edge.node);
|
||||
} else if (data && Array.isArray(data)) {
|
||||
posts = data;
|
||||
} else if (data && data.data && Array.isArray(data.data)) {
|
||||
posts = data.data;
|
||||
} else if (data && data.items && Array.isArray(data.items)) {
|
||||
posts = data.items;
|
||||
}
|
||||
|
||||
// Map to a cleaner format and take first 4
|
||||
const formattedPosts = posts.slice(0, 4).map((post: any) => {
|
||||
// Instagram API has multiple variants for post schema
|
||||
const id = post.id || post.pk;
|
||||
const code = post.code;
|
||||
|
||||
// Try to find the highest res image
|
||||
let imageUrl = "";
|
||||
if (post.image_versions2 && post.image_versions2.candidates) {
|
||||
imageUrl = post.image_versions2.candidates[0].url;
|
||||
} else if (post.carousel_media && post.carousel_media.length > 0) {
|
||||
imageUrl = post.carousel_media[0].image_versions2.candidates[0].url;
|
||||
} else if (post.display_url) {
|
||||
imageUrl = post.display_url;
|
||||
}
|
||||
|
||||
const caption = post.caption?.text || post.caption || "";
|
||||
const url = code ? `https://instagram.com/p/${code}` : `https://instagram.com/kozmosbeach`;
|
||||
|
||||
return {
|
||||
id,
|
||||
imageUrl,
|
||||
url,
|
||||
caption
|
||||
};
|
||||
});
|
||||
|
||||
return { success: true, data: formattedPosts };
|
||||
} catch (error) {
|
||||
console.error("Error fetching Instagram posts:", error);
|
||||
return { success: false, error: "Instagram gönderileri alınamadı." };
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user