본문 바로가기

컴퓨터 활용/구글스프레드시트 응용

구글스프레드시트에서 단일 주식 정보 가져오기 / 엑셀함수로 구현

구글스프레드시트에서 단일 주식 종목의 주식 정보를 가져오는 함수 입니다.
네이버증권의 일별 종목페이지에서 가져왔습니다.

​googlefinance함수 같이 직접 만든 것입니다. 함수의 이름은 getNaverStock() 입니다.

사용법은 다음과 같습니다 .

 

 

 

종목코드는 반드시 넣어야 하고 아이템은 생락하면 배열로 리턴 됩니다.

 

 

 

 

국내 주가 가져오기(잠겨있는 셀은 복사 가능)

국내주가 코스피 ,현재가,전일비,임시등락률,종목코드,시장,등락률,총라인수,2999 삼성전자,59,000,200,-0.34%,005930,코스피,-0.34%,업데이트 일시,1:44:44 SK하이닉스,78,400,1,800,+2.35%,000660,코스피,2.35% 삼성�

docs.google.com


소스는 스크립트에디터에 있습니다

​사용한 내장 함수는 UrlFetchApp 클래스의 fetch 함수 입니다. 웹페이지를 텍스트로 긁어 옵니다.
그리고 자바 스크립트 구문 과 자바스크립트의 정규식 함수를 이용했습니다.

// 네이버 단일 주가 = 메인 페이지 이용

function getNaverStock(code,item) 
{
  
  if(!code) code = "005930"; // 없으면 삼성전자로 
 
  var url = 'https://finance.naver.com/item/main.nhn?code='+code;
  var html = UrlFetchApp.fetch(url).getContentText("euckr"); // euckr 문자셋
    
  var searchstring = '<dl class="blind">';
  // var searchstring2 = '<table summary="PER/EPS 정보" class="per_table">';

  var index = html.search(searchstring);
  
  var value = []; // 최종 리턴 배열변수  
    
  var price  = ""; // 주가 
  var changepct = ""; // 등락률 
  var change = "" // 
  
  if (index >= 0) 
  {
    var pos = index + searchstring.length;
    var t = html.substring(pos);
    var pos2 = t.search('</dl>'); 
    var v = html.substring(pos, pos+pos2);

    var tmp = v.split("</dd>");
    // <dd>현재가 11,050 전일대비 보합 0  0.00 퍼센트</dd>
    // <dd>현재가 56,400 전일대비 상승 2,000 플러스 3.68 퍼센트</dd>
      
    var reg = /현재가 ([0-9,]+) 전일대비 (상승|하락|보합) ([0-9,]+) (플러스|마이너스)* ([0-9\.]+) 퍼센트/g;
    var r = reg.exec(v);
    
    price = parseInt(r[1].replace(",",""));
    
    if(r[2] =="상승") 
      changepct = + r[5]/100;
    else
      changepct = - r[5]/100;
    
    change = parseInt(r[3].replace(",",""));
         
    // 종목명 삼성전자
    var reg = /<dd>종목명(.+)<\/dd>/g;  r = reg.exec(v);  var stockname = r[1].trim();

    
    //<dd>종목코드 005930 코스피</dd>
    var reg = /종목코드 ([0-9A-Z]{6}) (코스피|코스닥)/g;  r = reg.exec(v);   
     var mkt = r[2]; 
    
    //<dd>전일가 54,400</dd>
    var reg = /전일가 ([0-9,]+)/g;  r = reg.exec(v);  var yest = r[1];
    
    //<dd>거래량 22,340,638</dd>
    var reg = /거래량 ([0-9,]+)/g;  r = reg.exec(v);  var volume = r[1];
    
    
    var reg = /([0-9]{4})년 ([0-9]{2})월 ([0-9]{2})일 ([0-9]{2})시 ([0-9]{2})분 기준/g;  r = reg.exec(v);  
    var getDate = r.slice(1,4).join("-") +" " +r.slice(4,6).join(":")+":00"; 

    value.push(stockname);
    value.push(price);
    value.push(change);
    value.push(parseFloat(changepct));
    value.push(yest);
    value.push(volume);
    value.push(mkt);
    value.push(getDate);
  
    var rValue = new Array();
    rValue[0] = value;
  }
  
  
    switch(item)
    {
      case "name" : return stockname; break;
      case "price" : return price; break
      case "changepct" :  return parseFloat(changepct); break
      case "change":  return change; break;
      case "market":  return mkt; break;
      case "yesterday":  return yest; break;
      case "volume" : return volume; break;
      case "기준일시" : return getDate; break;
      default:   return rValue ;  break
    }

  throw "분석실패:"+url;
}

value 변수 같이 return 값이 배열이 되면 구글 스프레드 시트의 옆 방향으로 셀이 채워 집니다.

단점은 실시간 업데이트가 안 되어 수동으로 해줘야 합니다.

전 종목 시세가 필요 없는 사람이면 위 함수를 쓰는 것이 빠를 것 같고 필요한 사람이면 다음 포스팅을 참고 하세요.

 

구글스프레드시트에서 국내주가 가져오기 변경 사항

구글 스프레드 시트에서 국내 주가를 가져오는 방법에 대하여 위에 포스팅에서 언급한 적이 있습니다. ​두...

blog.naver.com