← 博客

怎么用印度行情数据API接口获取公司介绍

做印度股票的行情网站或 App,个股页面除了报价和 K 线,还少不了一块「公司介绍」:这家公司是做什么的、属于哪个板块和行业、CEO 是谁、官网在哪。这篇教学方案用我们的印度行情数据API接口,以 NSE(印度国家证券交易所)的信实工业(RELIANCE)为例,三步把公司介绍取回来并显示出来,文末有可以直接运行的完整代码。

怎么用印度行情数据API接口获取公司介绍:以 NSE 的 RELIANCE 为例,一次请求取到名称、简介、板块、行业、CEO、官网
怎么用印度行情数据API接口获取公司介绍:以 NSE 的 RELIANCE 为例,一次请求取到名称、简介、板块、行业、CEO、官网

公司介绍里有什么

一次请求固定返回 12 个字段,常用的是这些:

  • name:公司名称
  • description:公司简介,一段完整的文字
  • sector、industry:板块、行业
  • ceo:首席执行官
  • head_office:总部所在地
  • founded:成立年份
  • website:官网

准备工作

  • 一把密钥。能用哪些市场和接口是开通账号时确定的,申请时说明要用印度的财务信息接口。
  • 接入地址。HTTP 的接入地址写在开发文档的通用规则里,下文用「HTTP 接入地址」代替。
  • 三个参数的取值:国家 country=india,市场代码 market=NSE 或 BSE,语言 language=en。其它国家的取值见国家与市场参数。

第一步:确认产品代码

公司介绍按「国家 + 市场 + 产品代码」来取。产品代码要用产品列表接口返回的原值,先取一次 NSE 的列表:

GET /api/all_symbol?market=NSE

返回的是一个数组,每个产品一项。其中信实工业这一项是:

{
  "status": 0,
  "interval": null,
  "market": "NSE",
  "code": "RELIANCE",
  "message": "SUCCESS",
  "data": {
    "code": "RELIANCE",
    "contract": null,
    "name": "RELIANCE INDUSTRIES LTD",
    "Market": "NSE",
    "Varieties": "EQ"
  }
}

code 就是后面要用的产品代码。列表很大(NSE 有三千多个产品),建议取一次存下来,不用每次都请求。

第二步:请求公司介绍

用到的接口是公司介绍(多语言)。请求头带 Authorization: 你的密钥,四个参数都必填:

GET /api/symbol_international_details?country=india&market=NSE&symbol=RELIANCE&language=en

返回(description 很长,这里只列出开头):

{
  "status": 0,
  "message": "SUCCESS",
  "data": {
    "country": "india",
    "website": "http://www.ril.com",
    "founded": "1957",
    "description": "Reliance Industries Limited engages in hydrocarbon exploration and production, petroleum refining and marketing, petrochemicals, advanced materials and composites, renewable, financial services, retail, and digital services worldwide. …",
    "language": "en",
    "industry": "Oil & Gas",
    "type": "stock",
    "ceo": "Mukesh Dhirubhai Ambani",
    "indexes": "[]",
    "head_office": "Mumbai",
    "name": "Reliance Industries Ltd",
    "sector": "Energy"
  },
  "total": 0,
  "page": 0,
  "market": "NSE",
  "symbol": "RELIANCE",
  "code": "RELIANCE",
  "interval": null
}

数据在 data 里,status 为 0 表示成功。把 data 里的字段填到页面上,一块公司介绍就有了。

第三步:处理取不到的情况

接口的 HTTP 状态码一律是 200,成功还是失败要看返回里的 status:

  • status 为 500、message 是 No Symbol:找不到这个产品,或者这个产品没有所传语言的介绍。印度的公司介绍请用 language=en,换成别的语言会返回 No Symbol。
  • message 是 language is required!:没有传 language。market、symbol 缺了也是同样的提示方式。
  • 没有带 country:请求会直接失败,财务信息类的接口都必须带国家。
  • 某个字段是空字符串:这家公司没有这一项内容,显示之前先判断一下。

完整示例代码

下面的代码用 Node.js 18 及以上版本可以直接运行(自带 fetch),把开头两项换成自己的即可。

// 运行:node profile.js(Node.js 18 及以上)
const KEY = '你的密钥';
const HTTP_BASE = 'HTTP 接入地址';   // 见开发文档「概览 · 通用规则」,以 /api/ 结尾

// 取一家印度公司的介绍。market 写 NSE 或 BSE,symbol 用产品列表里的代码
async function companyProfile(market, symbol) {
  const query = new URLSearchParams({ country: 'india', market, symbol, language: 'en' });
  const res = await fetch(`${HTTP_BASE}symbol_international_details?${query}`, { headers: { Authorization: KEY } });
  const text = await res.text();
  const body = JSON.parse(text);
  if (body.status !== 0) throw new Error(`取不到 ${market}:${symbol} 的公司介绍:${body.message || text}`);
  return body.data;
}

companyProfile('NSE', 'RELIANCE').then((p) => {
  console.log(p.name);
  console.log('板块 / 行业:', p.sector || '—', '/', p.industry || '—');
  console.log('CEO:', p.ceo || '—');
  console.log('总部:', p.head_office || '—', '  成立:', p.founded || '—');
  console.log('官网:', p.website || '—');
  console.log(p.description);
}).catch((e) => console.error(e.message));

运行后输出的前几行:

Reliance Industries Ltd
板块 / 行业: Energy / Oil & Gas
CEO: Mukesh Dhirubhai Ambani
总部: Mumbai   成立: 1957
官网: http://www.ril.com

还想要 Logo、ISIN 和市值

公司介绍接口不带 Logo 和市值,这两类数据在另外两个接口里,参数写法一样:

  • 基础信息:/api/basic?country=india&market=NSE&symbol=RELIANCE,返回 ISIN(INE002A01018)、交易币种(INR)和 Logo。Logo 是一段 SVG 原文,可以直接插入页面。
  • 个股财务字段:要哪些字段就在 fields 里写哪些,例如取名称、ISIN、币种、市值和市盈率:
GET /api/symbol_details?country=india&market=NSE&symbol=RELIANCE&fields=name,isin,currency,market_cap_basic,price_earnings_ttm
{
  "status": 0,
  "message": "SUCCESS",
  "data": {
    "price_earnings_ttm": 21.8706594157,
    "country": "india",
    "name": "Reliance Industries Limited",
    "currency": "INR",
    "isin": "INE002A01018",
    "market_cap_basic": 16496165117188
  },
  "total": 0,
  "page": 0,
  "market": "NSE",
  "symbol": "RELIANCE",
  "code": "RELIANCE",
  "interval": null
}

常见问题

NSE 和 BSE 用哪个? 两个都可以,market 分别写 NSE、BSE,产品代码以各自的产品列表为准。信实工业在两个市场的代码都是 RELIANCE,取到的是同一份介绍。

能取中文或印地语的介绍吗? 印度的公司介绍只有英文,language 请写 en。

产品代码里有 & 怎么办? 写进地址时要转成 %26,否则会查不到产品。示例代码用 URLSearchParams 拼参数,已经自动处理。

返回的字段顺序和示例不一样? 字段的先后顺序不固定,按字段名读取即可。

其它国家和市场

换一个国家只要改参数:country 和 market 换成对应的取值,language 以 en 覆盖最全。全部取值见国家与市场参数。想做 K 线图,可以接着看使用美国行情数据API接口怎么合成动态K线。

下一步