diff --git a/.env.example b/.env.example index 20a8ec0..a6aa602 100644 --- a/.env.example +++ b/.env.example @@ -9,7 +9,3 @@ ADMIN_PASS=DEIN-SICHERES-PASSWORT # Ollama KI-Modell (optional, Standard: mistral) # OLLAMA_MODEL=mistral - -# Instagram oEmbed Token (optional, für Instagram Reels Extraktion) -# Benötigt ein Facebook App Access Token -# INSTAGRAM_TOKEN=dein-token-hier diff --git a/backend/routes/recipes.js b/backend/routes/recipes.js index 23c84a6..ab659c8 100644 --- a/backend/routes/recipes.js +++ b/backend/routes/recipes.js @@ -4,7 +4,6 @@ import { updateRecipe, deleteRecipe, getCategories, getDb } from '../db.js'; import { getTikTokData } from '../services/tiktok.js'; -import { getInstagramData } from '../services/instagram.js'; import { isOllamaAvailable, extractRecipe } from '../services/ai.js'; import { trackEvent } from '../analytics-db.js'; @@ -111,43 +110,4 @@ router.post('/from-tiktok', async (req, res) => { } }); -router.post('/from-instagram', async (req, res) => { - try { - const { url } = req.body; - if (!url) return res.status(400).json({ error: 'URL erforderlich' }); - - const instagramData = await getInstagramData(url); - - const ollamaAvailable = await isOllamaAvailable(); - let extracted = null; - let aiStatus = ollamaAvailable ? 'available' : 'unavailable'; - - let aiMessage = ''; - if (ollamaAvailable && instagramData.title) { - try { - extracted = await extractRecipe(instagramData.title); - aiStatus = 'success'; - } catch (e) { - console.error('Ollama Extraktion fehlgeschlagen:', e.message); - aiStatus = 'error'; - aiMessage = e.message; - } - } else if (!ollamaAvailable) { - aiMessage = 'Ollama-Server nicht erreichbar'; - } else if (!instagramData.title) { - aiMessage = 'Kein Titel im Video gefunden'; - } - - res.json({ - instagram: instagramData, - ollama: ollamaAvailable, - aiStatus, - aiMessage, - extracted, - }); - } catch (error) { - res.status(500).json({ error: error.message }); - } -}); - export default router; diff --git a/backend/services/instagram.js b/backend/services/instagram.js deleted file mode 100644 index f494f06..0000000 --- a/backend/services/instagram.js +++ /dev/null @@ -1,39 +0,0 @@ -const INSTAGRAM_TOKEN = process.env.INSTAGRAM_TOKEN; - -export async function getInstagramData(url) { - const reelMatch = url.match(/instagram\.com\/(?:p|reel)\/([A-Za-z0-9_-]+)/); - const usernameMatch = url.match(/instagram\.com\/([^/]+)\//); - - if (INSTAGRAM_TOKEN) { - try { - const oembedUrl = `https://graph.facebook.com/v18.0/instagram_oembed?url=${encodeURIComponent(url)}&fields=author_name,thumbnail_url,title,html&access_token=${INSTAGRAM_TOKEN}`; - const response = await fetch(oembedUrl); - if (response.ok) { - const data = await response.json(); - return { - title: data.title || '', - author: data.author_name || '', - authorUrl: `https://www.instagram.com/${data.author_name || ''}`, - thumbnail: data.thumbnail_url || '', - embedHtml: data.html || '', - reelId: reelMatch ? reelMatch[1] : null, - }; - } - } catch (e) { - console.error('Instagram oEmbed Fehler:', e.message); - } - } - - return { - title: '', - author: usernameMatch ? usernameMatch[1] : '', - authorUrl: usernameMatch ? `https://www.instagram.com/${usernameMatch[1]}` : '', - thumbnail: '', - embedHtml: '', - reelId: reelMatch ? reelMatch[1] : null, - }; -} - -export function isInstagramUrl(url) { - return /instagram\.com\/(p|reel)\//.test(url); -} diff --git a/docker-compose.yml b/docker-compose.yml index efb4a11..a844d74 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -18,7 +18,6 @@ services: - JWT_SECRET=${JWT_SECRET} - ADMIN_USER=${ADMIN_USER:-admin} - ADMIN_PASS=${ADMIN_PASS} - - INSTAGRAM_TOKEN=${INSTAGRAM_TOKEN:-} volumes: - ./data:/app/data depends_on: diff --git a/frontend/src/api.js b/frontend/src/api.js index 46fd2d4..f4ff1b1 100644 --- a/frontend/src/api.js +++ b/frontend/src/api.js @@ -52,13 +52,6 @@ export async function extractFromTikTok(url) { }); } -export async function extractFromInstagram(url) { - return apiFetch(`${API_BASE}/from-instagram`, { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ url }), - }); -} export async function fetchCategories() { return apiFetch(`${API_BASE}/categories`); diff --git a/frontend/src/components/RecipeCard.jsx b/frontend/src/components/RecipeCard.jsx index bd921f7..3d39cd5 100644 --- a/frontend/src/components/RecipeCard.jsx +++ b/frontend/src/components/RecipeCard.jsx @@ -28,7 +28,7 @@ export default function RecipeCard({ recipe }) {
)}Keine Rezepte gefunden
- Füge dein erstes Rezept über TikTok- oder Instagram-Links hinzu! + Füge dein erstes Rezept über TikTok-Links hinzu!