티스토리 뷰
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>