Reputation: 1922
I would like to be able view all of the comments on any given piece of Instagram media, even if the media has over 150 comments. As of now, it is seemingly impossible to view more than the most recent 20 comments on a piece of media on the Instagram site and if one uses either the Instagram API Console or the Instagram API Libraries, the most recent 150 comments are returned with no options for pagination or viewing addition comments.
I first, of course, tried the documented media comment query in both the provided console and in my own environment. In both cases, a maximum of 150 comments were returned. Stumped, I began looking for more information online.
Having read over the Instagram API Documentation thoroughly, tested various endpoints in the Instagram API Console, and read various StackOverflow questions in the Instagram tag and Instagram API Google Group questions on several Instagram topics, I wondered if there was a chance of something being undocumented that I could try.
The user recent media endpoint documentation includes parameters for max_id
and max_timestamp
that allow for paging through the most recent media for any given user by retrieving the media that comes before said max_id
or max_timestamp
. Since each comment comes with created_time
and id
attributes, I attempted to add the parameters for max_id
and max_timestamp
(both on their own and together) for various comment IDs and timestamps in an attempt to page through comments. None of my attempts worked.
I am now at a standstill unless someone has another suggestion.
Using the Instagram API Console, I took the following steps in attempt to get all of the comments for this photo.
OAuth2
tokencoltonlhaynes
to obtain the user id: 9610843
9610843
to obtain the most recent mediaid: 698057751201132903_9610843
count: 1375
698057751201132903_9610843
to obtain most recent commentscreated time: 1397460230
id: 698269477955776593
698057751201132903_9610843
with the following additional query parameter strings in attempt to page through comments, but received the same results as step #6
?max_timestamp=1397460230
?max_id=698269477955776593
?max_timestamp=1397460230&max_id=698269477955776593
?max_id=698269477955776593&max_timestamp=1397460230
To my knowledge, there is no solution to this issue, but since the Instagram Development Team has stated that they will no longer be monitoring the Google Group and will be monitoring StackOverflow instead, I'm putting this here.
Upvotes: 70
Views: 33604
Reputation: 165
In accordance to what @Farside said, I don't believe that it is possible to do it by the books. However, you could do it by using Selenium and scraping all the comments in Python. You can use the InstaPy libary. They have Quick Start templates to make it really easy.
Upvotes: 0
Reputation: 10363
The generic answer here is "no, that's not possible via regular endpoints".
Instagram updated Rate Limits (after Nov 17, 2015). All rate limits on the Instagram Platform are controlled separately for each access token, and on a sliding 1-hour window. Live apps have higher rate limits than apps in Sandbox Mode.
Which state next limitations in global context:
Global Rate Limits
Global rate limits are applied inclusive of all API calls made by an app per access token over the 1-hour sliding window, regardless of the particular endpoint. Rate limits also apply to invalid or malformed requests.
- Sandbox RATE LIMIT: 500 / hour
- Live RATE LIMIT: 5000 / hour
Plus separately limitations for comments endpoints:
Endpoint-Specific Rate Limits
Endpoints used to publish (POST or DELETE) have rate limits that are applied on an per-endpoint basis. Any calls made to these endpoints by your OAuth Client are also counted towards the global rate limits noted above.
- Sandbox /media/media-id/comments: 30 / hour
- Live /media/media-id/comments: 60 / hour
If your app exceeds any of these rate limits, you will receive a response with an HTTP response code of 429 (Too Many Requests)
.
As soon as Instagram Platform controls it on per access token
basis, you might achieve a bigger limits using multi-threading with multiple access tokens. But it has caveats: 1. not everything could be paralleled from multiple access tokens, as context will be different. 2. It might contradict with Platform Policy and TOS
Upvotes: 2
Reputation: 111
This isn't "hacky" at all.
As Instagram gives the link where you are able to get recieve all comments here: https://instagram.com/developer/endpoints/comments/
All you have to do is Looping over the link Instagram is giving you. I've done it like this. Im using the Api to do it this way.
public function getUserMediaComments($id, $limit = 0) {
return $this->_makeCall('media/'.$id.'/comments', true, array('count' => $limit));
}
The $id is the media_id of the picture. If you foreach over that function with the picture id you'll recieve all comments.
It wasn't that hard when I found out about this way.
You could also do it like this while foreaching over it. :
$comments = json_decode(file_get_contents('https://api.instagram.com/v1/' . 'media/'. $image->id . '/comments?access_token='. $data->access_token));
It both returns you an array of the comments of the picture(s).
Upvotes: 0
Reputation: 1289
Ok, This is going to be a very "Hacky" solution, and I am not currently setup to do this myself (due to lack of ADSL at home) but I can provide a step by step guide of how I would approach this issue.
First of all you will need a tool called "Charles Web Debuging Proxy"
There is a tutorial on the site on how to enable "SSL debugging" in charles, (which will require you to install a new "root certificate" on your mobile device, to trick it into thinking that https transactions signed by charles are actually signed by instagram.com )
Now Set your mobile device to route all requests through said proxy ( which will have to be installed on your local wi-fi network.)
go to https://www.google.com and check that charles is logging both requests and responses.
Once this is all setup correctly then you can take a look at the API calls which the instagram app itself uses to generate said comment pages.
Upvotes: 11