Javascript 如何在没有instagram API的情况下从instagram获取公共用户的所有帖子
我试图从Instagram上的公共用户帐户获取帖子,我尝试了几乎所有可能的方法,但都返回403个错误(拒绝访问)Javascript 如何在没有instagram API的情况下从instagram获取公共用户的所有帖子,javascript,instagram,instagram-api,Javascript,Instagram,Instagram Api,我试图从Instagram上的公共用户帐户获取帖子,我尝试了几乎所有可能的方法,但都返回403个错误(拒绝访问) $.ajax({ url:url, 键入:“获取”, 成功:功能(数据){ console.log('Success!',data); }, 错误:函数(响应){ console.log('ERROR!',response); } }); 以上是我试图获取数据的链接。正如我所读到的Instagram正在改变他们的协议,是否还有其他方法可以在不使用Instagram AP
$.ajax({
url:url,
键入:“获取”,
成功:功能(数据){
console.log('Success!',data);
},
错误:函数(响应){
console.log('ERROR!',response);
}
});
以上是我试图获取数据的链接。正如我所读到的Instagram正在改变他们的协议,是否还有其他方法可以在不使用Instagram API和后端代码的情况下从任何公共用户获取帖子列表
谢谢这个解决方案是针对PHP的,它可以从一个帐户获得12篇最新文章
由于您没有有效的会话,因此您将获得403。Web应用程序会话存储为cookie(当您浏览instagram.com时,会有一个sessionid cookie)
您需要在请求的标题中包含会话cookie
获取有效请求的所有头的一种简单方法是转到开发人员工具的网络部分,复制请求头或其他格式
另一种方法是使用或脚本。将直接从浏览器并使用当前会话执行 您的第二个解决方案应该有效。尝试访问此url:
https://www.instagram.com/{username}/?__a=1
它包含用户页面上的所有信息,包括12篇不同大小的最新文章。作为旁注,它不包含追随者或以下列表
我制作了一个使用此方法的jquery插件:
https://github.com/kasperlegarth/instastory.js
PHP解决方案
你可以把它添加到某个地方,它会从一个用户那里获取12篇最新的帖子,并返回一个数组中照片的链接。
这里是一个实现
函数getPosts($profile){
$base=”https://instagram.com/";
$end=“/?\uu a=1”;
$ls=array();
$content=file\u get\u contents($base.$profile.$end);
if(strpos($content,“is_private\”:false))!==false){
返回数组(true,array());
}
$split=“config\u height\”:320},{“src\”:\”;
while(strpos($content,$split)!==false){
$part=@explode($split,$content,2)[1];
$p=@explode(“\”,$part,2)[0];
$content=str_replace($split.$p,“,$content);
阵列推送($ls,$p);
}
返回数组(false,$ls);
}
$x=getPosts(“najemi.cz”);
$isPrivate=$x[0];
$posts=$x[1]
如果($isPrivate){
echo“对不起,此帐户是私人帐户”;
}否则{
foreach($posts作为$post){
回声“;
}
}
这将在HTML中用于显示帐户的12篇最新帖子。通过添加和删除显示的内容,您可以根据自己的需要对其进行定制,但除此之外,还可以使用任何现有的用户名调用该函数
使用AJAX的javascript解决方案
此解决方案需要访问返回结果的php文件
Javascript将如下所示
功能显示(阵列1){
array1.forEach(元素=>console.log(元素));
}
var username=“najemi.cz”;
$.ajax({
url:“./getPosts.php?p=“+username,
键入:“获取”,
成功:功能(数据){
显示(数据分割(“\n”);
},
错误:函数(响应){
console.log('ERROR!',response);
}
});
名为“getPosts.php”的php文件将包含:
只需使用一些CSS选择器,您就可以完成这项任务。将此代码粘贴到您的chrome控制台中,您将获得某个用户的所有帖子(无需登录instagram):
var allLinks=document.getElementsByTagName(“a”)
var allPosts=[]
对于(var i=0;i-1;
如果(isPost)
allPosts.push(allLinks[i].href)
}
console.log(所有帖子)
最后,如果您想改进这一点,请添加一些分页并重复相同的代码。您没有查看此页面的权限。HTTP错误403
和访问被拒绝,它不是公共的。什么不是公共的?抱歉,我不明白。我正在尝试做什么来获得公共用户所有没有后端或instagram API的帖子。instagram有漏洞ged协议,我不知道是否还有机会获取此数据。访问被拒绝,它可能是“公共的”仅限注册用户,无论如何,如果你想在不使用API的情况下访问帖子,你可以制作一个刮板。对不起,你能更具体地说明“制作刮板”是什么意思吗?谢谢。我制作了刮板,已经发布了前12篇帖子,但是否可以获得所有页面?有什么建议吗?谢谢。谢谢,我也制作了一些东西来获取第一页帖子,但是如何获取下一个是我的问题:/顺便说一句,这是php,我找到了一些解决方案,如何使用后端获取整个数据,但我想只使用javascript来实现这一点。在javascript中,您永远无法获取与您的页面不在同一域的页面的源代码。通常,如果答案中包含规划代码的目的,以及为什么这样做可以在不介绍其他人的情况下解决问题。感谢您提高了答案的参考价值,使其更易于理解!我也尝试过这样做,我将cookie放入了我的请求头中,但结果是一样的,可能我做错了什么。如果您有时间,您可以给我工作时间吗例子?谢谢你的建议。为什么我不能从邮递员那里打电话给你呢?
var allLinks = document.getElementsByTagName("a")
var allPosts = []
for (var i = 0; i<allLinks.length; i++){
var isPost = allLinks[i].parentNode.className.indexOf("v1Nh3")>-1;
if (isPost)
allPosts.push(allLinks[i].href)
}
console.log(allPosts)