Nordic Crypto 数据 API
本站的公开 JSON 数据源,供应用和其他工具使用。无需账号,也无需 API 密钥。每次构建网站时都会重新生成。
Bitcoin Lightning 节点#
Nordic Crypto 运行一个 Bitcoin Lightning 节点。别名是 Nordic Crypto。实现是 LND,使用 Neutrino 轻客户端模式。无需账号,也无需 API 密钥。
| 节点 | 状态 | 实现 |
|---|---|---|
| Bitcoin Nordic Crypto | 同步中 / 尚未开放通道 | LND(Neutrino 轻客户端模式) |
节点 URI。复制一行。第一行是 IPv4。第二行是同一节点的 IPv6,[2a01:4f8:c01e:36d9::1]:9735。
0225974bb701101a5d4352dcae0f76aa9c1388e482a666e892f462e0e0e4217dd9@91.99.122.75:9735 0225974bb701101a5d4352dcae0f76aa9c1388e482a666e892f462e0e0e4217dd9@[2a01:4f8:c01e:36d9::1]:9735
公钥。
0225974bb701101a5d4352dcae0f76aa9c1388e482a666e892f462e0e0e4217dd9
链上充值地址。
bc1p7zgqhev2zzn45mefzq59gq983379lr0rsymhl558rza9k05y7vsq9mglx7
Electrum 服务器(BCH 和 Nexa)#
Nordic Crypto 为 Bitcoin Cash 和 Nexa 运行 Rostrum Electrum 服务器。钱包和应用可以从中读取余额、交易、UTXO、代币和最新区块,并广播交易。无需账号,也无需 API 密钥。
| 服务器 | 状态 | 区块高度 | 响应时间 | 版本 |
|---|---|---|---|---|
Bitcoin Cashwss://electrum-bch.nordiccrypto.no:50004 | – | – | – | – |
Nexawss://electrum-nexa.nordiccrypto.no:20004 | – | – | – | – |
它们在标准端口上使用 Electrum 协议(JSON-RPC):带 TLS 的 WebSocket(wss),Nexa 为 20004,Bitcoin Cash 为 50004;基于 TCP 的 TLS,Nexa 为 20002,Bitcoin Cash 为 50002。不提供未加密端口。在客户端库中填写主机、端口和协议方案(wss 或 tcp_tls)。方法列表见 Rostrum 协议文档。
websocat wss://electrum-bch.nordiccrypto.no:50004
{"id":1,"method":"blockchain.headers.subscribe","params":[]}
这些服务器运行自己的全节点(Bitcoin Cash Node 和 Nexa),因此其响应不依赖第三方。不做 SPV 校验的客户端在链上内容方面仍需信任我们。我们不保证可用时间。请在列表中保留第二台服务器,若某台在几秒内没有响应就切换过去。
从这里开始#
获取新闻和简报#
curl -fsS https://nordiccrypto.no/api/v1/news.json curl -fsS https://nordiccrypto.no/api/v1/newsletters.json curl -fsS https://nordiccrypto.no/api/v1/newsletters/002.json
绝对 URL 使用公开网站,位于域名根目录:https://nordiccrypto.no/api/v1/news.json。
轮询新稿件#
/api/v1/news/latest.json 收录最新发布的 25 篇稿件,只含 id, published, country, source, source_name, language_code, own_story、标题(title, title_en, title_i18n)和链接(url, html_url, api_url)。这些值与 news.json 中的相同,顺序也相同(最新在前)。无论存档增长多少,这个文件都保持很小,因此应用或推送服务器可以每隔几分钟轮询一次。发送 If-None-Match 并带上上次的 ETag;文件未变时,GitHub Pages 会回答 304 Not Modified。把 id 与你已经见过的比较;generated_at 在每次构建时都会变化。
curl -fsS https://nordiccrypto.no/api/v1/news/latest.json
市场价格#
北欧交易所的价格属于市场数据,不构成投资建议。/api/v1/markets.json 列出每个交易对:代码、基础货币、计价货币、最新价,交易所公布时还有买价和卖价,以及交易所的 id、名称和国家、fetched_at、来源 URL,交易所公布时还有成交量。volume_base 以基础资产计,未指定时间窗口(Firi)。volume_base_24h 和 volume_quote_24h 为过去 24 小时(NBX)。缺失的成交量为 null,而不是零。计价货币为 NOK、SEK、DKK 和 EUR。单个交易所:/api/v1/markets/{exchange}.json(firi、nbx、coinmotion)。单个资产:/api/v1/markets/by-asset/{symbol}.json。没有公开行情接口的交易平台列在 skipped 下,不会给出臆造的价格。
/api/v1/markets/aggregated.json 每个交易对一行。BTC-NOK 不会与 BTC-EUR 一起平均。last 是已公布最新价的算术平均值。mid 是 (bid+ask)/2 的平均值,不会混入 last。只要存在最新价,price 就等于 last,否则等于 mid。min 和 max 使用同一序列。不提供 VWAP。成交量只在同一字段、同一交易对内求和。当 cryptocurrency-icons(CC0 1.0)收录该资产时,logo_url 是其中的 SVG,地址为 /api/v1/markets/logos/{symbol}.svg,否则为 null。按资产划分的文件会重复 aggregated 和图标。
构建过程会抓取各交易所数据。.github/workflows/markets-refresh.yml 大约每小时在 gh-pages 上重写一次 JSON,包括聚合文件和图标。市场页面会重新加载此文件,并在浏览器中直接刷新 Firi 和 Coinmotion,因为这些 API 会发送 Access-Control-Allow-Origin: *。NBX 不发送,因此其数据行以文件为准。gh-pages 分支上的同一文档:raw.githubusercontent.com/jQrgen/nordic-crypto/gh-pages/api/v1/markets.json。
curl -fsS https://nordiccrypto.no/api/v1/markets.json curl -fsS https://nordiccrypto.no/api/v1/markets/aggregated.json
访问统计#
来自 Cloudflare Web Analytics 的汇总访问量和页面浏览量(不使用 Cookie)。/api/v1/stats.json 包含 daily、weekly(ISO)和 monthly 行,只有 visits 和 pageviews。日期按 UTC 计算。在配置好 Web Analytics 站点和刷新令牌之前,该文件为空。.github/workflows/stats-refresh.yml 大约每天在 gh-pages 上重写一次。
curl -fsS https://nordiccrypto.no/api/v1/stats.json
讲座#
在挪威、瑞典、丹麦、芬兰、冰岛、法罗群岛、格陵兰和奥兰举办的关于比特币、加密货币和区块链的公开讲座位于 /api/v1/talks.json,按时间从新到旧排列。单个讲座:/api/v1/talks/{id}.json。单个国家:/api/v1/talks/by-country/{country}.json(NO、SE、DK、FI、IS、FO、GL、AX)。description 由我们撰写。title、日期、时长、频道和演讲者来自 source_url 所在的平台。平台未说明的字段为 null。仅当平台的 oEmbed 响应包含播放器时,embed 才为 true。HTML 页面在点击后才加载播放器:YouTube 通过 youtube-nocookie.com,Vimeo 通过 player.vimeo.com。讲座关联到活动时,event_id 和 calendar_event_id 是同一个活动 id。该活动位于 /api/v1/events/{id}.json(已结束的活动还在 /api/v1/events/previous.json 中),页面为 /calendar/{id}/。活动上的 talk_ids 列出这些讲座。当视频页面未说明日期或地点时会设置 unlink_reason,此时 event_id 为 null。speaker_ids 是“人物名录”中的 id,顺序与 speakers 相同。人物条目位于 /api/v1/orgchart/{id}.json,列出这些讲座以及讲座页面注明的任何所属机构。
多家媒体,一条新闻#
每条新闻有一家主要媒体。报道同一事件的其他媒体列在 also_covered_by 中。sources 先列出主要媒体,再列出其他媒体。每家媒体都有 outlet、outlet_name、url、title(该媒体的标题)、published、lang、country、source_type 和 logo。source_type 取值为 national、regional(地区及地方)、official(司法与官方机构:警方、检察机关、法院、监管机构)或 international。coverage.count 是媒体数量。coverage.by_country 和 coverage.by_source_type 是条形图所用的数量和占比。每种来源类型都会列出,包括数量为零的类型。html_url 是我们这条新闻的页面。url 是主要媒体。Kaupr 仍然只是新闻来源。
活动#
即将举行和已结束的活动位于 /api/v1/events.json。Luma 日历取自每个活动来源的公开订阅 iCal 地址(ics)。不使用 Luma 的城市页面、分类页面和 discover API。单个 Luma 活动页面按 schema.org JSON-LD 读取。服务器配置了 EVENTBRITE_TOKEN 时,通过 v3 API 读取 Eventbrite 的主办方和场地。该令牌不在此数据源中,也未提交到代码库。没有令牌时使用活动页面的 JSON-LD。标题、日期和地点相同即视为同一场活动。已结束的活动保留在数据源中。description.text 是主办方自己的文字,description.lang 是该文字的语言,description.source_url 是其来源页面。如有译文,description.i18n 中会提供。来源没有描述时该字段为 null。掠夺性会议的信息不作为来源。Kaupr 从不担任赞助方。
语言#
英语是默认字段(summary、title、text)。我们已发布的译文位于 summary_i18n、title_i18n、subtitle_i18n、note_i18n、text_i18n 和 about_i18n 中,键为 nn、nb、sv、da、fi 和 is。网站的其他语言在译文发布前使用英语字段。在新闻条目中,title 仍是来源标题,title_en 是我们的英文标题,title_i18n 是我们在北欧语言中的标题。两者不同时,页面先显示页面语言的标题,并在下方显示来源标题。sources 中每家媒体自己的标题保持该媒体的语言。日期采用 ISO 8601 格式。
/api/v1/languages.json 列出网站的所有语言,包含 code、native_name、english_name、rtl、html_lang 和 home。/api/v1/geo-language.json 是首次访问时使用的“国家 → 语言”推测表。IP 所在国家来自 tipworker 的 GET /api/geo(Cloudflare request.cf.country)。不会存储任何信息。语言切换器设置的 nc_lang Cookie 始终优先。
来源标志#
/api/v1/sources.json 中的每家媒体都有 logo_url(PNG 或 WebP 的绝对 URL,绝不会是 SVG,或为 null)和 logo(kind、file_url(原始文件,SVG 或 WebP)、raster_url(与 logo_url 相同)、source_url、author、license、license_url、credit,或为 null)。每条新闻都有 source_logo_url,便于应用在标题旁显示媒体标志。标志来自 Wikimedia Commons(附许可证)或出版方自己的网站。它们是出版方的商标,仅用于标明标题来源。在编辑核实之前,标志保持为 null。
CORS#
GitHub Pages 为这些文件发送 Access-Control-Allow-Origin: *,因此其他网站的页面可以用 fetch() 获取它们。GitHub Pages 不支持自定义响应头文件。请使用带 .json 的文件名;打开目录不会返回 JSON。
编辑方针#
署名为 The Nordic Crypto team。Kaupr(kaupr.io)只是新闻来源,从不担任赞助方。本页任何内容均不构成投资建议。
品牌账号#
/api/v1/meta.json 中的 ios 是 Nordic Crypto iOS 应用的公开 TestFlight 邀请。该应用未在 App Store 上架。apple_tv 说明 TestFlight 版本特别支持 Apple TV。apple_tv_i18n 以网站的每种语言提供这句简短说明。品牌名称始终为 Nordic Crypto。
/api/v1/meta.json 包含供 iOS 应用使用的 social。social.telegram 是 Nordic Crypto 的聊天群:https://t.me/nordiccryptochat。social.x 是品牌账号:https://x.com/nordiccryptobot(@nordiccryptobot),也列为 urls.x。urls.telegram 重复聊天群 URL。urls.rss 是英文新闻订阅源:/rss.xml。每种语言的首页都有自己的 rss.xml。urls.newsletter 是本站的订阅页面。label 是简称(Telegram、X)。name 是英文链接文字。name_i18n 包含 nn、nb、sv、da、fi 和 is。网站的其他语言使用 name。
浏览器通知#
当 workers/push/public.json 中有 Worker URL 时,每页底部的按钮用于 Web Push。在此之前,页面会提示该服务尚未开启,并且不会调用任何 Worker。订阅保存在 Cloudflare Worker 上,而不在这个静态数据源中。每次发布后,该 Worker 上的 GET /api/push/feed.json 会列出相同的批次(标题、简短摘要、URL、国家,以及已有的译文)。一次发布即一个批次。文档中写明 "apns": "not implemented":不支持 Apple Push Notification service。iOS 应用可以定期轮询该数据源。部署 workers/push/ 时会设置 Worker URL;它不是本站上的路径。订阅不在数据源中。本 API 的 /api/v1/news.json 仍是已发布新闻的完整列表。
端点#
每个端点都是对静态 JSON 文件的普通 GET 请求。
| 路径 | 返回内容 |
|---|---|
/api/v1/index.json | Discovery document: every endpoint, with example URLs. |
/api/v1/news.json | Published news and our own stories, newest first. |
/api/v1/news/latest.json | The 25 newest published stories with id, published, country, source and headlines only. For apps and notifiers that poll often; news.json is the full list. |
/api/v1/news/by-country/{country}.json | Published news for one country code: NO, SE, DK, FI, IS, NORDIC or EU. |
/api/v1/news/topics.json | Topic ids present in the published news, with counts. |
/api/v1/newsletters.json | Published newsletter issues, newest first. The list omits the HTML body; the issue URL includes text and html. |
/api/v1/events.json | Public events, soonest start first, including past events. |
/api/v1/events/upcoming.json | Events that have not ended, soonest first. Judged in the event's own offset. |
/api/v1/events/past.json | Finished public events, newest first. Finished events stay in the archive. |
/api/v1/events/previous.json | Previous events, newest finish first. Finished calendar events plus backfilled public events (source backfill). Backfill is not on the calendar or in upcoming or past. |
/api/v1/events/by-country/{country}.json | Public events for one country code. |
/api/v1/talks.json | Public talks on bitcoin, cryptocurrencies and blockchain in the Nordic countries, newest first. A player is embedded on the site only when embed is true (YouTube via youtube-nocookie.com, or the Vimeo player). Unknown fields are null. description is ours; title and the other details come from the platform. |
/api/v1/talks/by-country/{country}.json | Public talks for one country code: NO, SE, DK, FI, IS, FO (Faroe Islands), GL (Greenland) or AX (Åland). |
/api/v1/sources.json | News outlets, justice-system press pages, the public search terms, and event sources. coverage is national, regional, local or justice. region is the place. feed is null when no working RSS, sitemap or index page was verified. method is rss, html, sitemap, search or manual. Event sources name the intake method. Luma calendars use a public iCal subscribe URL. Eventbrite organizers and venues use the v3 API when the server has EVENTBRITE_TOKEN; the token is not in this feed. Without it, event pages are schema.org JSON-LD. icon_url is a public icon from the outlet when one was easy to find. logo_source is the URL the stored logo was fetched from. logo is the checked outlet image for that source id when one is on file, used only to identify the source. Kaupr is marked as a news source only and is never an event sponsor. |
/api/v1/academia.json | Editor-approved courses, student groups, publications and research. |
/api/v1/academia/courses.json | Academia section: courses. |
/api/v1/academia/groups.json | Academia section: groups. |
/api/v1/academia/publications.json | Academia section: publications. |
/api/v1/academia/research.json | Academia section: research. |
/api/v1/academia/{id}.json | One academia row. The id is in academia.json. |
/api/v1/books.json | Published books on bitcoin, crypto and blockchain by Nordic authors or about the Nordic countries. title is the original title. authors are as printed; author_role is "editors" for an edited volume. language is a code (nn, nb, sv, da, fi, en). source is the library catalogue or publisher page where the row was checked. about is our one-line description in English. No cover images. |
/api/v1/developers.json | Open-source developers: technical people in Nordic crypto with public crypto-related code (an own non-fork crypto repo, or merged commits or pull requests in a public crypto project). name is as shown on the code profile. profiles are the GitHub/GitLab/Codeberg/sourcehut profile links. notable has up to three items: kind "repo" (own repo: name, url, stars, language, description, last_push) or kind "contrib" (project, host, url, commits, merged_prs). Stars and counts are from the date in checked. nordic_source is where the Nordic link is shown. whoswho_id links the who's who entry. Only rows the editor approved; a preview build also has pending rows (status "pending"). |
/api/v1/orgchart.json | Published who's who: organisations, people, relations, regulation notes and caveats. A person named on a talk has talk_ids, event_ids and talks. affiliations lists the organisation the talk page stated for that talk, with the talk date when the page gave one, the source URL and the retrieval time. An affiliation the page did not state is omitted. |
/api/v1/orgchart/relations.json | Relations between published who's who entries. |
/api/v1/orgchart/regulation.json | Short regulation status for each Nordic country, as on the who's who page. |
/api/v1/orgchart/relations/{id}.json | One relation from the who's who. |
/api/v1/profiles.json | Public profile links (Wikipedia, X, Wikidata and similar) for people and organisations. |
/api/v1/images.json | Logos and photos used on the public who's who, with licence and credit. These are not newspaper photographs. |
/api/v1/illustrations.json | Pictures used on story cards and story pages. Each record has source, author, license and url. No photograph from another newspaper is included. Outlet logos are in images.json and on each news item as source_logo. |
/api/v1/changelog.json | Site changelog (product changes, not the news), newest first. |
/api/v1/rules.json | How EU crypto rules become law in the five countries. Simplified, not legal advice. Omitted while the page is still a placeholder. |
/api/v1/archive/articles.json | Append-only archive of stories that have been on the public site. removed is true when a story later left the site; the row stays. |
/api/v1/stats.json | Aggregate visitor counts from Cloudflare Web Analytics (no cookies): visits and page views per UTC day, ISO week and calendar month. updated_at is null and the lists are empty until the Web Analytics site and the refresh token are configured. |
/api/v1/markets.json | Nordic exchange prices. Market data, not investment advice. Each ticker names the exchange, fetched_at, the source URL and volume when the exchange published it. NOK, SEK, DKK and EUR only. aggregated is one row per pair. |
/api/v1/markets/aggregated.json | One price per base-quote pair. BTC-NOK is separate from BTC-EUR. last is the mean of published last prices. mid is the mean of bid/ask midpoints and is not blended into last. Volume is summed only within the same field and the same pair. logo_url is a CC0 icon when cryptocurrency-icons includes the asset, otherwise null. |
/api/v1/markets/{exchange}.json | Prices from one included exchange: firi (Norway), nbx (Norway) or coinmotion (Finland). |
/api/v1/markets/by-asset/{symbol}.json | Prices for one asset (the base symbol, such as BTC) on every included Nordic exchange, plus aggregated pairs for each quote currency and logo_url when an icon is available. |
/api/v1/languages.json | Site UI languages: code, native name, English name, rtl, html lang and home URL. |
/api/v1/geo-language.json | Country to default site language. An IP guess only; the nc_lang cookie from the language switcher wins. |
/api/v1/meta.json | Site name, languages, countries, page list, CORS, editorial notes and brand social accounts (social.telegram, social.x). |
不包含的内容#
草稿、编辑队列、被拒绝的新闻、读者爆料、简报订阅者的地址、分析令牌和私人个人数据都不在此数据源中。未知 id 返回网站的普通 404 页面,而不是 JSON 错误。