편집 기록

편집 기록
  • 프로필 TaeSun Yoo님의 편집
    날짜2018.08.29

    [node.js] api로 데이터를 가져오고 저장하는 문제


    node.js로 인터넷 데이터를 가져와서 저장하는 프로그램을 만들고 있습니다.

    1초에 한 번씩, 데이터는 api로 받아오고 저장은 csv로 합니다.

    현재 데이터를 받아오게 되면 아래와 같이 데이터가 순서대로 들어오지 않고 뒤섞이는 문제가 발생하고 있습니다.

    02:03:01 02:03:02 02:03:04 02:03:03 02:03:05 02:03:06 02:03:07 02:03:08 02:03:10 02:03:09

    제가 setInterval()을 사용하는데 setInterval에서 안에 들어가는 함수가 끝난 후에 함수를 다시 불러오는 방법 혹은 저런 문제가 생기지 않게 만드는 코딩 방식, 아이디어를 알고 싶습니다.

  • 프로필 알 수 없는 사용자님의 편집
    날짜2018.08.22

    [node.js] api로 데이터를 가져오고 저장하는 문제


    node.js로 인터넷 데이터를 가져와서 저장하는 프로그램을 만들고 있습니다.

    1초에 한 번씩, 데이터는 api로 받아오고 저장은 csv로 합니다.

    현재 데이터를 받아오게 되면 아래와 같이 데이터가 순서대로 들어오지 않고 뒤섞이는 문제가 발생하고 있습니다.

    02:03:01 02:03:02 02:03:04 02:03:03 02:03:05 02:03:06 02:03:07 02:03:08 02:03:10 02:03:09

    제가 setInterval()을 사용하는데 setInterval에서 안에 들어가는 함수가 끝난 후에 함수를 다시 불러오는 방법 혹은 저런 문제가 생기지 않게 만드는 코딩 방식, 아이디어를 알고 싶습니다.

    제가 짠 코드는 아래와 같습니다.

    const fs = require('fs');
    const request = require('request');
    var schedule = require('node-schedule');
    var isOn = false;
    
    // 데이터를 가져오는 함수.
    var getBTCData = function(){
        if(isOn == false){
            isOn = true;
            // 데이터를 불러온다.
            console.time('requestTime:')
            request({
                url: "https://api.gopax.co.kr/trading-pairs/BTC-KRW/book?level=1",
                method: 'GET',
                json :true
            }, (error, response, body) => {
                console.timeEnd('requestTime:');
                // var Data = JSON.parse(body);  // 넣을 데이터 파싱
                // 규칙에 따라 데이터를 파싱하고 data 객체에 넣는다.
                console.time('parsingTime:');
                let date = new Date().toLocaleString();
                let today = date.substring(0,4) + "0" + date.substring(5,6) + date.substring(7,9); // 원하는 형태로 파싱
                let time = new Date().toLocaleString().substring(10,19);
                let bid = body.bid[0][1];
                let bidVolume = body.bid[0][2];
                let ask = body.ask[0][1];
                let askVolume = body.ask[0][2];
                console.timeEnd('parsingTime:');
                console.time('insertTime:');
                let data = `${time},BTC,${bid},${bidVolume},${ask},${askVolume}\n`;
                fs.appendFileSync(`./gopax_BTC_${today}.csv`,data);
                console.timeEnd('insertTime:');
                isOn =false;
            });
        }
    } // end of getBTCData();
    
    setInterval(getBTCData, 1000);
    // var rule = new schedule.RecurrenceRule();
    // rule.second = new schedule.Range(0, 59, 1);
    // schedule.scheduleJob(rule, function(){
    //     getBTCData()
    // });
    
    
    
  • 프로필 TaeSun Yoo님의 편집
    날짜2018.08.20

    [node.js] api로 데이터를 가져오고 저장하는 문제


    node.js로 인터넷 데이터를 가져와서 저장하는 프로그램을 만들고 있습니다.

    1초에 한 번씩, 데이터는 api로 받아오고 저장은 csv로 합니다.

    현재 데이터를 받아오게 되면 아래와 같이 데이터가 순서대로 들어오지 않고 뒤섞이는 문제가 발생하고 있습니다.

    02:03:01 02:03:02 02:03:04 02:03:03 02:03:05 02:03:06 02:03:07 02:03:08 02:03:10 02:03:09

    제가 setInterval()을 사용하는데 setInterval에서 안에 들어가는 함수가 끝난 후에 함수를 다시 불러오는 방법 혹은 저런 문제가 생기지 않게 만드는 코딩 방식, 아이디어를 알고 싶습니다.

    제가 짠 코드는 아래와 같습니다.

    const fs = require('fs');
    const request = require('request');
    var schedule = require('node-schedule');
    var isOn = false;
    
    // 데이터를 가져오는 함수.
    var getBTCData = function(){
        if(isOn == false){
            isOn = true;
            // 데이터를 불러온다.
            console.time('requestTime:')
            request({
                url: "https://api.gopax.co.kr/trading-pairs/BTC-KRW/book?level=1",
                method: 'GET',
                json :true
            }, (error, response, body) => {
                console.timeEnd('requestTime:');
                // var Data = JSON.parse(body);  // 넣을 데이터 파싱
                // 규칙에 따라 데이터를 파싱하고 data 객체에 넣는다.
                console.time('parsingTime:');
                let date = new Date().toLocaleString();
                let today = date.substring(0,4) + "0" + date.substring(5,6) + date.substring(7,9); // 원하는 형태로 파싱
                let time = new Date().toLocaleString().substring(10,19);
                let bid = body.bid[0][1];
                let bidVolume = body.bid[0][2];
                let ask = body.ask[0][1];
                let askVolume = body.ask[0][2];
                console.timeEnd('parsingTime:');
                console.time('insertTime:');
                let data = `${time},BTC,${bid},${bidVolume},${ask},${askVolume}\n`;
                fs.appendFileSync(`./gopax_BTC_${today}.csv`,data);
                console.timeEnd('insertTime:');
                isOn =false;
            });
        }
    } // end of getBTCData();
    
    setInterval(getBTCData, 1000);
    // var rule = new schedule.RecurrenceRule();
    // rule.second = new schedule.Range(0, 59, 1);
    // schedule.scheduleJob(rule, function(){
    //     getBTCData()
    // });