使用 google 应用程序脚本访问 nse 期权链数据 (public API)
Access nse option chain data (public API) using google app script
我想访问以下 url:
https://www.nseindia.com/api/option-chain-indices?symbol=NIFTY
当我直接将其粘贴到浏览器中时,它就像 charm 一样工作并给出一个 JSON 对象。 (试一试)
然后我用 jupyter notebook python 试了一下。它再次工作。以下代码给出了与上述方法 1 相同的对象。
import requests
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36','Accept-Encoding': 'gzip, deflate, br','Accept-Language': 'en-US,en;q=0.9,hi;q=0.8'}
url = "https://www.nseindia.com/api/option-chain-indices?symbol=NIFTY"
json_obj = requests.get(nurl, headers = headers).json()
- 但是当我尝试使用 google 应用程序脚本访问它时,我什么也没得到。它一直在执行请求,然后在 6 分钟后发生超时。下面是相同的代码
var ocurl = "https://www.nseindia.com/api/option-chain-indices?symbol=NIFTY";
var hds = {
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'en-US,en;q=0.9,hi;q=0.8',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'
};
var params = {headers: hds, followRedirects: false, muteHttpExceptions: true};
var ocresponse = UrlFetchApp.fetch(ocurl, params);
//var data = JSON.parse(ocresponse.getContentText())
Logger.log(ocresponse.getContentText());
我的猜测是,在前两种情况下,请求来自本地 browser/server,但在第三种情况下,它来自 google 拥有的服务器。 NSE 正在阻止这些请求。我不确定这是否正确。
我想使用 google 脚本,因为它提供自动触发功能(类似于 cron 作业)并且是免费的。
有什么方法可以使用 google 应用程序脚本访问它吗??
当您想将以下 python 脚本转换为 Google Apps 脚本时,
import requests
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36','Accept-Encoding': 'gzip, deflate, br','Accept-Language': 'en-US,en;q=0.9,hi;q=0.8'}
url = "https://www.nseindia.com/api/option-chain-indices?symbol=NIFTY"
json_obj = requests.get(nurl, headers = headers).json()
变成如下
var ocurl = "https://www.nseindia.com/api/option-chain-indices?symbol=NIFTY";
var hds = {
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'en-US,en;q=0.9,hi;q=0.8',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'
};
var params = {headers: hds, muteHttpExceptions: true};
var ocresponse = UrlFetchApp.fetch(ocurl, params);
但是,不幸的是,在现阶段,UrlFetchApp 无法修改User-Agent
。这样,当上面的 Google Apps Script 是 运行 时,User-Agent
的值是 Mozilla/5.0 (compatible; Google-Apps-Script; beanserver; +https://script.google.com; id: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)
,其中 aaa...
似乎是唯一 ID。关于使用 UrlFetchApp 修改 User-Agent
,它已在 Google 问题跟踪器中报告为未来的请求。 Ref 很遗憾,好像还是没能实现。
从你在评论中的回复看来,User-Agent
似乎需要修改。因此,不幸的是,作为当前的答案,您的目标似乎无法使用 UrlFetchApp 实现。
参考:
我使用了以下 headers 并且有效
“接受”,“[星号]/[星号]”
"Accept-Encoding", "gzip, deflate, br"
"User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, 像 Gecko) Chrome/98.0.4758.102 Safari/537.36"
“连接”,“keep-alive”
我想访问以下 url: https://www.nseindia.com/api/option-chain-indices?symbol=NIFTY
当我直接将其粘贴到浏览器中时,它就像 charm 一样工作并给出一个 JSON 对象。 (试一试)
然后我用 jupyter notebook python 试了一下。它再次工作。以下代码给出了与上述方法 1 相同的对象。
import requests
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36','Accept-Encoding': 'gzip, deflate, br','Accept-Language': 'en-US,en;q=0.9,hi;q=0.8'}
url = "https://www.nseindia.com/api/option-chain-indices?symbol=NIFTY"
json_obj = requests.get(nurl, headers = headers).json()
- 但是当我尝试使用 google 应用程序脚本访问它时,我什么也没得到。它一直在执行请求,然后在 6 分钟后发生超时。下面是相同的代码
var ocurl = "https://www.nseindia.com/api/option-chain-indices?symbol=NIFTY";
var hds = {
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'en-US,en;q=0.9,hi;q=0.8',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'
};
var params = {headers: hds, followRedirects: false, muteHttpExceptions: true};
var ocresponse = UrlFetchApp.fetch(ocurl, params);
//var data = JSON.parse(ocresponse.getContentText())
Logger.log(ocresponse.getContentText());
我的猜测是,在前两种情况下,请求来自本地 browser/server,但在第三种情况下,它来自 google 拥有的服务器。 NSE 正在阻止这些请求。我不确定这是否正确。
我想使用 google 脚本,因为它提供自动触发功能(类似于 cron 作业)并且是免费的。
有什么方法可以使用 google 应用程序脚本访问它吗??
当您想将以下 python 脚本转换为 Google Apps 脚本时,
import requests
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36','Accept-Encoding': 'gzip, deflate, br','Accept-Language': 'en-US,en;q=0.9,hi;q=0.8'}
url = "https://www.nseindia.com/api/option-chain-indices?symbol=NIFTY"
json_obj = requests.get(nurl, headers = headers).json()
变成如下
var ocurl = "https://www.nseindia.com/api/option-chain-indices?symbol=NIFTY";
var hds = {
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'en-US,en;q=0.9,hi;q=0.8',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'
};
var params = {headers: hds, muteHttpExceptions: true};
var ocresponse = UrlFetchApp.fetch(ocurl, params);
但是,不幸的是,在现阶段,UrlFetchApp 无法修改User-Agent
。这样,当上面的 Google Apps Script 是 运行 时,User-Agent
的值是 Mozilla/5.0 (compatible; Google-Apps-Script; beanserver; +https://script.google.com; id: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)
,其中 aaa...
似乎是唯一 ID。关于使用 UrlFetchApp 修改 User-Agent
,它已在 Google 问题跟踪器中报告为未来的请求。 Ref 很遗憾,好像还是没能实现。
从你在评论中的回复看来,User-Agent
似乎需要修改。因此,不幸的是,作为当前的答案,您的目标似乎无法使用 UrlFetchApp 实现。
参考:
我使用了以下 headers 并且有效
“接受”,“[星号]/[星号]”
"Accept-Encoding", "gzip, deflate, br"
"User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, 像 Gecko) Chrome/98.0.4758.102 Safari/537.36"
“连接”,“keep-alive”