R과 Narwhal API로 API 키 하나만 있으면 공휴일, 발표일, 경제 데이터, 원자재 현물 가격, 환율, 예측시장 확률을 가져올 수 있습니다. 키는 .Renviron에 보관하고, httr2로 응답을 읽고, 반환된 필드를 R 스크립트에서 사용하세요.
설정할 내용
R은 httr2로 Narwhal REST API를 호출하고 JSON 응답을 읽을 수 있습니다. 재사용 가능한 narwhal() 도우미, 여섯 가지 데이터 영역 호출, pull.R로 예약할 수 있는 스크립트를 얻게 됩니다. 도우미는 기본 URL로 https://api.narwhalapi.com을 사용하며 요청마다 경로와 쿼리 매개변수를 추가합니다. Narwhal 경제 데이터에는 CPI, 인플레이션, GDP, 수익률이 있으며, 여기서의 경제 데이터 호출은 CPI 관측값을 고릅니다.
예제는 응답 영역마다 별도의 R 객체를 둡니다. 공휴일과 발표일은 레코드 목록으로 오고, CPI 관측값, 환율, 예측시장 회의도 마찬가지입니다. 원자재 예제는 price 필드 하나를 읽습니다. 계산할 필드를 고르거나 레코드를 데이터 프레임으로 바꿀 때는 이 응답 형태를 염두에 두세요.
API 키 설정
- 무료 키 만들기 narwhalapi.com/signup에서 키를 만드세요. Narwhal은 데이터 API 전반에 계정 하나와 API 키 하나를 사용합니다.
- 키를 .Renviron에 보관하기 키를 환경 변수 이름
NARWHAL_API_KEY로.Renviron에 넣으세요. 자리 표시자를 본인의 키로 바꾸고, 키는pull.R에 넣지 마세요. 변수 이름은 도우미에서Sys.getenv()에 전달하는 이름과 같아야 합니다. 환경 변수 예제의...는 키가 들어갈 자리 표시자입니다.NARWHAL_API_KEY=... - R 패키지 설치하기 여기 있는 명령으로
httr2와jsonlite를 설치하세요. 요청 도우미는httr2로 GET 요청을 보내고 JSON 본문을 읽습니다.install.packages(c("httr2", "jsonlite"))
코드로 데이터 가져오기
이 코드를 pull.R에 저장하세요. 도우미는 Sys.getenv()로 NARWHAL_API_KEY를 읽고, Authorization: Bearer YOUR_KEY 헤더로 키를 Bearer 토큰으로 보냅니다. 각 호출은 경로를 제공하며, 날짜 범위나 통화 선택이 필요한 호출은 쿼리 매개변수도 제공합니다. 이어지는 영역별 예제에서도 같은 도우미를 사용하세요.
library(httr2)
narwhal <- function(path, ...) {
request("https://api.narwhalapi.com") |>
req_url_path_append(path) |>
req_url_query(...) |>
req_auth_bearer_token(Sys.getenv("NARWHAL_API_KEY")) |>
req_perform() |>
resp_body_json()
}
holidays <- narwhal("v1/calendars/holidays/USA/2026")$holidays
releases <- narwhal("v1/economics/calendar", countries = "USA",
start_date = "2026-11-01", end_date = "2026-11-30",
limit = 100)$releases
cpi <- narwhal("v1/economics/USA/cpi/observations", start = "2025-09")$observations
brent <- as.numeric(narwhal("v1/commodities/spot/BRENT/USD")$price)
fx <- narwhal("v1/fx/rates/USD", currencies = "EUR,IDR")$rates
fed <- narwhal("v1/predictions/policy-paths/federal-reserve")$meetings
cpi_values <- vapply(cpi, function(row) as.numeric(row$value), numeric(1))
n <- length(cpi_values)
mom <- cpi_values[n] / cpi_values[n - 1] - 1
print(round(mom * 100, 2)) # month-on-month change in percent
도우미 안에서 req_url_path_append(path)는 기본 URL에 엔드포인트 경로를 붙이고, req_url_query(...)는 쿼리 인수를 붙입니다. req_auth_bearer_token()은 환경에서 읽은 키를 받습니다. 그다음 호출이 req_perform()과 resp_body_json()을 사용해 응답 본문을 R로 반환합니다. 각 영역 예제처럼 그 본문에서 $로 이름 붙은 필드를 읽으세요.
CPI 계산은 각 관측값의 value를 숫자로 읽습니다. 반환된 목록의 마지막 값을 바로 앞의 값으로 나누고 1을 뺀 다음, 전월 대비 변화를 퍼센트로 출력합니다. 계산 밖에서 관측값의 값을 쓸 때는 period 필드를 각 관측값과 함께 두세요.
레코드 목록을 데이터 프레임으로 바꾸려면 dplyr::bind_rows 또는 do.call(rbind, lapply(x, as.data.frame))를 사용하세요. 여기서 x는 holidays, releases, cpi처럼 변환할 목록입니다. 변환에 해당 영역의 레코드가 전달되도록 먼저 응답 필드를 고르세요.
이 호출에서는 경로와 쿼리 인수를 분리해 둡니다. CPI에서는 경로가 USA CPI 관측값을 고르고 start가 시작 기간을 제공합니다. 환율에서는 경로가 USD를 고르고 currencies가 EUR와 IDR를 제공합니다. 두 호출 모두 도우미의 기본 URL과 Bearer 인증을 사용합니다.
매일 가져오기 예약하기
cron이나 Windows Task Scheduler로 Rscript pull.R를 하루에 한 번 실행하도록 예약하세요. cronR 패키지가 cron 줄을 대신 써 줄 수 있습니다. 필요한 요청은 도우미와 환경 변수 조회와 함께 pull.R에 두어, 예약된 명령이 같은 스크립트를 호출하게 하세요.
Rscript pull.R날짜와 통화 선택은 스크립트에 쓴 그대로 유지됩니다. 예를 들어 발표일 호출은 2026년 11월을 요청하고, 공휴일 호출은 2026년 USA 공휴일을 요청합니다. 매일 일정은 이 요청들을 반복합니다. 예약 방법은 매일 데이터 가져오기 예약하기를 참고하세요.
R의 공휴일
holidays에서 2026년 USA 공휴일을 읽습니다. 각 레코드에는 date와 name이 있으므로 레코드를 데이터 프레임으로 바꿀 때 두 필드를 모두 남기세요. 이 호출은 경로에 국가와 연도를 사용하며 응답에서 공휴일 목록을 읽습니다.
response <- narwhal("v1/calendars/holidays/USA/2026")
holidays <- response$holidays
holidaysR의 발표일
releases에서 2026년 11월 USA 경제 발표일을 읽습니다. 요청에는 국가, 시작일, 종료일, 한도가 들어갑니다. 각 발표에는 at, period, topic, status가 있으므로 R에서 발표 레코드를 사용할 때 이 필드를 함께 두세요.
response <- narwhal("v1/economics/calendar", countries = "USA",
start_date = "2026-11-01", end_date = "2026-11-30", limit = 100)
releases <- response$releases
releasesR의 경제 데이터
observations에서 2025년 9월을 시작 기간으로 하는 USA CPI 관측값을 읽습니다. 각 관측값에는 period와 value가 있습니다. 도우미 예제는 이 값들로 전월 대비 계산을 하므로, 관측값이나 그 결과를 보여 줄 때는 기간을 값 옆에 두세요.
response <- narwhal("v1/economics/USA/cpi/observations", start = "2025-09")
cpi <- response$observations
cpiR의 원자재 현물 가격
price에서 USD 기준 Brent 현물 가격을 읽습니다. 이 호출은 경로에서 원자재와 통화를 고르고, 반환된 가격을 as.numeric()으로 변환합니다. 원자재 현물 코드에는 예를 들어 XAU, XAG, XPT, XPD, XCU, BRENT, WTI가 있습니다.
response <- narwhal("v1/commodities/spot/BRENT/USD")
brent <- as.numeric(response$price)
brentR의 환율
USD를 기준 통화로, EUR와 IDR를 요청 통화로 해서 환율을 읽습니다. 응답 필드는 rates이고, 각 레코드에는 currency와 rate가 있습니다. 목록을 데이터 프레임으로 바꿀 때는 통화 필드를 환율과 함께 두세요.
response <- narwhal("v1/fx/rates/USD", currencies = "EUR,IDR")
fx <- response$rates
fxR의 예측시장 확률
meetings에서 Federal Reserve 정책 금리 경로 응답을 읽습니다. 각 회의에는 resolves_at, p_cut, p_hold, p_hike가 있습니다. 확률을 R로 읽어 올 때는 회의 필드를 함께 두고, 인하, 동결, 인상 필드 옆에 결정 시각도 남기세요.
response <- narwhal("v1/predictions/policy-paths/federal-reserve")
fed <- response$meetings
fed키는 어디에 두나요?
키는 .Renviron에 두고 스크립트에는 절대 넣지 마세요. 도우미는 Bearer 인증을 위해 Sys.getenv("NARWHAL_API_KEY")를 읽습니다. REST와 MCP가 키를 공유하므로, 어느 경로로 Narwhal에 접근하든 같은 계정과 키를 사용합니다.
price가 왜 문자열인가요?
십진수는 문자열로 반환됩니다. Brent 예제처럼 as.numeric()으로 price를 R 계산용 숫자로 바꾸세요. CPI 계산도 변화를 구하려고 값을 나누기 전에 각 관측값의 value를 변환합니다.
에 게시되었습니다.