LoginSignup
9
6

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-11-06

今回紹介する方法は、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以降を取得するように次のリクエストを行っています。

スクリーンショット 2017-11-30 13.02.40.png

 終わりに

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

参考

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

9
6
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
6