我正在try 从MyFitnessPal获取我的日记,本机我编写了以下有效的代码:

"use strict";
const axios = require('axios')

async function getReport(username) {
  const foodLog = await axios({
    method: 'POST',
    url: `https://www.myfitnesspal.com/api/services/authenticate_diary_key/${username}`,
    data: {
      from: "2023-01-20",
      to: "2023-01-30",
      show_food_diary: 1,
      show_exercise_diary: 1,
      show_food_notes: 0,
      show_exercise_notes: 0,
      key: ""
    }
  })

  // do stuff with foodLog
}

响应包含一组日期,每个日期包含膳食等.

然而,当我向MyFitnessPal发出完全相同的请求时,但在使用UrlFetchApp的Google应用程序脚本中,我得到了一个空响应:

function getReport(username) {
  const url = `https://www.myfitnesspal.com/api/services/authenticate_diary_key/${username}`
  const payload = {
      from: "2023-01-20",
      to: "2023-01-30",
      show_food_diary: 1,
      show_exercise_diary: 1,
      show_food_notes: 0,
      show_exercise_notes: 0,
      key: ""
    }
  
  const options = {
    payload,
    method: 'post'
  }

  try {
    const response = UrlFetchApp.fetch(url,options)
    console.log(response.getResponseCode()) //200
    console.log(response.getContentText()) // []
  } catch (error){
    console.log(error)
  }
}

请求通过时没有出现状态为200的错误,但我得到了一个emty数组作为响应.我是不是遗漏了什么?

通过将MyFitnessPal用户名传递给getReport(),您可以很容易地复制该错误,但请确保日记共享设置为"Public",并且您已经记录了所选日期的膳食.

推荐答案

我相信你的目标如下.

  • 您希望将node.js脚本转换为Google Apps脚本.

修改要点:

  • 当我看到您的show node.js脚本时,似乎请求正文是以JSON的形式发送的,其中Content-Typeapplication/json.另一方面,当我看到您显示的Google Apps脚本时,似乎请求正文是作为表单数据发送的.这可能是您当前问题的原因.

当这些要点反映在您的show Google Apps脚本中时,下面的修改如何?

出发地:

const options = {
  payload,
  method: 'post'
}

致:

const options = {
  payload: JSON.stringify(payload),
  method: 'post',
  contentType: "application/json"
}

注:

  • 如果出现错误,请在请求头中包含Accept: "application/json, text/plain, */*"并重新测试.

参考资料:

Node.js相关问答推荐

如何在Node js中从MongoDB获取特定数据,使用GET方法?

使用HTTPS从NodeJS 17.9.1升级到18.0.0后,SignalR连接失败

@nuxtjs/站点 map 错误提示:找不到包';NitroPack';

Node.js中Redis的并发问题

验证器功能在mongoose 中不起作用

找不到 vue-template-compiler@2.6.14 的匹配版本 | Shopware 6.5 更新后的 node 问题

在nodejs中为oauth请求创建和存储csrf令牌的最佳方法

在构建完成后,将AddedFiles文件夹的内容复制到dist文件夹

dayjs的isSameOrAfter方法未按预期工作

Gulp 能否向 Docker 发出增量构建的第一次迭代完成的信号?

在 getServerSideProps 中使用 EmailProvider 获取 NextAuth 会话会抛出 fs找不到模块

如何使用对象中的常量值验证字符串字段?

如何在没有 Typescript 的情况下以交互方式使用 Create-React-App?

如何在不使用位置运算符 $ 的情况下更新 mongodb 文档中数组中的嵌套文档?

FirebaseCloudMessaging : PlatformException (PlatformException(null-error, Host platform returned null value for non-null return value., null, null))

使用 firebase 函数 api 运行套接字(相同的端口创建问题)

Pug - 包括带有include关键字的c代码

fs.writefile 选项参数的可能值,尤其是只读文件的整数

bash:npm:找不到命令?

Node.js 应用程序有周期性的缓慢和/或超时(不接受传入的请求)