今回紹介する方法は、InstagramのAPIではなく、Instagramのユーザーページからユーザータイムラインの情報を取得する方法です。
方法
ユーザータイムラインの取得
以下のURLをGETすると、<userid>
に指定したユーザーの最新の投稿20件とそれに紐づくコメントなどの情報がjson形式で取得できます。
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