Skip to content

redchupa/weather-calendar

Repository files navigation

☀️ 기상청 날씨 캘린더 (Weather Calendar)

Update Weather ICS License: MIT Pages Sponsor

🌐 언어: 한국어 · English

🌟 5분만에 세팅하고, 내 폰 캘린더에 매일 한국 날씨를 자동으로 표시하기

기상청 API를 이용해 오늘부터 10일치 한국 날씨 예보를 iCalendar(.ics) 파일로 자동 생성하고, GitHub Actions로 주기적으로 갱신해 Google / Apple / Samsung 캘린더에 URL 구독 으로 띄우는 프로젝트입니다. 위젯 설치도 추가 앱 설치도 필요 없어요. 그냥 평소 쓰던 캘린더 앱에 한 줄 추가만 하면 끝.

모바일 캘린더 적용 예시 (날짜 셀)    모바일 캘린더 적용 예시 (월 뷰)
📱 실제 갤럭시/Google 캘린더 앱 적용 모습 — 매일 날짜 칸에 날씨 이모지 + 최저/최고 기온


💚 처음이라 어렵지 않을까 걱정되시나요?

코딩 안 해도 돼요. 마우스 클릭하고 복사·붙여넣기만 할 줄 알면 누구나 할 수 있어요.

항목 내용
예상 소요 시간 처음이면 15~30분 (API 활용신청 대기 1~2일 별도)
💰 비용 완전 무료 — API·GitHub 모두 무료 플랜으로 평생 사용
🛠 준비물 GitHub 계정, 이메일 계정 1개, 휴대폰(본인인증용)
🆘 막히면? 각 단계마다 흔한 함정과 해결책 적혀 있어요. 정말 안 되면 Issues에 질문 남겨주세요
💡 가장 어려운 부분 시크릿 9개 등록과 모바일 동기화. 둘 다 자세한 안내가 있으니 안심

🚀 처음부터 따라하는 설치 가이드

💡 더 친절한 시각 가이드(좌표 자동 계산기 포함)는 📖 GitHub Pages 가이드 를 참고하세요.

1️⃣ 이 레포를 본인 계정으로 Fork

  1. 이 페이지 우측 상단 [Fork] 버튼 클릭
  2. "Create fork" 누르면 본인 계정에 복사본이 생김
  3. 이후 단계는 모두 본인 계정의 Fork된 레포에서 진행 (원본이 아님)

2️⃣ API 인증키 발급 (두 곳에서 따로)

📌 이 프로젝트는 두 곳의 API를 사용합니다. 둘 다 무료지만 인증키는 별도로 발급받아야 해요.

  • A. 기상청 API 허브 → 날씨/특보/지진/태풍 (KMA_API_KEY)
  • B. 공공데이터포털 → 미세먼지/자외선/꽃가루 (DATA_GO_KR_KEY)

🚨 흔한 함정: 활용신청 버튼을 눌렀는데 "신청 완료" 안내가 안 뜨면 페이지 새로고침(F5) 후 다시 [활용신청] 클릭 하세요. 가끔 첫 요청이 무반응으로 끝나는 일이 있어요. 양쪽 사이트 모두 해당.


🅰 기상청 API 허브에서 KMA_API_KEY 발급

  1. 기상청 API 허브 가입 (이메일 + 휴대폰 본인인증만 있으면 됨, 공동인증서 불필요)
  2. 좌측 메뉴에서 아래 7개 서비스에 각각 "활용 신청" 클릭:
    • 예특보 > 단기예보 › 4.2 초단기예보조회 (정확도 향상용)
    • 예특보 > 단기예보 › 4.3 단기예보조회
    • 예특보 > 중기예보 › 2.2 중기기온조회
    • 예특보 > 중기예보 › 2.3 중기육상예보조회
    • 예특보 > 기상특보 › 2. 특보현황 조회 (특보 이벤트용, wrn_now_data_new.php)
    • 지진/화산 > 국내·외 지진정보 › 2. 지진목록(임의기간의 지진정보) 조회 (eqk_list.php)
    • 태풍 > 태풍정보 › 1.3 태풍정보+예측(시점기준) (typ_now.php)
  3. 상단 [마이페이지] → [인증키 현황] 에서 API Key 값을 복사 (한 줄 긴 문자열)

ℹ️ 활용 신청은 보통 즉시 승인되지만, 가끔 몇 분 걸릴 수 있어요.


🅱 공공데이터포털에서 DATA_GO_KR_KEY 발급

  1. 공공데이터포털 가입

  2. 검색창에 아래 키워드를 입력해서 나오는 3개 API에 각각 [활용신청] 클릭:

    검색 키워드 API 이름 용도
    에어코리아 대기오염정보 한국환경공단_에어코리아_대기오염정보 🌫️ PM10·PM2.5·O3 실측 + 예보
    생활기상지수 기상청_생활기상지수 조회서비스 ☀️ 자외선·식중독·천식 등
    꽃가루 기상청_보건기상지수 조회서비스 (꽃가루농도위험지수) 🌸 참나무·소나무·잡초 꽃가루
  3. 1~2일 내 승인되면 공공데이터포털 마이페이지 인증키 발급현황에서 일반 인증키(Encoding) 복사

💡 하나의 일반 인증키로 위 3개 API 모두 호출 가능합니다. API별로 신청은 따로 하지만 키는 공통.

💡 꽃가루 API는 보건기상지수 가 아니라 꽃가루 로 검색해야 정확히 찾을 수 있어요.

3️⃣ 내 동네의 NX/NY 좌표 + 구역 코드 찾기

기상청은 동네 좌표를 격자(NX, NY)로, 중기예보 구역을 별도 코드(11B10101 식)로 관리해요.

가장 쉬운 방법은 📖 GitHub Pages 가이드3단계 자동 계산기:

  • 가까운 예보 지점을 드롭다운에서 고르고
  • 도로명 주소를 입력하면
  • NX, NY, REG_ID_TEMP, REG_ID_LAND, DATA_GO_KR_REGION 다섯 값이 한 번에 계산돼요

이 값들을 메모해두세요.

4️⃣ GitHub Secrets에 값 등록 (총 9개)

📌 API 인증키는 두 곳에서 따로 발급받아야 합니다:

  1. 기상청 API 허브KMA_API_KEY (Step 2에서 발급)
  2. 공공데이터포털DATA_GO_KR_KEY (마이페이지에서 일반 인증키 발급/조회)

두 키는 별개이며 서로 호환되지 않아요. 둘 다 무료입니다.

본인 Fork 레포에서:

  • Settings 탭 클릭
  • 왼쪽 메뉴 Secrets and variables → Actions 클릭
  • 초록색 [New repository secret] 버튼 클릭
  • 아래 9개를 하나씩 등록 (Name과 Secret 값 모두 입력 후 "Add secret")

필수 시크릿 (9개)

Name 값 (Secret) 어디서 얻나
KMA_API_KEY 기상청 인증키 2단계에서 복사한 값
KMA_NX 단기예보 격자 X (예: 60) 3단계 결과
KMA_NY 단기예보 격자 Y (예: 127) 3단계 결과
REG_ID_TEMP 중기기온 구역 코드 (예: 11B10101) 3단계 결과
REG_ID_LAND 중기육상 구역 코드 (예: 11B00000) 3단계 결과
LOCATION_NAME 캘린더 일정에 표시될 동네 이름 (예: 우리집) 직접 정함
DATA_GO_KR_KEY 공공데이터포털 일반 인증키 (🌫️ 미세먼지 / ☀️ 자외선 / 🌸 꽃가루용) 공공데이터포털 가입 후 아래 3개 API에 모두 활용신청
DATA_GO_KR_REGION 미세먼지 예보 지역명 아래 19개 중 하나
LIVING_AREA_NO 행정표준코드 10자리 (☀️ 자외선·🌸 꽃가루용. 시군구 단위) 행정표준코드 검색 — 예: 시흥 4139000000, 강남구 1168000000

⚠️ 시크릿 이름은 대소문자/오타 주의. 한 글자라도 다르면 워크플로우가 빈 값을 받아 실패해요.

💡 DATA_GO_KR_REGION 가능 값 (에어코리아 표기 그대로): 서울, 부산, 대구, 인천, 광주, 대전, 울산, 세종, 경기북부, 경기남부, 강원영서, 강원영동, 충북, 충남, 전북, 전남, 경북, 경남, 제주

💡 LIVING_AREA_NO 빠르게 찾는 법:

  • GitHub Pages 가이드의 Step 3 자동 계산기에서 추정값 확인
  • 정확한 값은 code.go.kr 법정동코드 검색 → 본인 시군구 입력 → 끝이 000000 으로 끝나는 시군구 단위 코드 사용
  • 또는 아래 자주 쓰는 코드 표에서 골라 쓰기
📋 자주 쓰는 시군구 행정표준코드 (펼치기)

광역시·도 (광역 단위):

지역 코드
서울특별시 1100000000
부산광역시 2600000000
대구광역시 2700000000
인천광역시 2800000000
광주광역시 2900000000
대전광역시 3000000000
울산광역시 3100000000
세종특별자치시 3600000000
강원특별자치도 4200000000
충청북도 4300000000
충청남도 4400000000
전북특별자치도 5200000000
전라남도 4600000000
경상북도 4700000000
경상남도 4800000000
제주특별자치도 5000000000

경기도 주요 시:

지역 코드
수원시 4111000000
성남시 4113000000
의정부시 4115000000
안양시 4117000000
평택시 4122000000
안산시 4127000000
고양시 4128000000
시흥시 4139000000
화성시 4159000000

서울 주요 구:

지역 코드
종로구 1111000000
강남구 1168000000
송파구 1171000000
마포구 1144000000
영등포구 1156000000
강서구 1150000000

본인 지역이 위에 없으면 code.go.kr 법정동코드 검색 에서 검색하세요.

5️⃣ 워크플로우 활성화 & 첫 실행

  1. [Actions] 탭 클릭
  2. (Fork 직후라면) 큰 안내 박스의 "I understand my workflows, go ahead and enable them" 버튼 클릭 (최초 1회만)
  3. 왼쪽 워크플로우 목록에서 Update Weather ICS 선택
  4. 우측의 [Run workflow] 드롭다운 → 초록색 [Run workflow] 버튼 클릭
  5. 30초~1분 정도 기다리면 ✅ 초록 체크 마크가 표시되면서 완료
  6. 레포 루트의 weather.ics 파일이 새 데이터로 업데이트되어 있을 거예요

❌ 만약 ❌ 빨간 X가 뜬다면 → 거의 100% 시크릿 등록 누락/오타. 4단계로 돌아가서 9개 모두 정확히 등록됐는지 확인하세요. (FAQ 참고)

6️⃣ 내 캘린더 앱에 등록하기

(a) ICS의 Raw URL 복사

  1. 본인 레포의 weather.ics 파일 클릭
  2. 우측 상단 [Raw] 버튼 클릭
  3. 주소창 URL 복사
    • 형식: https://raw.githubusercontent.com/<본인아이디>/weather-calendar/main/weather.ics

(b) Google 캘린더 (PC 웹 기준 — 가장 추천)

  1. calendar.google.com 접속
  2. 왼쪽 "다른 캘린더"+ 버튼 클릭
  3. "URL로 만들기" 선택
  4. 위 Raw URL 붙여넣기 → [캘린더 추가]

📱 안드로이드(삼성 갤럭시 포함): Samsung 캘린더가 ICS URL 구독을 직접 지원하지 않으니, PC에서 Google 캘린더에 위 방식으로 추가 → 폰의 Google 캘린더 앱과 자동 동기화하는 게 가장 깔끔합니다.

(c) iPhone / Mac (Apple 캘린더)

  1. iPhone: 설정 → 캘린더 → 계정 → 계정 추가 → 기타 → 구독 캘린더 추가
  2. 서버 칸에 Raw URL 붙여넣기 → 다음 → 저장

7️⃣ 📱 모바일 앱에서 보이지 않을 때 (꼭 확인)

PC 웹 Google 캘린더에선 잘 보이는데 폰 앱에선 안 보이는 경우가 매우 흔합니다. Google이 URL로 추가한 캘린더를 기본적으로 모바일 동기화 목록에 넣지 않기 때문이에요.

❗ 중요: 아래 A → B → C 세 단계를 순서대로 마쳐야 폰에 보입니다. A만 해두고 기다리면 자동 반영 안 돼요.

A. Google "Sync Select" 페이지에서 체크 (PC/브라우저)

  1. 브라우저로 접속: https://calendar.google.com/calendar/syncselect
  2. 본인 Google 계정 로그인 상태에서, 추가한 캘린더(예: 기상청 날씨) 체크박스 ON
  3. [Save] 클릭

이 페이지는 모바일 동기화의 마스터 스위치입니다. 여기서 체크돼 있지 않으면 아래 B/C 단계도 의미가 없어요.

B. 모바일 Google 캘린더 앱에서 "동기화" 켜기

A를 마쳤다고 자동으로 폰에 뜨지 않습니다. 앱에 들어가서 수동으로 동기화를 켜줘야 캘린더 목록에 나타나요.

  1. 폰에서 Google 캘린더 앱 열기
  2. 좌측 상단 ☰ 메뉴설정
  3. 본인 Google 계정 아래에서 기상청 날씨 캘린더 항목 탭
  4. "동기화" 토글 ON
  5. 뒤로 돌아오기

캘린더 이름이 설정 목록에 아예 안 보이면 → A를 안 했거나 저장이 안 된 거예요. 1단계로 돌아가세요.

C. 모바일 앱에서 "표시"(체크박스) 활성화

동기화를 켜도 캘린더 목록에 회색 체크박스로 있을 수 있어요. 체크해야 실제 화면에 표시됩니다.

  1. 좌측 ☰ 메뉴 다시 열기
  2. 캘린더 목록에서 기상청 날씨 좌측 체크박스를 탭해 색이 채워진 상태로 만들기
  3. 메뉴 닫고 월/주 뷰에서 날씨가 보이는지 확인

여기까지 하면 폰에 날씨 캘린더가 정상 표시됩니다. 🎉

다른 환경에서는?

환경 방법
삼성 갤럭시 — Samsung 캘린더 앱 ⚠️ 삼성 캘린더는 구독 캘린더를 표시하지 못 합니다. Google 캘린더 앱을 설치해서 위 A→B→C 진행하세요.
iPhone — 권장(가장 안정적) 구글 거치지 말고 Apple 캘린더에 직접 구독: 설정 → 캘린더 → 계정 → 계정 추가 → 기타 → 구독 캘린더 추가 → 서버에 Raw URL
iPhone — Google 경유 iOS용 Google 캘린더 앱 설치 후 위 A→B→C 진행. iPhone 기본 캘린더 앱에는 안 보입니다 (CalDAV가 구독 캘린더 미동기화)

그래도 안 보일 때 점검 순서

순서 확인할 것
1 PC 웹 Google 캘린더에서 보이는가? → 안 보이면 구독 자체 문제
2 https://calendar.google.com/calendar/syncselect 에서 체크 ON 되어 있나? (A)
3 모바일 앱 설정 → 해당 캘린더 → "동기화" 토글 ON? (B)
4 좌측 메뉴 캘린더 목록 체크박스가 채워져 있나? (C)
5 모바일 앱 완전 종료 후 재실행
6 최대 24시간 기다림. 그래도 안 되면 캘린더 삭제 → 재구독

❓ 자주 묻는 질문 (FAQ)

Q. 첫 실행이 빨간 X(실패)로 끝났어요

99% 시크릿 등록 문제입니다. 다음을 확인하세요:

  • 시크릿 9개 모두 등록됐는지 (Settings → Secrets and variables → Actions)
  • 이름 철자/대소문자가 정확한지 (예: KMA_API_KEYkma_api_key)
  • KMA_API_KEY / DATA_GO_KR_KEY 값에 공백/줄바꿈이 안 섞였는지

수정 후 Actions 탭에서 다시 Run workflow 를 누르면 됩니다.

Q. 캘린더에 등록했는데 날씨가 안 보여요

체크리스트:

  1. 워크플로우가 실제로 성공했는지 — Actions 탭에서 초록 체크 확인
  2. 본인 레포의 weather.ics 파일에 데이터가 들어있는지 확인
  3. PC 웹에선 보이는데 폰에선 안 보이는 경우 → 7️⃣ 모바일 앱에서 보이지 않을 때 섹션 참고 (Google Sync Select 누락이 가장 흔한 원인)
  4. 캘린더 앱 동기화 주기 — Google 캘린더는 URL 구독을 8~24시간 간격으로 갱신합니다
Q. 새 기능을 추가했는데 캘린더에 빨리 반영되지 않아요

Google 자체 캐시 서버가 ICS를 캐시해서, 구독 취소 후 다시 추가해도 옛 데이터를 받게 됩니다.

해결책 — URL 끝에 캐시버스터 파라미터 붙여서 재구독:

https://raw.githubusercontent.com/<본인아이디>/weather-calendar/main/weather.ics?v=2
  • 다음에 또 갱신 안 되면 ?v=3, ?v=4 식으로 숫자 올려가며 재구독
  • 이렇게 하면 Google이 "다른 URL"로 인식해서 새로 fetch함

그래도 안 되면:

  • 직접 import (일회성): raw URL의 ics 파일 다운로드 → Google 캘린더 → 설정 → 가져오기
  • Apple 캘린더로 직접 구독 (자체 캐시 서버 없음, 새로고침 빈도 직접 설정 가능)
  • 그냥 8~24시간 기다리기 (자연 만료)
Q. 자외선/꽃가루가 로그에 HTTP 403 으로 떠요

DATA_GO_KR_KEY 일반 인증키는 하나지만 API별로 따로 활용신청해야 합니다. 공공데이터포털 마이페이지 → 활용신청 현황에서 아래 3개가 모두 승인 상태인지 확인:

  • 한국환경공단_에어코리아_대기오염정보
  • 기상청_생활기상지수 조회서비스(3.0)
  • 기상청_꽃가루농도위험지수 조회서비스(3.0)

세 개 다 검색해야 정확히 찾을 수 있어요 (특히 꽃가루는 보건기상지수 가 아니라 꽃가루 키워드로 검색).

Q. "Node.js 20 is deprecated" 경고가 떠요

무시해도 됩니다. 워크플로우 안에 FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true 설정이 있어서 GitHub이 "이 액션들은 Node 20용인데 Node 24로 강제 실행했다"고 알려주는 단순 경고입니다. 결과는 정상 성공이에요.

Q. 캘린더 추가할 때 "캘린더 공개하기" 옵션이 뭐예요?

이건 Google 캘린더 안의 내 사본을 외부에 공개할지를 묻는 옵션이지, GitHub의 ICS 소스 공개 여부와는 별개입니다. 개인이 본인 폰에서 날씨를 보려는 용도라면 끄세요(기본값). 가족/팀과 공유하거나 블로그에 임베드할 때만 켜면 됩니다.

Q. 데이터는 얼마나 자주 갱신되나요?
  • 기상청 원본: 단기는 매 3시간, 중기는 하루 2회 (06시/18시)
  • 이 레포의 weather.ics: 기본적으로 KST 매 3시간(02·05·08·11·14·17·20·23시) 자동 실행. Actions 첫 활성화만 마치면 추가 작업 필요 없음
  • 캘린더 앱 반영: Google/Apple 모두 8~24시간 캐시 사용 (이 부분만은 사용자가 제어 불가)

⏰ 자동 갱신

기본적으로 .github/workflows/update.ymlschedule:활성화되어 있어 워크플로우는 다음 시점에 자동으로 실행됩니다 (KST 기준):

시각 02:15 05:15 08:15 11:15 14:15 17:15 20:15 23:15

기상청 단기예보 발표 시각(매 3시간) 직후를 노린 스케줄입니다.

on:
  schedule:
    - cron: '15 17,20,23,2,5,8,11,14 * * *'   # KST 기준 매 3시간

💡 자동 실행을 끄고 싶으면 위 두 줄을 # 으로 주석 처리하면 됩니다.

⚠️ 단, 구독한 캘린더 앱은 ICS URL을 자체 캐시 주기(보통 8~24시간) 에 따라 갱신합니다. 소스가 매 3시간 업데이트돼도, 클라이언트 반영은 그보다 느릴 수 있어요.


✨ 어떤 정보가 들어가나요?

📅 예보 정보

  • 🌤️ 단기 D+0~3 시간별 상세 / 중기 D+4~10 일별 요약, 총 11일치 예보
  • 초단기예보(0~6시간) 자동 병합 — 가까운 시간 정확도 향상
  • 🚨 기상특보 자동 연동 — 폭염·호우·한파 등 10종 경보를 별도 일정으로 표시

🌫 대기질 & 보건

  • 🌫️ 미세먼지 PM10·PM2.5·오존 실측 + 일별 예보 (에어코리아)
  • ☀️ 자외선 지수 (오늘 최대) + 5단계 등급
  • 🌸 꽃가루 위험지수 참나무·소나무·잡초 3종 통합

🌌 천문

  • 🌅 일출·일몰 + 시민·천문박명 (외출/촬영 계획용)
  • 🌘 달 위상·조도 + 월출·월몰 (8단계 한글 위상)
  • 🌌 은하수 중심 고도 + 관측 가능 시간대 (별 보기 좋아하는 분용)

💥 재해 알림

  • 🌋 지진 (규모 ≥ 3.0) — 국내·외 구분, 발생 시 자동 캘린더 이벤트
  • 🌀 활성 태풍 — 한반도 영향 시 강조, 진로 예측 6개 시점 포함

🎨 친절한 표현

  • 체감 메시지 ("😊 쾌적해요" / "🥵 더워요" 등 7단계)
  • 보퍼트 풍속 등급 ("잎이 흔들림" / "큰 가지 흔들림" 등 12단계)
  • 16방위 풍향 ("북동에서") + 우산 추천
  • 다음 비 예측, 어제와 비교

🔧 운영

  • 📱 Google·Apple·Samsung·Naver 등 표준 ICS 구독을 지원하는 모든 캘린더 앱 호환
  • 🏠 한국 어느 동네든 격자좌표(NX/NY) + 구역코드만 알면 OK (가이드 페이지에 자동 계산기 내장)
  • 🆓 모든 API 무료 + GitHub Free 플랜으로 완전 무료 운영

📅 ICS 내부 데이터 예시

오늘 이벤트 (캘린더 일정 클릭 시 펼쳐서 보이는 정보):

SUMMARY: ☁️ 16°C/23°C 🟡🟡        ← 날짜 칸에 보이는 짧은 요약

DESCRIPTION:
📍 은계 날씨 (위경도 37.443, 126.813)

⛅ 지금 날씨: 구름많음
기온: 21°C (😊 쾌적해요)
최고 온도: 23°C / 최저 온도: 16°C
습도: 65%
바람: 2 m/s (남실바람 — 잎이 바스락거림) (북서쪽에서)
오전 날씨: ⛅ 구름많음 / 오후 날씨: ☀️ 맑음
오늘은 🌂 우산 챙기는 게 안전해요 (비올 확률 30%)
다음 비🌧 : 예보 기간 내 강수 없음
어제와 비교: 최고기온이 어제보다 1°높아요

😊 오늘 공기는 깨끗해요
미세먼지 (PM10): 25.9 ㎍/㎥ (🟢 좋음)
초미세먼지 (PM2.5): 12.7 ㎍/㎥ (🟢 좋음)
오존(O₃): 0.0 ppm (🟢 좋음)
자외선 (오늘 최대): 5.0 (🟡 보통)
꽃가루 (참나무): 🟡 보통

⛅ 내일은?
최고 24°C (☀️ 따뜻해요) / 최저 14°C (🧥 선선해요)
오전: ☁️ 흐림 / 오후: ☀️ 맑음

☀️ 오늘 해는?
🌅 일출: 오늘 05:27
🌇 일몰: 오늘 19:31
🌆 시민박명: 오늘 04:57 ~ 오늘 20:01
🌃 천문박명: 오늘 03:44 ~ 오늘 21:14

🌗 달은?
위상: 하현달 (조도 27%)
🌒 월출: 내일 02:54
🌘 월몰: 오늘 14:22

🌌 은하수 추적
🔭 지금 상황: 관측불가 — 지평선 아래 (고도 -76.2°)
달 고도: 2.1°
⏰ 오늘 밤 관측 가능 시간대: 오늘 21:14 ~ 내일 03:44

⏱ 시간별 상세
[15시] ☀️ 맑음 23°C (💧60% 🚩2m/s)
[16시] ☁️ 흐림 22°C (💧60% 🚩2m/s)
...

📊 최종 업데이트: 2026-05-12 14:07:58 (KST)

다른 이벤트들:

  • D+1 ~ D+3 (단기): 시간별 상세 (기온/하늘/강수확률/습도/풍속) + 미세먼지 등급
  • D+4 ~ D+10 (중기): 오전/오후 또는 종일 요약 + 강수확률 + 최저/최고 기온
  • 기상특보 (있을 때만): 🚨 폭염경보 (서울) 형태 별도 일정
  • 지진 (규모 3.0+, 7일 이내): 🌋 국내지진 M3.2 (경주) 형태 별도 일정
  • 태풍 (활성 시): 🌀 태풍 KHANUN 28m/s (한반도 영향) + 예측 진로 6개 시점

🗺️ 전체 흐름 한눈에 보기

[기상청 API + 공공데이터포털] ──fetch──> [GitHub Actions: update_calendar.py]
                                                  │
                                                  ▼
                                          [weather.ics 생성]
                                                  │
                                          ──── commit/push ───→ GitHub 저장소
                                                                     │
                                                            Raw URL  │
                                                                     ▼
                                                  [내 스마트폰 캘린더 앱이 URL 구독]

처음 한 번만 세팅해 두면, 그 다음부터는 워크플로우가 ICS를 갱신 → 캘린더 앱이 알아서 동기화 하는 구조라서 손이 안 가요.


🛠 기술 스택

Python 3.12 + 라이브러리:

  • requests, pytz, icalendar — KMA/data.go.kr REST 호출 + ICS 생성
  • astral — 일출/일몰/시민·천문박명/달 위상 계산
  • ephem — 은하수 중심 고도, 정밀 월출/월몰

API 통합 (7종):

  • 기상청 API 허브 (apihub.kma.go.kr)
    • 단기예보 / 초단기예보 (VilageFcstInfoService_2.0)
    • 중기예보 (MidFcstInfoService)
    • 기상특보 (wrn_now_data_new.php)
    • 지진 목록 (eqk_list.php)
    • 태풍 정보+예측 (typ_now.php)
  • 공공데이터포털 (apis.data.go.kr)
    • 에어코리아 대기오염정보 (실측 + 일별 예보)
    • 생활기상지수 V5 — getUVIdxV5 (자외선)
    • 꽃가루농도위험지수 V3 — 참나무·소나무·잡초 3종

인프라:

  • GitHub Actions — cron(매 3시간 KST) / repository_dispatch / workflow_dispatch
  • GitHub Pages — 설정 가이드 (자동 좌표·구역코드 계산기 포함)

📂 파일 구조

.
├── update_calendar.py        # KMA + data.go.kr → 풍부한 ICS 생성 (단일 스크립트)
├── requirements.txt          # Python 의존성 명세
├── weather.ics               # 생성된 캘린더 파일 (Raw URL 구독 대상)
├── .github/workflows/
│   └── update.yml            # 워크플로우 정의 (매 3시간 자동 실행)
├── .gitignore
├── LICENSE                   # MIT
└── docs/                     # GitHub Pages 설정 가이드
    ├── index.html            # 단계별 가이드 + 자동 계산기
    ├── region_codes.json     # 중기예보 지점 목록
    ├── calendar.png          # 모바일 캘린더 적용 예시
    ├── preview-mobile.png    # README 히어로 이미지
    └── secret-example.png    # GitHub Secrets 등록 화면 예시

☕ 후원

이 프로젝트가 도움이 되셨다면 커피 한 잔으로 응원해주세요! 🙏

토스
Toss 후원 QR
PayPal
PayPal 후원 QR

📜 라이선스

MIT License © 2026 redchupa


🙏 출처(Original Author) 이 프로젝트는 @Murianwind 님의 Murianwind/weather-calendar 를 참고하여 제작되었습니다. 원작자께 감사드립니다.

About

기상청 API를 활용한 날씨 캘린더 ICS 생성기

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages