تخطَّ إلى المحتوى
ARAB CODEمجتمع المطورين العرب

Pinterest-Video-search

javascriptv1MITنُشر ١٩ أغسطس ٢٠٢٦· ♥ 0 · ⬇ 2 · 💬 0

بحث و تحميل فيديوهات من بينترست عادي تستخدمها في ايديت

/**
 * 🎬 Pinterest Video Search & Carousel
 * Developer: Monte Dev
 * ⏤͟͞ू⃪𝑵𝜩𝒁𝑼𝑲̤͝𝜣͓ۧٛ͢ ͝ 𝑩𝜣𝑻🍓
 */

import axios from 'axios';
import { generateWAMessageFromContent, prepareWAMessageMedia } from '@whiskeysockets/baileys';

// دالة البحث واستخراج الروابط من الـ API الخاص بك
async function fetchPinterestVideos(query, limit = 10) {
    const base = "https://www.pinterest.com";
    const searchQ = query.toLowerCase().includes('video') ? query : `${query} video`;
    
    // جلب ملفات تعريف الارتباط (Cookies)
    let csrf = "62203c66c1926631bb30ec65ec2f5d14";
    let cookieStr = "";
    try {
        let res = await axios.get(base);
        let setCookies = res.headers['set-cookie'] || [];
        cookieStr = setCookies.map(c => c.split(';')[0]).join('; ');
        let csrfMatch = cookieStr.match(/csrftoken=([^;]+)/);
        if (csrfMatch) csrf = csrfMatch[1];
    } catch (e) {}

    const source_url = `/search/pins/?q=${encodeURIComponent(searchQ)}&rs=typed`;
    const dataStr = new URLSearchParams({
        source_url: source_url,
        data: JSON.stringify({
            options: { query: searchQ, scope: "pins", auto_correction_disabled: false },
            context: {}
        })
    }).toString();

    try {
        // البحث عن الـ IDs
        let searchRes = await axios.post(`${base}/resource/BaseSearchResource/get/`, dataStr, {
            headers: {
                'cookie': cookieStr,
                'x-csrftoken': csrf,
                'x-requested-with': 'XMLHttpRequest',
                'Content-Type': 'application/x-www-form-urlencoded',
                'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
            }
        });

        const rawText = typeof searchRes.data === 'string' ? searchRes.data : JSON.stringify(searchRes.data);
        const matches = rawText.match(/"id":"(\d{10,})"/g) || [];
        let uniqueIds = [...new Set(matches.map(m => m.replace(/"id":"|"/g, '')))];

        let results = [];
        for (let id of uniqueIds) {
            if (results.length >= limit) break; // التوقف عند الوصول للعدد المطلوب
            
            try {
                let pageUrl = `https://www.pinterest.com/pin/${id}/`;
                // استخدام الـ API الخاص بـ Monte Dev
                let apiUrl = `https://www.monte-dev.online/api/download/pinterest-downloader?url=${encodeURIComponent(pageUrl)}`;
                let apiRes = await axios.get(apiUrl, { timeout: 10000 });
                
                if (apiRes.data && apiRes.data.success && apiRes.data.type === 'video') {
                    results.push({
                        title: apiRes.data.title || 'بدون عنوان',
                        page_url: pageUrl,
                        video_url: apiRes.data.download
                    });
                }
            } catch (e) {
                continue; // تخطي في حال فشل الفحص
            }
        }
        return results;
    } catch (e) {
        console.error('Pinterest Search Error:', e);
        return [];
    }
}

const handler = async (m, { conn, text, usedPrefix, command }) => {
    if (!text) {
        return m.reply(`🚩 *يرجى إدخال كلمة البحث!*\nمثال: ${usedPrefix + command} انمي`);
    }

    await m.react('⏳');
    await m.reply('🥝 *جاري البحث و التحمـيل يرجى الانتظـار و الصلاه على نبينا محمد.....*');

    try {
        // جلب الفيديوهات (الحد الأقصى 10 كما طلبت)
        const videos = await fetchPinterestVideos(text, 10);

        if (videos.length === 0) {
            await m.react('❌');
            return m.reply('⚠️ *لم يتم العثور على أي فيديوهات مطابقة.*');
        }

        let cards = [];
        
        // بناء الشريط التفاعلي (Carousel)
        for (let vid of videos) {
            try {
                // تجهيز الفيديو كرسالة ميديا (يتم رفعه لسيرفر واتساب)
                let media = await prepareWAMessageMedia({ video: { url: vid.video_url } }, { upload: conn.waUploadToServer });
                
                cards.push({
                    header: {
                        hasMediaAttachment: true,
                        videoMessage: media.videoMessage
                    },
                    body: { 
                        text: `🎬 *العنوان:* ${vid.title.substring(0, 60)}...\n🔗 *الصفحة:* ${vid.page_url}` 
                    },
                    nativeFlowMessage: {
                        buttons: [
                            {
                                name: "cta_url",
                                buttonParamsJson: JSON.stringify({
                                    display_text: "📥 تحميل مباشر",
                                    url: vid.video_url,
                                    merchant_url: vid.video_url
                                })
                            }
                        ]
                    }
                });
            } catch (err) {
                console.error('فشل في تجهيز أحد الفيديوهات:', err);
            }
        }

        if (cards.length === 0) {
            return m.reply('❌ *حدث خطأ أثناء معالجة الفيديوهات للرسالة التفاعلية.*');
        }

        // إرسال الكاروسيل
        const msg = generateWAMessageFromContent(m.chat, {
            viewOnceMessage: {
                message: {
                    messageContextInfo: {
                        deviceListMetadata: {},
                        deviceListMetadataVersion: 2
                    },
                    interactiveMessage: {
                        body: {
                            text: `*🎯 نتائج بحث فيديوهات بينترست*\n🔎 *البحث:* ${text}\n📊 *العدد:* ${cards.length}\n\n*⏤͟͞ू⃪𝑵𝜩𝒁𝑼𝑲̤͝𝜣͓ۧٛ͢ ͝ 𝑩𝜣𝑻🍓*`
                        },
                        carouselMessage: {
                            cards: cards
                        }
                    }
                }
            }
        }, { quoted: m });

        await conn.relayMessage(m.chat, msg.message, { messageId: msg.key.id });
        await m.react('✅');

    } catch (error) {
        console.error(error);
        await m.react('❌');
        m.reply(`⚠️ *حدث خطأ:* ${error.message}`);
    }
};

handler.help = ['فيديو-بين <كلمة البحث>'];
handler.tags = ['search', 'downloader'];
handler.command = /^(فيديو-بين|بحث-فيديو|pvs)$/i;

export default handler;

التعليقات (0)

سجّل الدخول للتعليق.