通过Erlang从Google Apps脚本网址获取JSON

时间:2013-10-13 20:04:46

标签: google-apps-script erlang

晚安!

我一直在研究使用GAS(Google Apps脚本)来托管一小部分javascript的可能性,这些javascript可让我使用新的Google财经应用api。目的是我将使用涉及股票数据使用的项目的股票信息。我知道有几种方法可以从Google获取股票信息,但是金融应用程序返回的数据更符合我们正在使用的其他来源。 (这个项目的一个限制是我们有多个来源)。

我已经编写了javascript,我可以调用httpc:请求来自Google提供给我的脚本的URL。在浏览器中,JS按我的意愿返回json对象,但是当从Erlang调用时,我将它放入ascii列表中。从检查值看,它似乎是一个文档,如:

下面是javascript和看到json的网址:

https://script.google.com/macros/s/AKfycbzEvuuQl4jkrbPCz7hf9Zv4nvIOzqAkBxL1ixslLBxmSEhksQM/exec

function doGet() {
  var stock = FinanceApp.getStockInfo('LON:TSCO');

  return ContentService.createTextOutput(JSON.stringify(stock))
    .setMimeType(ContentService.MimeType.JSON);
}

对于erlang来说,这是一个简单的请求,但我并没有长时间使用erlang,所以也许我在这里弄乱了一些东西(URL就是上面提到的那个)。当我在命令行上测试时,我得到了crypto / ssl / inets。

 {ok, {Version, Headers, Body}} = httpc:request(get, URL, []}, [], []).

我认为值得一提的是,当我从Cygwin卷曲时,我也得到了大量的HTML,我已将它包含在下面,但是如果你看到它,你会感谢我没有在这里发布它! http://pastebin.com/UtJHXjRm

我一直在更新脚本,因为我使用新版本,但我有点不知道为什么它没有正确返回。

如果有人能给我任何指示,我将非常感激!我觉得它并不打算以这种方式使用,也许只能在其他Google产品中使用。

干杯!

2 个答案:

答案 0 :(得分:1)

有必要检查您部署Web应用程序的方式,特别是谁有权访问应用程序,无需身份验证即可进行访问,如图所示:

enter image description here

请参阅文档中的Deploying Your Script as a Web App

在我的测试中,通过运行:

curl -L https://script.google.com/macros/s/************/exec

获得以下结果:

{
  "priceopen":358,
  "change":2.199981689453125,
  "high52":388.04998779296875,
  "tradetime":"2013-10-11T15:35:18.000Z",
  "currency":"GBX",
  "timezone":"Europe/London",
  "low52":307,
  "quote":357.8999938964844,
  "name":"Tesco PLC",
  "exchange":"LON",
  "marketcap":28929273763,
  "symbol":"TSCO",
  "volumedelay":0,
  "shares":8083060703,
  "pe":23.4719295501709,
  "eps":0.15248000621795654,
  "price":357.8999938964844,
  "has_stock_data":true,
  "volumeavg":14196534,
  "volume":8885809,
  "changepct":0.6184935569763184,
  "high":359.5,
  "datadelay":0,
  "low":355.8999938964844,
  "closeyest":355.70001220703125
}

答案 1 :(得分:0)

可能您的GET没有遵循使用contentService时发生的REDIRECT。看看返回的html,那里有一个重定向。