MFC기반의 CPP REST SDK 사용법(코로나앱)

이미지
오늘은 Microsoft 에서 배포한 C++ REST SDK ( 코드명 : 카사블랑카 ) 를 이용해 Http Request 를 하는 내용에 대해 다룹니다. 목표 공공 데이터 포털의 시도별 코로나 정보를 REST API를 이용해 처리   바로 앞 예제에서 파이썬을 이용해 만들어 본 코로나 예제 와 개념은 동일하지만, C++을 이용해 시도해 보았습니다.   간단히 전반적인 개요 를 살펴보면, 1. 공공 데이터 회원 가입 (앞 게시물 참조) 2. 코로나 시도별 정보 권한(키) 획득 3. Microsoft REST SDK를 이용한 요청데이터 생성 및 전송 4. 응답 데이터 문자열(UTF-8) 수신 (XML or JSON), 신청 정보별로 다름 5. XML 파싱 후 MFC CListControl 에 출력 6. 전국 시도별 코로나 정보 획득   쿼리 요청 후 응답 결과는 아래와 같이 처리됩니다. [쿼리 요청 후 응답 데이터 리스트 컨트롤 출력] [응답 데이터 XML 문자열] 프로젝트 생성 과정 은 다음과 같습니다. 1. C++, MFC 대화상자 프로젝트 생성 2. 프로젝트 생성 후 솔루션 탐색기->프로젝트 우클릭 ->NuGet 패키지 관리 3. CPPREST 검색 후 해당 패키지 설치 4. 설치 후 솔루션 폴더 아래 Packages 폴더 설치 확인 이제 Microsoft 에서 만든 Rest SDK 를 이용해 C++로 코드 작성 준비가 완료 되었습니다.   ...

파이썬기반의 COVID-19 시도별 현황 모니터링

이미지
오늘은 공공데이터포털 에서 제공하는 OPEN API 를 이용해, 코로나 바이러스 시도별 감염현황 을 모니터링하는 프로그램을 만들어 보겠습니다. Python언어로 PyQt5 + Matplotlib + reqeusts 모듈을 활용했으며, 완성된 모습은 아래와 같습니다. [COVID-19 모니터링 프로그램]   대한민국 정부에서 제공하는 공공데이터 서버에 필요한 데이터를 Https Request 방식으로 정해진 쿼리를 요청하고 응답 데이터(XML or JSON)를 받아서 구성한 예제 입니다.   기본적인 개발 진행 순서 는 다음을 참조 바랍니다. 1. 공공데이터 포털 회원가입 (정부공개자료에서 정보를 받아오는 방식) 2. 공공데이터 중 관심 분야 검색 ("코로나") 3. 정보 활용신청 후 서비스키 확보 4. OPEN API 서비스 키를 이용해 요청신호 전송 후 응답 (XML)처리 OPEN API 대부분이 요청신호를 보내고, XML, JSON 형태를 응답받는 Http Request 방식으로 사용됩니다. [REQUEST, 요청신호 샘플] http://openapi.data.go.kr/openapi/service/rest/Covid19/getCovid19SidoInfStateJson?serviceKey=서비스키&pageNo=1&numOfRows=10&startCreateDt=20200831&endCreateDt=20200831 [RESPONSE, 응답신호 샘플] <?xml version="1.0" encoding="UTF-8" standalone="yes"?><response>...

PyQt5 기반 동영상 플레이어앱 만들기

이미지
비디오 재생 예전 게시물 중 음악파일 플레이어 를 파이썬으로 만든 예제가 있습니다. Qt 의 QMediaPlayer , QMediaPlaylist class를 이용해 mp3 등 음악 파일을 재생하는 원리입니다. 아래와 같이 사용합니다. from PyQt5.QtWidgets import QApplication from PyQt5.QtMultimedia import QMediaPlaylist, QMediaPlayer, QMediaContent from PyQt5.QtCore import QUrl import sys if __name__ == '__main__': app = QApplication(sys.argv) playlist = QMediaPlaylist() url = QUrl.fromLocalFile('test.mp3') playlist.addMedia(QMediaContent(url)) player = QMediaPlayer() player.setPlaylist(playlist) player.play() sys.exit(app.exec_()) PlayList를 생성해 파일을 추가하고, Player의 play() 함수를 수행하면 음악이 재생됩니다. 이번에는 동영상 플레이어 (Video Player) 를 Python + PyQt5 를 이용해 만들어 보았습니다. 기본 원리는 위와 같지만 비디오을 출력할 위젯 (QVideoWidget)만 설정 하면 동영상이 재생되는 원리입니다. [동영상 재생 프로그램] 주요기능 재생 리스트에 동영상 파일 추가, 삭제 (*.avi. *.mp4, *.mkv, *.mp...

Qt좌표계 이해 및 회전알고리즘

이미지
오늘은 Python + PyQt5 를 이용, 사각형의 회전 을 구현해 봤습니다. [사각형 회전] 우선, 어떤 도형(원, 삼각형, 사각형 등)을 회전하는 방법 을 생각하면 가장 먼저 드는 생각은 아래와 같습니다. 도형 중심 좌표 를 기준으로 도형의 끝점들을 찾아 원하는 각도로 cos, sin 함수를 이용, 회전된 좌표를 찾아낸 후 다시 좌표를 직선으로 이어 그리는 방식 그런데 회전시켜야 할 도형이 많다거나, 글자 등도 회전시켜야 하는 경우는 모든 대상마다 적용해야 하므로 코드가 지저분해지기 쉽습니다. 하지만 Qt의 QPainter class를 이용하면 간편하게 좌표 회전이 가능합니다. QPainter의 rotate() 함수 를 이용하면, 내부적으로 행렬 연산(Matrix) 을 통해 Coordinate System 자체를 회전시킵니다. 회전시킨 후 그림을 그리면 회전된 모습으로 그림이 그려지는 방식입니다. [Qt 좌표변환, 출처 : Qt 홈페이지] 위 그림을 참조하면 회전, 이동, 확대, 축소 까지 모두 가능한 것을 확인해 볼 수 있습니다. 그럼 소스 코드를 살펴보겠습니다. import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import * QApplication.setAttribute(Qt.AA_EnableHighDpiScaling, True) class CWidget(QWidget): def __init_...

C++ 예제 (소켓 클라이언트, 이미지, 파일전송)

이미지
이전 게시물인 소켓 프로그래밍 서버 에 이은 클라이언트 측에 대한 설명입니다. [클라이언트 실행화면] 기본적인 소켓 프로그래밍에 대한 개요, 프로토콜, 실행파일, 전체 소스코드 는 이전 게시물인 서버측을 참조 바랍니다. 제작된 클라이어트와 앞서 만든 서버측간 이미지, 파일 전송 테스트 진행 결과입니다. 이미지 전송 테스트 서버, 클라이어언트 테스트는 내부 사설 IP 환경 (192.168.XXX.XXX) 에서 테스트 되었으며, 외부 네트워크와 테스트시 서버가 실행되는 PC는 공인 IP 로 설정 or 사설 IP의 경우 포트포워딩 이 필요합니다. 서버 실행, 클라이어트 2개 연결 [테스트 준비] 클라이언트 파일 보내기 버튼 클릭 이미지, 파일 필터 선택 [CFileDialog 생성] 테스트 이미지 선택, 전송 test.bmp 파일, (Size 23Mbyte) 서버측에 전달된 후 다시 클라이언트...

이 블로그의 인기 게시물

Qt Designer 설치하기

PyQt5 기반 동영상 플레이어앱 만들기