π λͺ¨λ μΉ΄ν‘ λΈλ¦¬ν v2.1 FINAL
Automated KakaoTalk morning briefing system for daily updates.
π λͺ¨λ μΉ΄ν‘ λΈλ¦¬ν v2.1 FINAL
λ€νλ¦Όνμ μ¬ μ¬λ¬΄μ | λ§€μΌ μ€μ 7μ μλ μΉ΄μΉ΄μ€ν‘ λ°μ‘ μμ€ν
π μλ μ€ν μ€μΌμ€
| μκ° (KST) | μν¬νλ‘μ° | λμ |
|---|---|---|
| 06:50 | refresh-kakao-token | Kakao ν ν° μλ κ°±μ |
| 07:00 | morning-brief | λͺ¨λ λΈλ¦¬ν μΉ΄ν‘ λ°μ‘ |
cron ννμ (UTC κΈ°μ€):
- ν ν° κ°±μ :
'50 21 * * *'β KST 06:50 - λΈλ¦¬ν λ°μ‘:
'0 22 * * *'β KST 07:00
π― μ£Όμ κΈ°λ₯
| κΈ°λ₯ | μΈλΆ μμ‘΄ | λΉκ³ |
|---|---|---|
| π Kakao ν ν° μλ κ°±μ | Kakao OAuth | refresh_token μ¬μ© |
| π’ λννμ μ¬ν κ³΅μ§ ν¬λ‘€λ§ | daaa.or.kr/vtMain.html | 곡μ μ¬μ΄νΈ μ§μ μ€ν¬λν |
| π° κ΅¬κΈ λ΄μ€ 보쑰 μμ§ | Google News RSS | λ¬΄λ£ Β· ν€ λΆνμ |
| ποΈ μμ± λΈλ¦¬ν (TTS) | gTTS | λ¬΄λ£ Β· ν€ λΆνμ |
| π DART 곡μ | DART OpenAPI | μ ν Β· μμ΄λ λμ |
| βοΈ λ μ¨ | Open-Meteo | λ¬΄λ£ Β· ν€ λΆνμ |
| π μ£Όλ§/곡ν΄μΌ κ°μν | β | μλ λͺ¨λ μ ν |
π νμΌ κ΅¬μ‘°
sjbaik0431/claude/
βββ .github/workflows/
β βββ morning-brief.yml # λ§€μΌ 07:00 λΈλ¦¬ν
β βββ refresh-kakao-token.yml # λ§€μΌ 06:50 ν ν° κ°±μ
βββ scripts/
β βββ morning_brief.py # λ©μΈ μ€ν¬λ¦½νΈ
β βββ admin_news_crawler.py # νμ μ¬ν κ³΅μ§ ν¬λ‘€λ¬
β βββ voice_briefing.py # μμ± λΈλ¦¬ν μμ±
β βββ refresh_kakao_token.py # Kakao ν ν° κ°±μ
βββ logs/
β βββ YYYY-MM-DD.md # μΌμΌ μ€ν λ‘κ·Έ
βββ audio/
βββ brief_YYYYMMDD.mp3 # μΌμΌ μμ± νμΌ
π GitHub Secrets λ±λ‘ (νμ 5κ°)
Settings β Secrets and variables β Actions
| Secret | νμ | νλμ² |
|---|---|---|
ANTHROPIC_API_KEY | β | console.anthropic.com |
KAKAO_REST_API_KEY | β | developers.kakao.com |
KAKAO_ACCESS_TOKEN | β | Kakao OAuth μΈκ° ν λ°κΈ (μλ κ°±μ λ¨) |
KAKAO_REFRESH_TOKEN | β | Kakao OAuth μΈκ° μ λμ λ°κΈ |
GH_PAT | β | GitHub PAT (scope: repo) β ν ν° μλ κ°±μ μ© |
DART_API_KEY | β οΈ μ ν | opendart.fss.or.kr |
Kakao ν ν° μ΅μ΄ λ°κΈ μ μ°¨
# 1) μΈκ° μ½λ νλ (λΈλΌμ°μ μμ)
https://kauth.kakao.com/oauth/authorize?client_id={REST_API_KEY}&redirect_uri=https://localhost&response_type=code&scope=talk_message
# 2) ν ν° λ°κΈ
curl -X POST "https://kauth.kakao.com/oauth/token" \
-d "grant_type=authorization_code" \
-d "client_id={REST_API_KEY}" \
-d "redirect_uri=https://localhost" \
-d "code={μΈκ°μ½λ}"
# 3) μλ΅μ access_token, refresh_tokenμ κ° Secretμ λ±λ‘
π― λ©μμ§ μμ
νμΌ (μ~κΈ)
π λ€νλ¦Όνμ μ¬ 04/20 μ
π’ νμ μ¬ μμ 3건
β’ [ν]2026λ
보μκ΅μ‘ μΌμ μλ΄
β’ [ν]νλΉ λ©λΆ κΈ°ν μ°μ₯
β’ νμ μ¬λ² μνλ Ή κ°μ μκ³
νμ±: μ£Όμμ¬νλ³΄κ³ μ
βοΈ μ©μΈ 12~18Β°C κ°μ10%
μ£Όλ§Β·κ³΅ν΄μΌ
π λ€νλ¦Όνμ μ¬ 04/19 μΌ [μ£Όλ§]
π’ νμ μ¬ μμ 1건
β’ [ν]μ£Όλ§ λΉμ§ μλ΄
β
μ©μΈ 10~20Β°C κ°μ30%
μ€λ ν루 μ 보λ΄μΈμ π
β 010-3404-5955
π λ¬Έμ ν΄κ²°
λννμ μ¬ν ν¬λ‘€λ§ κ²°κ³Ό μμ
scripts/admin_news_crawler.pyμλ¨DAAA_NOTICE_CANDIDATESκ²½λ‘ μ‘°μ - μ€μ HTML ꡬ쑰 νμΈ ν μ κ·μ ν¨ν΄(
patterns) μμ
Kakao ν ν° λ§λ£ μ€λ₯
- Refresh Tokenλ λ§λ£λ κ²½μ° μλ μ¬λ°κΈ νμ (2κ°μλ§λ€)
KAKAO_REFRESH_TOKENSecret μ¬λ±λ‘
μΊμ μ΄κΈ°ν (μ 체λ₯Ό μ κ·λ‘ μΈμ)
rm logs/admin_news_cache.json
git commit -am "reset: cache"
git push
μ°λ½μ²: 010-3404-5955 (λ°±μμ§ νμ μ¬) / [email protected]
λ€νλ¦Όνμ μ¬ μ¬λ¬΄μ Β· κ²½κΈ°λ μ©μΈμ κΈ°ν₯ꡬ μ€λ