Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Google脚本和Alphavantage json查询: TypeError:无法读取属性

Google脚本和Alphavantage json查询: TypeError:无法读取属性
EN

Stack Overflow用户
提问于 2018-09-13 10:02:07
回答 1查看 550关注 0票数 0

我尝试使用以下代码从AlphaVantage股票市场API中获取数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function importjson (){     
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("daily data");
   var day = new Date(),
      MILLIS_PER_DAY = 1000 * 60 * 60 *`enter code here` 24; 
   var urlvix = "https://www.alphavantage.co/query?function=TIME_SERIES_DAILY_ADJUSTED&symbol=xlb&apikey=KEY",    responsevix = UrlFetchApp.fetch(urlvix),
      jsonvix = JSON.parse(responsevix);
// var date = jsonvix["Meta Data"]["3. Last Refreshed"];
   var yesterday = Utilities.formatDate(new Date(day.getTime() - MILLIS_PER_DAY), "GMT+1", "yyyy-MM-dd"),
      curdate  = Utilities.formatDate(new Date(), "GMT+1", "yyyy-MM-dd");
   var open = jsonvix["Time Series (Daily)"][curdate]["5. adjusted close"],
        close = jsonvix["Time Series (Daily)"][curdate]["1. open"],
        volumetoday = jsonvix["Time Series (Daily)"][curdate]["6. volume"],
        volumeyesterday = jsonvix["Time Series (Daily)"][yesterday]["6. volume"];
 // Logger.log(date);
  Logger.log(curdate);
  Logger.log(yesterday);
  if  (volumetoday > (volumeyesterday + volumeyesterday*1.1) ){
  Logger.log("distribution");
  }
  else {
  Logger.log("keine distribution")
  };
  Logger.log("open: " + open);
  Logger.log("close: " + close);
  Logger.log("Today´s volume: " + volumetoday);
  Logger.log("Yesterday´s volume: " + volumeyesterday);
  }

有时候,当我运行代码时,我会得到以下错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
TypeError: Cannot read property "2018-09-13" from undefined. (Zeile 17, Datei "Libary")

或者如果我使用var date = jsonvix["Meta Data"]["3. Last Refreshed"];

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
`TypeError: Cannot read property "["3. Last Refreshed"]" from undefined.` (Zeile 17, Datei "Libary")

Json是这样来的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Meta Data   
1. Information  "Daily Time Series with Splits and Dividend Events"
2. Symbol   "MSFT"
3. Last Refreshed   "2018-09-13 13:37:27"
4. Output Size  "Compact"
5. Time Zone    "US/Eastern"
Time Series (Daily) 
2018-09-13  
1. open "112.1200"
2. high "113.7250"
3. low  "112.1200"
4. close    "112.8050"
5. adjusted close   "112.8050"
6. volume   "14261782"
7. dividend amount  "0.0000"
8. split coefficient    "1.0000"

问题是,我并不是每次运行代码时都会出现错误,这使得它有点不可靠。

市长对这个代码有什么问题吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-13 12:12:35

API并不总是返回您发布的JSON。有时它还会:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{ 
"Information":
"Thank you for using Alpha Vantage! Please visit https://www.alphavantage.co/premium/ if you would like to have a higher API call volume."
}

如您所见,这里没有["Meta Data"]["Time Series"]["2018-09-13"]键。唯一的关键是["Information"]

因此,当您的配额用完后,jsonvix["Meta Data"]将返回Undefined。您需要编写代码来缓慢地进行调用和/或在等待几秒钟后使用Utilities.sleep()进行重取,或者使用AlphaVantage选择更高的卷。

参考文献:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52319402

复制
相关文章
Rails里应用Devise
Use Devise For Authentication Devise is great gem for authentication, check out here. Add Gem First thing you need to do is to add devise gem to you Gemfile. Just add gem 'devise', '~> 3.5' to your Gemfile and run bundle install and restart your server. Se
用户2183996
2018/06/28
3500
Rails MVC 和 CRUD(3)
要在 Rails 中显示“My first test” 的静态页面,需要新建一个控制器和视图
franket
2021/11/24
7150
Ruby on Rails 基础(3)
查看可用ruby版本 [root@h202 ruby]# rvm list known -bash: rvm: command not found [root@h202 ruby]# su - root [root@h202 ~]# cd ruby/ [root@h202 ruby]# rvm list known # MRI Rubies [ruby-]1.8.6[-p420] [ruby-]1.8.7[-head] # security released on head [ruby-]1.9.1[-p
franket
2021/11/25
1.2K0
Rails 3 Script/ 改版
相信如果之前用过 2.* rails 的人都知道. 我们习惯用 ./script/generate [xxxx] 或者 ./script/* [xxxx].
py3study
2020/01/10
7.1K0
rails3的render(:updat
rails2的时代,对于动态显示数据的查询使用ajax的方法,一般转向到.js文件。使用如下的代码:
py3study
2020/01/13
3620
Rails 容器与配置(3)
通过 docker inspect afdddae9b2bf 可以获得丰富的,容器镜像的细节
franket
2021/10/20
3370
Rails 构建评论功能(3)
评论在创表的过程中已经构建了与article 的关联,但是article并没与评论关联
franket
2021/10/20
8280
Rails MVC 和 CRUD(5)
创建了一个叫 ArticlesController 的类,继承自 ApplicationController
franket
2021/11/24
3390
Rails MVC 和 CRUD(7)
(这里的 /articles 明明对应两个方法,GET、POST ,有点不太明白,为什么这样指定就一定成了POST请求)
franket
2021/11/24
1960
Rails MVC 和 CRUD(9)
保存数据 修改 create 方法,对提交的数据进行保存 [root@h202 blog]# vim app/controllers/articles_controller.rb [root@h202 blog]# cat app/controllers/articles_controller.rb class ArticlesController < ApplicationController def new end def create # render plain: params
franket
2021/11/25
1900
Rails MVC 和 CRUD(15)
点击 【Destroy】 后会根据我们的定义弹出提示 连续删除几次后所剩无几 目前已经通过 Rails 实现了文章的 新建、显示、列出、更新、删除 操作 ---- 命令汇总 rails server -b 0.0.0.0 rails generate controller welcome index cat app/views/welcome/index.html.erb vim config/routes.rb grep -v " #" config/routes.rb | grep -v
franket
2021/11/25
3490
Rails MVC 和 CRUD(2)
MVC 分块设计有助于管理复杂的应用程序,因为可以在一段时间内只用关注一个方面;例如,可以在不依赖业务逻辑的情况下专注于视图设计;同时也让应用程序的测试更加容易;MVC 分层同时也简化了分组开发;不同的开发人员可同时开发视图、控制器逻辑和业务逻辑
franket
2021/11/24
3750
Rails MVC 和 CRUD(13)
定义 update 方法,并且添加 edit 链接和 show 链接 [root@h202 blog]# vim app/controllers/articles_controller.rb [root@h202 blog]# cat app/controllers/articles_controller.rb class ArticlesController < ApplicationController def new @article = Article.new end def
franket
2021/11/25
1620
Rails MVC 和 CRUD(12)
保存成功就直接显示,如果保存失败,就重绘 new 页面,new 页面中加入了对错误信息的显示
franket
2021/11/25
2550
Rails MVC 和 CRUD(8)
再次提交一回 ---- 创建模型 Rails 提供了一个生成器用来创建模型 [root@h202 blog]# bin/rails generate model Article title:string text:text Running via Spring preloader in process 13216 invoke active_record create db/migrate/20160422140912_create_articles.rb c
franket
2021/11/25
2570
Rails MVC 和 CRUD(1)
Rails 的相关基础,详细可以参考 官方文档 和 Ruby China 的 Rails 入门
franket
2021/11/24
3480
Rails MVC 和 CRUD(10)
再次加载 可以成功显示了 ---- 列出所有文章 [root@h202 blog]# vim app/controllers/articles_controller.rb [root@h202 blog]# cat app/controllers/articles_controller.rb class ArticlesController < ApplicationController def new end def create # render plain: params[:ar
franket
2021/11/25
1820
Rails MVC 和 CRUD(6)
不过,通过查看源码,我们可以看到 action 部分指向的是当前页面 action="/articles/new" , 而这个页面 (Restfull API) 应该是用来进行显示的,而不是进行处理的
franket
2021/11/24
2700
Rails MVC 和 CRUD(11)
列表页面多出来两个链接,点击 【New article】 成功跳转到了添加页面,随便输入点什么,提交 自动跳转到了显示页面,点击【Back】 跳转回了所有列表页面 Tip: 之所以每做一次修改都能直接生效,是因为在开发模式下(默认),每次请求 Rails 都会自动重新加载程序,因此修改之后无需重启服务器 ---- 数据验证 我们常常有对输入进行校验的需求,以避免接受到了无效或不合规范的数据 [root@h202 blog]# vim app/models/article.rb [root@h
franket
2021/11/25
2720
Rails MVC 和 CRUD(14)
删除文章 在 controllers 中定义 destory 方法 然后在 index 视图中加入 Destroy 链接 [root@h202 blog]# vim app/controllers/articles_controller.rb [root@h202 blog]# cat app/controllers/articles_controller.rb class ArticlesController < ApplicationController def new @article
franket
2021/11/25
2160

相似问题

mongomapper rails 3和devise

20

Rails3和论坛插件?

21

Devise with rails 3和remote => true

20

Rails 3 devise_for和STI

21

Rails 3和Devise的角色授权

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文