DEV Community

loading...
Cover image for Create an Instagram downloader API with Nodejs

Create an Instagram downloader API with Nodejs

h_mobarakian
nodejs developer
・2 min read

Hi, I'm Hossein, In this article, I'll show you how to create your Nodejs Instagram photo and image downloader.
To start our project we need to install dependencies:
npm init
npm install node-html-parser axios

After installation dependencies have done, Create an index.js file and put the codes below into it:

const axios = require('axios');
const { parse } = require("node-html-parser");

const instagramPostLink = "https://www.instagram.com/p/CD5um-vHA33/";

async function getPostLink(url) {

  url = url + 'embed' + '/captioned';


  let res = axios.get(url).then(async (response) => {
    const root = parse(response.data);

    let link = "";
    if (response.data.search("video_url") != -1)
      link = getVideoLinkFromHtml(response.data);
    else
      link = root.querySelector('img.EmbeddedMediaImage').getAttribute("src");





    while (link.search("&") != -1) {
      link = link.replace("&", "&");
    }
    let caption =await getCaptionFromHtml(response.data);

    return {link,caption};

  });

  return res;

}

async function getCaption(url) {


  url = url + 'embed' + '/captioned';

  let res = axios.get(url).then((response) => {

    let caption= getCaptionFromHtml(response.data);

    return caption;

  });

  return res;

}

async function getCaptionFromHtml(html) {


  const root = parse(html);

  let caption=root.querySelector('.Caption')?.text;
  if(caption == undefined)
      caption="No caption";

  caption=caption.replace("view all comments","");
  return caption;

}

function getVideoLinkFromHtml(html) {
  let crop = "{\"" + html.substring(html.search("video_url"), html.search("video_url") + 1000);

  crop = crop.substring(0, crop.search(",")) + "}";

  return JSON.parse(crop).video_url;
}

(async ()=>{
    await getPostLink(instagramPostLink);
})();

Enter fullscreen mode Exit fullscreen mode

Some trouble with download the Instagram app is it needs a login, So we are use the embed Instagram posts to download that.
And Instagram can't block this way, Because so many sites use that.

Do you like to create animated emojis for your website? Click this link.

Discussion (2)

Collapse
hosseinmobarakian profile image
h_mobarakian Author

Thank you.