簡體   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