Instagramで特定のユーザーのタイムラインをjsonで取得する(認証不要)


今回紹介する方法は、InstagramのAPIではなく、Instagramのユーザーページからユーザータイムラインの情報を取得する方法です。

方法

ユーザータイムラインの取得

以下のURLをGETすると、<userid>に指定したユーザーの最新の投稿20件とそれに紐づくコメントなどの情報がjson形式で取得できます。

url
https://www.instagram.com/<userid>/?__a=1
https://www.instagram.com/daikiojm/?__a=1

全件取得するには

随分と雑ですが、全件取得してみました。
APIで取得する際には、countやmax_id、min_idなどを指定して取得件数を操作できるようですが、APIを使わないこの方法ではcountパラメータは使えないようです。
max_idパラメータは使えるようなので、node.jsで再帰的に全件取得する方法を試してみました。

'use strict';
const request = require('request');

const url = 'https://www.instagram.com/daikiojm/?__a=1';
const allItems = [];

const getMedia = (maxId) => {
  const requestUrl =  maxId ? `${url}&max_id=${maxId}` : url;
  request.get(requestUrl, (err, data) => {
    if (!err) {
      const json = JSON.parse(data.body);
      const media = json.user.media; 
      media.nodes.forEach(elm => {
        allItems.push(elm);
      });
      if (media.page_info.has_next_page) {
        getMedia(media.nodes[media.nodes.length - 1].id);
      } else {
        return console.log(allItems);
      }
    } else {
      console.log(err);
    }
  });
}

getMedia();

※ 試しに使ってるユーザーは自分のユーザーです

1件のリクエストで取得できるjsonの形式は次のような形式になっており、
media.page_info. has_next_pageフラグがtrueの場合、最後のitem以降を取得するように次のリクエストを行っています。

 終わりに

ひとまず公開ユーザーのユーザー名から投稿内容を取得することが出来ました。
API ドキュメントを探してみましたが、今回紹介した内容に関する情報の記載が見当たりませんでした。(知っている方がいたら教えてほしいです)
公式な方法なのか定かではないので、ガッツリ使う場合は開発者登録を行った後、APIの方を叩くのがいいかと思います。

参考

Instagram.com/username/media no longer working -StackOverflow