【问题标题】:TypeError: Cannot read property 'users' of undefined errorTypeError:无法读取未定义错误的属性“用户”
【发布时间】:2020-11-12 11:12:59
【问题描述】:

我已经写好了代码:

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']);

我尝试了不同的东西,但我无法让它工作。该 url 指向一个如下所示的页面:

{"users": [{"position": 0, "user": {"pk": "44173477683", "username": "mykindofrock", "full_n........

“pk”后面的数字 44173477683: 是我想要得到的输出。

我希望有人可以提供帮助,因为我的能力非常有限,但我想这就是我们学习的方式! :)

【问题讨论】:

  • var data = console.log(source);console.log 没有返回值,也就是说你返回的数据是未定义的
  • @KrzysztofKrzeszewski - 你知道如何解决这个问题,或者我可以在哪里了解如何解决这个问题,因为我不知道该部分在做什么! :)
  • @RuanMartinelli 这是谷歌应用脚​​本而不是 javascript,所以你说的不正确
  • @RuanMartinelli 抱歉,我认为这可能是我的错,因为我相信我在标签中添加了 javascript
  • @louisgeorge 尝试简单地返回源而不是从 fetch 函数返回数据变量,它可能会解决您的问题

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


【解决方案1】:

我很惊讶您提供的端点实际上导致了一个 JSON 文件。我原以为要访问 Instagram API,您需要在 Facebook 等处注册一个开发人员帐户。不过,它确实会通过在浏览器中访问返回 JSON。我想它只是显示每个用户的公开信息。

但是,对于 Apps 脚本,它似乎是一个不同的故事。我去过:

https://www.instagram.com/web/search/topsearch/?context=user&count=0&query=user

在浏览器中并选择了一个随机用户 ID。然后我用 UrlFetchApp 从 Apps Script 调用它:

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.getContentText()) 替换console.log(result.getResponseCode()) 时,你会得到一大堆HTML(不是JSON)部分,上面写着:

<title>
Page Not Found &bull; Instagram
</title>

虽然它可能是基于 IP 的。尝试从您的终端运行此代码,除非您收到 200 的响应代码,否则您可能根本无法从 Apps 脚本访问此信息。

【讨论】:

    【解决方案2】:

    您将data 设置为console.log(source) 的返回值undefined。所以无论数据是什么,你都会得到未定义的。 要避免的另一件事是fetch 不一定会被提升,因为fetch 是用于进行 API 调用的内置函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-24
      • 2023-02-26
      • 2020-02-11
      • 2017-05-05
      • 2019-04-05
      相关资源
      最近更新 更多