TypeError:无法读取未定义错误的属性“用户”

时间:2020-11-12 11:12:59

标签: api url google-apps-script google-sheets instagram-api

我已经编写了代码:

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:这是我要作为输出获取的内容。

我希望我能帮助到我,所以我想这是我们的学习方式! :)

2 个答案:

答案 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 &bull; Instagram
</title>

尽管它可能基于IP。尝试并从头开始运行此代码,除非您得到200的响应代码,否则很可能根本无法从Apps Script访问此信息。

答案 1 :(得分:0)

您正在将data设置为console.log(source)的返回值。因此,无论数据是什么,您都将变得不确定。 要避免的另一件事是,undefined不一定会被吊起,因为fetch是用于进行API调用的内置函数。