我已经编写了代码:
function getId(username) {
var infoUrl = "https://www.instagram.com/web/search/topsearch/?context=user&count=0&query=" + username
return parseInt(fetch(infoUrl)['users']);
}
function fetch(url) {
var ignoreError = {
"muteHttpExceptions": true
};
var source = UrlFetchApp.fetch(url, ignoreError).getContentText();
var data = console.log(source);
return data;
}
获取用户名输入的用户ID。 错误对应于以下行:
return parseInt(fetch(infoUrl)['users']);
我尝试了不同的操作,但无法正常工作。该网址指向一个如下所示的页面:
{"users": [{"position": 0, "user": {"pk": "44173477683", "username": "mykindofrock", "full_n........
“ pk”后面的数字44173477683:这是我要作为输出获取的内容。
我希望我能帮助到我,所以我想这是我们的学习方式! :)
答案 0 :(得分:1)
您提供的端点实际上导致了JSON文件,我感到惊讶。我本以为要访问Instagram API,您需要在Facebook等注册一个开发人员帐户。尽管如此,它的确会通过在浏览器中访问来返回JSON。我想它只是显示每个用户的公开信息。
但是,对于Apps Script来说,这似乎是另外一个故事。我参观了:
https://www.instagram.com/web/search/topsearch/?context=user&count=0&query=user
在浏览器中,选择一个随机用户ID。然后我使用UrlFetchApp从Apps脚本中调用了它:
function test(){
var username = "username7890543216"
var infoUrl = "https://www.instagram.com/web/search/topsearch/?context=user&count=0&query=" + username
var options = {
'muteHttpExceptions': true
}
var result = UrlFetchApp.fetch(infoUrl, options)
console.log(result.getResponseCode())
}
哪个返回429
响应。这是“请求过多”响应。因此,如果我不得不猜测,我会说从Apps Script到此未经身份验证的终结点的所有请求已被阻止。这就是为什么将console.log(result.getResponseCode())
替换为console.log(result.getContentText())
时,会得到其中一部分HTML(不是JSON)内容的原因,
<title>
Page Not Found • Instagram
</title>
尽管它可能基于IP。尝试并从头开始运行此代码,除非您得到200的响应代码,否则很可能根本无法从Apps Script访问此信息。
答案 1 :(得分:0)
您正在将data
设置为console.log(source)
的返回值。因此,无论数据是什么,您都将变得不确定。
要避免的另一件事是,undefined
不一定会被吊起,因为fetch
是用于进行API调用的内置函数。