티스토리 뷰

프로그래밍/MFC

MFC REST

에어버스 2018. 6. 22. 18:14

MFC REST

========================
추가>
2020.01.21 현재 기준 OPEN API서비스 도메인이
http://dart.fss.or.kr 에서 http://opendart.fss.or.kr 로 변경 예정으로 시범서비스 이후 2020.04.01 부터 openDart 로만 서비스 한다고 함.
========================

cpprestsdk 팩키지 이용

cpprestsdk 관련 내용 참조 : http://petra.tistory.com/1228

전자공시(DART) 인증키 받아서 종목 코드로 조회하면 JSON 으로 전송 받는다.

 

<MFC 코드>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
//******DART 조회
#include <cpprest/http_client.h>
#include <cpprest/json.h>
using namespace std;
using namespace web::http;
using namespace web::http::client;
using namespace utility;
//******DART 조회
 
void CMFCRESTTelegramDlg::OnBnClickedButtonDart()
{
    CString strDart인증키 = TEXT("8c================================0d13");
    CString strCompanyCode = TEXT("084180"); // 종목코드
    int nType = 0// 조회 방식 지정
 
    string_t strURL = L"http://dart.fss.or.kr/api/search.json?auth=" + CStringW(strDart인증키);
    strURL += L"&crp_cd=" + CStringW(strCompanyCode) + L"&start_dt=19990101";
    if (nType == 0)
        strURL += L"&dsp_tp=";
    else
        strURL += L"&dsp_tp=l";
    uri_builder b;
    http_client client(strURL);
    auto requestTask = client.request(methods::GET);
    requestTask.wait();
    http_response response = requestTask.get();
    string_t contents = U("페이지가 없습니다.");
    auto v1 = response.extract_json().get(); // JSON 포맷으로 정보 받음
    auto array = v1[U("list")].as_array(); // list 객체가 반복되어 배열로 저장
    int n = array.size();
    string_t* rpt_nm = new string_t[n];
    string strStr;
    CString str;
    std::string s1;
    USES_CONVERSION;
    std::wstring s2(A2W(s1.c_str())); // wstring <- string
    for (int i = 0; i < n; i++)
    {
        rpt_nm[i] = array[i].at(U("rpt_nm")).as_string();
        //strStr = W2A(rpt_nm[i].c_str()); // string <- wstring 
        //cout << i + 1 << ". rpt_nam : " << strStr << endl;
        str = rpt_nm[i].c_str();
        //if (str.Find(TEXT("거래재개")) >= 0 || str.Find(TEXT("거래 재개")) >= 0)
        if (str.Find(TEXT("전환사채")) >= 0 || str.Find(TEXT("거래 재개")) >= 0)
        {
            str = array[i].at(U("crp_nm")).as_string().c_str();
            str += (TEXT("\n"+ CString(rpt_nm[i].c_str()));
            AfxMessageBox(TEXT("거래정지 종목 : "+ str); //SendMsg(str);
            break;
        }
    }
    delete[] rpt_nm;
    //cout << endl << "Total Count : " << n << endl;
}
cs

<실행>

<배포>

위 그림과 같이 MFC 프로젝트 폴더안에 cpprestsdk 관련 NuGet 팩키지를 설치하면 packages 폴더가 만들어진다. MFC 프로젝트는 <그림1> 처럼 V141 이지만, cpprestsdk 가 V140 까지만 지원하고 있어, V140 폴더에 있는 cpprest140_2_9.dll 을 <그림2>와 같이 실행 파일이 있는 폴더에 복사한다.
(디버그용 실행파일이면 cpprest140_2_9d.dll 를 복사한다)

<그림1> 

<그림2>

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30