繁体   English   中英

使用 Node.js 在网页上实时查找比特币的价值

[英]Using Node.js to find the value of Bitcoin on a webpage at real time

我正在尝试制作一个 .js 文件,该文件将不断更新比特币的价格(每五分钟左右)。 我已经尝试了大量不同的网络抓取方法,但它们总是以 null 或什么都不输出。 这是我的最新代码,有什么想法吗?

var express = require('express');
var path = require('path');
var request = require('request');
var cheerio = require('cheerio');
var fs = require('fs');
var app = express();
var url = 'https://blockchain.info/charts/';
var port = 9945;
function BTC() {
    request(url, function (err, res, body) {
        var $ = cheerio.load(body);

        var a = $(".market-price");
        var b = a.text();
        console.log(b);
    })
    setInterval(BTC, 300000)
}

BTC();
app.listen(port);
console.log('server is running on '+port);

它成功地说明了它在哪个端口上运行,这不是问题。 这个例子(输出时)只是在每次函数发生时换行。

更新:我更改了从 Wartoshika 获得的新代码,它停止工作,但我不知道为什么。 这是:

function BTCPrice() {
    request('https://blockchain.info/de/ticker', (error, response, body) => {
        const data = JSON.parse(body);
        var value = (parseInt(data.USD.buy, 10) + parseInt(data.USD.sell, 10)) / 2;

        return value;
    });

};
console.log(BTCPrice());

如果我直接从函数内部拥有它 console.log ,它就可以工作,但是当我拥有它时,console.log 函数的输出它输出未定义。 有什么想法吗?

我宁愿使用 JSON api 来获取当前的比特币值而不是 HTML 解析器。 使用 JSON api,您将获得一个可被浏览器解析的 strait forward 结果集。

结帐汇率 API

网址看起来像https://blockchain.info/de/ticker

工作脚本:

const request = require('request');

function BTC() {

    // send a request to blockchain
    request('https://blockchain.info/de/ticker', (error, response, body) => {

        // parse the json answer and get the current bitcoin value
        const data = JSON.parse(body);
        value = (parseInt(data.THB.buy, 10) + parseInt(data.THB.sell, 10)) / 2;

        console.log(value);
    });
}

BTC();

使用该值作为回调:

const request = require('request');

function BTC() {

    return new Promise((resolve) => {

        // send a request to blockchain
        request('https://blockchain.info/de/ticker', (error, response, body) => {

            // parse the json answer and get the current bitcoin value
            const data = JSON.parse(body);
            value = (parseInt(data.THB.buy, 10) + parseInt(data.THB.sell, 10)) / 2;
            resolve(value);
        });
    });
}

BTC().then(val => console.log(val));

正如另一个答案所述,您应该真正使用 API。 您还应该考虑要索取什么类型的价格。 如果您只想要一种汇总来自多个交易所的价格的指数价格,请使用 CoinGecko API 之类的东西。 此外,如果您需要实时数据,则需要基于 websocket 的 API,而不是 REST API。

如果您需要特定交易所的价格,例如您正在为一个或多个交易所构建交易机器人,则需要直接与每个交易所的 websoceket API 进行通信。 为此,我会推荐Coygo API 之类的东西,这是一个 node.js 包,可将您直接连接到每个交易所的实时数据源。 您想要一些不添加中间人的东西,因为这会增加您的数据的延迟。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM