본문 바로가기
windows 서버 시스템

PowerShell Open Api 호출 MariaDB insert

by @물비늘 2022. 11. 24.
  • 파워셸 실행 권한 체크

파워셸에서 ExecutionPolicy 명령어 입력.
"Restricted" 라는 결과가 나온다면 스크립트 코드를 제한한다는 의미입니다

 

 

  • 실행권한부여

Set-ExecutionPolicy Unrestricted 또는
Set-ExecutionPolicy RemoteSigned(추천) 명령어 입력

Restricted:
기본 실행 정책으로 개별 명령을 허용하지만 스크립트를 실행하지 않습니다.

Unrestricted:
서명되지 않은 스크립트를 실행할 수 있음
악의적인 스크립트를 실행할 위험이 있음

RemoteSigned:
스크립트를 실행 가능,
이미 실행한 스크립트와 로컬 컴퓨터에 작성한 스크립트에는 디지털 서명이 필요 없음

 

  • 사용한 Open Api

https://www.data.go.kr/data/15084084/openapi.do

 

기상청_단기예보 ((구)_동네예보) 조회서비스

초단기실황, 초단기예보, 단기((구)동네)예보, 예보버전 정보를 조회하는 서비스입니다. 초단기실황정보는 예보 구역에 대한 대표 AWS 관측값을, 초단기예보는 예보시점부터 6시간까지의 예보를,

www.data.go.kr

해당 api를 활용하여 부산 지역에 있는 실시간 풍향 풍속 정보를 MariaDB에 저장하는 파워셸 스크립트를 작성해 스케줄러를 설정 하였다.

 

  • Power Shell Script
# db connect 
$DB_HOST='localhost'
$DB_PORT=3306
$DB_USER='test'
$DB_PASSWD='1234'
$DB_NAME='test'
$DB_TABLE='weather'
$DB_PATH='C:\Program Files\MariaDB 10.4\bin\mysql.exe'

# open api
$SERVICE_KEY='{token}'
$PAGE_NO='1'
$NUM_OF_ROWS='100'
$DATA_TYPE='JSON'
$BASE_DATE = (get-date).AddMinutes(-40).toString("yyyyMMdd");
$BASE_TIME = (get-date).AddMinutes(-40).toString("HHmm" );
$NX='97'
$NY='74'
$SEND_URL="http://apis.data.go.kr/1360000/VilageFcstInfoService_2.0/getUltraSrtNcst?serviceKey=${SERVICE_KEY}&pageNo=${PAGE_NO}&numOfRows=${NUM_OF_ROWS}&dataType=${DATA_TYPE}&base_date=${BASE_DATE}&base_time=${BASE_TIME}&nx=${NX}&ny=${NY}"

# log
$LOG_FILE='C:\Users\Weather\get-weather.log'
$LOG_DATE=(get-date).toString("yyyy-MM-dd HH:mm:ss");

# api 호출 결과 저장
$RESULT = (curl $SEND_URL).Content 

# 결과 json로 변환.
$JSON = ConvertFrom-Json $RESULT
$RESULT_CODE = $JSON.response.header.resultCode
$DATA = $JSON.response.body.items.item

if($RESULT_CODE -eq "00") {
	Add-content $LOG_FILE -value "$LOG_DATE get weather success!"
	$vec = $DATA[5].obsrValue
	$bd = $DATA[5].baseDate
	$bt = $DATA[5].baseTime
	$wsd = $DATA[7].obsrValue
	$compass = ''
	
	if ($vec -ge 0 -and $vec -lt 45) {
		$compass='N'
	} elseif ($vec -ge 45 -and $vec -lt 90) {
		$compass='NE'
	} elseif ($vec -ge 90 -and $vec -lt 135) {
		$compass='E'
	} elseif ($vec -ge 135 -and $vec -lt 180) {
		$compass='SE'
	} elseif ($vec -ge 180 -and $vec -lt 225) {
		$compass='S'
	} elseif ($vec -ge 225 -and $vec -lt 270) {
		$compass='SW'
	} elseif ($vec -ge 270 -and $vec -lt 315) {
		$compass='W'
	} else {
		$compass='NW'
	}
		
	& $DB_PATH --host=$DB_HOST --port=$DB_PORT --user=$DB_USER --password=$DB_PASSWD $DB_NAME `
	-e "INSERT INTO ${DB_TABLE} 
	(created_date, modified_date, vec, wsd, compass, nx, ny, base_date, base_time) 
	VALUES(now(), now(), $vec, $wsd, '$compass', '$NX', '$NY', '$bd', '$bt');"	

} else {
	Add-content $LOG_FILE -value "$LOG_DATE get weather failed! $SEND_URL`n$RESULT"
}

 

  • 스케줄러 설정

작업 만들기 - 가장 높은 수준 권한으로 실행 시킨다.

 

 

트리거 설정 - 시작할 때로 하면 재부팅을 해야 시작되고 예약 시간으로 하면 현재 시간 보다 앞으로 설정해야 바로 시작된다.

 

 

동작 설정 - 프로그램엔 PowerSell프로그램 경로를 설정하고 인수 옵션에 -ExecutionPolicy RemoteSigned -File "C:\Users\Weather\get-weather-data-save.ps1" 입력한다.

댓글