Instagram API:如何获取所有用户媒体?

Ant*_*ony 66 api instagram

一般来说,我需要获得所有用户媒体.

用户有超过250张照片.

我做 /users/1/media/recent/?access_token=...&count=250

但它只返回20张照片.

也许Instagram对获取媒体有限制.如果是,响应有一个分页来解决它.但是只有最大ID照片.如何知道第一张(分钟)ID照片然后分页呢?

mic*_*lee 55

你是对的,Instagram API每次调用只会返回20张图片.所以你必须使用分页功能.

如果您正在尝试使用API​​控制台.您将首先允许API控制台通过您的Instagram登录进行身份验证.为此,您需要在"身份验证"下拉列表中选择OAUTH2.

经过身份验证后,使用左侧菜单选择users/{user-id}/media/recent端点.因此,对于{user-id}的这篇文章,您可以将其替换为self.然后,这将使用您的帐户来检索信息.

至少是为此端点执行GET所需的操作.一旦你发送,你会得到一些json返回给你.在所有服务器信息之后返回信息的最顶部,您将看到包含next_url和next_max_id的分页部分.

next_max_id是您将用作查询参数的内容.请记住,max_id是图像的id,它是最先返回的20个中最早的图像.这将用于返回早于此图像的图像.

如果您不想,则不必使用max_id.实际上,你可以抓住想要开始查询更多图像的图像的ID.

因此,从返回的数据中,将max_id复制到参数max_id中.请求URL应如下所示:https: //api.instagram.com/v1/users/self/media/recent?max_id = XXXXXXXXXXX,其中XXXXXXXXXXX是max_id.点击再次发送,你应该得到接下来的20张照片.

从那里你还会收到一个更新的max_id.然后,您可以再次使用它来获取下一组20张照片,直到最终浏览所有用户的照片.

我在我正在进行的项目中所做的是加载从最初的最初媒体请求返回的前20张照片.然后我给图像分配一个data-id(-id实际上可以是你想要的任何东西).然后在照片集的底部添加了一个加载更多按钮.

单击该按钮时,我使用jQuery获取最后一个图像及其data-id属性,并使用该属性通过ajax创建一个get调用,并将结果附加到页面上已有的照片的末尾.您可以将其替换为具有无限滚动效果的按钮,而不是按钮.

希望有所帮助.

  • 事实证明,在沙盒模式中,您只能获得最近20个帖子.获得批准后,您就可以从用户的帐户中检索所有帖子. (21认同)
  • 我也在尝试这个,并且响应的分页属性是空的,所以我认为不再可能引入用户的整个提要.正如端点的名称所暗示的那样,它被称为"最近的",所以看起来我们现在只是获取最新的帖子.我还在寻找解决方案. (5认同)

小智 20

我已经用可选参数count设置为-1解决了这个问题.


Ant*_*ony 7

这是Instagram Developer Console中的一个问题.max_id并且min_id在那里不起作用.


Joc*_*per 5

有关信息,请参见http://instagram.com/developer/endpoints/pagination.您需要按顺序逐步浏览结果页面,每次请求next_url结果在pagination对象中指定的下一部分.

  • 2016年3月运行端点将返回一个空的分页对象.看起来它不再受支持了.但无法找到任何官方解释,说明为什么或是否应该可以通过api获取用户的整个Feed. (2认同)

nis*_*ama 5

2016 年 6 月,Instagram 将其 API 的大部分功能仅提供给通过审核的应用程序。然而,它们仍然通过 Web 界面提供 JSON 数据,您可以将参数添加__a=1到 URL 以仅包含 JSON 数据。

max=
while :;do
  c=$(curl -s "https://www.instagram.com/username/?__a=1&max_id=$max")
  jq -r '.user.media.nodes[]?|.display_src'<<<"$c"
  max=$(jq -r .user.media.page_info.end_cursor<<<"$c")
  jq -e .user.media.page_info.has_next_page<<<"$c">/dev/null||break
done
Run Code Online (Sandbox Code Playgroud)

编辑:正如 alnorth29 在评论中提到的,该max_id参数现在被忽略。Instagram 还更改了响应的格式,您需要执行额外的请求才能获取每个帖子多张图片的新型帖子中图片的全尺寸 URL。您现在可以执行以下操作以在结果的第一页上列出图像的全尺寸 URL:

c=$(curl -s "https://www.instagram.com/username/?__a=1")
jq -r '.graphql.user.edge_owner_to_timeline_media.edges[]?|.node|select(.__typename!="GraphSidecar").display_url'<<<"$c"
jq -r '.graphql.user.edge_owner_to_timeline_media.edges[]?|.node|select(.__typename=="GraphSidecar")|.shortcode'<<<"$c"|while read l;do
  curl -s "https://www.instagram.com/p/$l?__a=1"|jq -r '.graphql.shortcode_media|.edge_sidecar_to_children.edges[]?.node|.display_url'
done
Run Code Online (Sandbox Code Playgroud)

要列出在 Safari 最前面的选项卡中打开个人资料的用户发表的每个帖子的短代码列表,我使用如下脚本:

sjs(){ osascript -e'{on run{a}','tell app"safari"to do javascript a in document 1',end} -- "$1";}

while :;do
  sjs 'o="";a=document.querySelectorAll(".v1Nh3 a");for(i=0;e=a[i];i++){o+=e.href+"\n"};o'>>/tmp/a
  sjs 'window.scrollBy(0,window.innerHeight)'
  sleep 1
done
Run Code Online (Sandbox Code Playgroud)

  • 看起来 max_id 参数现在在这个端点上被忽略了。 (2认同)