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

  • 2
    Like
  • 0
    Comment

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

方法

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

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

url
https://www.instagram.com/<userid>/media
https://www.instagram.com/daikiojm/media

全件取得するには

随分と雑ですが、全件取得してみました。
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/media';
const allItems = [];

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

getMedia();

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

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

スクリーンショット 2017-11-06 13.35.17.png

 終わりに

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