我有一个问题在两天前突然出现。 我有一个prestashop模块,可让我从Instagram页面检索图像。
它运行得很好,但是突然之间没有任何效果。我的错误是“ ProfilePage:未定义索引” 我做了很多var_dump,我注意到json不再具有该索引,它变成了LoginAndSignupPage。
奇怪的是,具有相同的模块,相同的代码,它可以在预生产中工作,也可以在本地工作,但不适用于生产。 起初,我以为网站的托管者做了一些更改,但是没有,他们没有...
你有什么主意吗?
谢谢您的帮助
答案 0 :(得分:1)
问题是Instagram在过去一周左右的时间内限制了其未登录(来宾)访问(基于IP地址)。
对服务器进行大量查询后,他们将开始显示“请登录”页面()。
唯一的解决方法是让希望使用此过程的Instagram上的每个用户都创建一个API密钥(这是不现实的,因为主要是我们不认识他们)。否则,在将请求发送到Instagram时,我们将需要使用代理,这样就不会看到您从同一IP地址多次访问其服务器。
在尚未到达Instagram服务器的全新IP地址上使用代码就可以了。但是,在多次查询后(一旦IP被列入黑名单),我得到的是同一登录页面,而不是instagram帐户。
根据Instagram的API文档,他们希望您为希望拉照片的每个用户提供一个API密钥(将API密钥保持在沙盒模式)。再次对我来说这似乎不现实。我们“可以”将我们的App提交到Instagram进行审查(理论上“可以”让您从同一API密钥中为其他用户提取照片),但是我非常怀疑他们会批准从其服务器中提取图像和元数据的应用程序。
答案 1 :(得分:0)
使用代理服务器,最好的住宅代理服务器,Instagram似乎开始积极禁止IP,并且很难限制IP。
任何被禁止的ip被路由到LoginAndSignupPage,因此您不能提取信息。由于它基于IP,因此除非所有人的IP也都被阻止,否则可能不会在所有人身上发生。
答案 2 :(得分:-2)
它对我有用:
var name = "you_profile";
$.get("https://www.instagram.com/" + name + "/?__a=1", function(json) {
if (json) {
edges = json.graphql.user.edge_owner_to_timeline_media.edges;
$.each(edges, function(n, edge) {
var active = n == 0 ? 'active' : '';
$('#instagram').append(
'<div class="carousel-item col-md-3 ' + active + ' ">' + '<a href="https://instagr.am/p/' + edge.node.shortcode +'"><img src="' + edge.node.thumbnail_src +'" alt=""></a>' + '</div>'
);
});
}
});