Sylvatica.

Back to Library

Scrape Instagram

js 1/26/2026
9
const axios = require('axios');
const qs = require('qs');
const cheerio = require('cheerio');

async function instadl(url) {
    let data = qs.stringify({
        'url': url,
        'v': '3',
        'lang': 'en'
    });

    let config = {
        method: 'POST',
        url: 'https://api.downloadgram.org/media',
        headers: {
            'User-Agent': 'Mozilla/5.0 (Android 10; Mobile; rv:131.0) Gecko/131.0 Firefox/131.0',
            'Content-Type': 'application/x-www-form-urlencoded',
            'accept-language': 'id-ID',
            'referer': 'https://downloadgram.org/',
            'origin': 'https://downloadgram.org',
            'sec-fetch-dest': 'empty',
            'sec-fetch-mode': 'cors',
            'sec-fetch-site': 'same-site',
            'priority': 'u=0',
            'te': 'trailers'
        },
        data: data
    };

    try {
        const response = await axios.request(config);
        const $ = cheerio.load(response.data);
        let mediaInfo = {};

        if ($('video').length) {
            mediaInfo.videoUrl = $('video source').attr('src');
            mediaInfo.downloadUrl = $('a[download]').attr('href');
            mediaInfo.posterUrl = $('video').attr('poster');
        } else if ($('img').length) {
            mediaInfo.imageUrl = $('img').attr('src');
            mediaInfo.downloadUrl = $('a[download]').attr('href');
        }
        
        for (let key in mediaInfo) {
            if (mediaInfo.hasOwnProperty(key)) {
                mediaInfo[key] = mediaInfo[key].replace(/\\\\"/g, '').replace(/\\"/g, '');
            }
        }

        return mediaInfo;
    } catch (error) {
        console.error('Error:', error);
    }
}

module.exports = { instadl };