Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1207 commits
Select commit Hold shift + click to select a range
91f07bc
chore: 트렌드 키워드 자동 수집 (2026-07-19 18:46 KST)
github-actions[bot] Jul 19, 2026
69f4c66
📊 blog1 게시 완료 (#199)
github-actions[bot] Jul 19, 2026
0c7f2fd
📊 blog2 게시 완료 (#199)
github-actions[bot] Jul 19, 2026
b2658d8
📊 blog3 게시 완료 (#199)
github-actions[bot] Jul 19, 2026
dcd90e8
chore: 사이트맵 자동 갱신 (2026-07-19 19:39 KST)
github-actions[bot] Jul 19, 2026
fa924d6
🔧 자동 수리 완료 (#137)
github-actions[bot] Jul 19, 2026
3e04445
feat: 드라마 회차별 리뷰 자동 게시 개선 — 블로그 선택 + 분량 기준 완화
claude Jul 19, 2026
b13e560
🤖 봇 응답 (#247)
github-actions[bot] Jul 19, 2026
0204689
🔧 자동 수리 완료 (#138)
github-actions[bot] Jul 19, 2026
b069247
📊 blog1 게시 완료 (#200)
github-actions[bot] Jul 19, 2026
1f1d029
feat: 드라마 회차 리뷰 — 방영 정보 확인 + 예상 시나리오 리뷰 3중 차단
claude Jul 19, 2026
9d05d25
📊 blog2 게시 완료 (#200)
github-actions[bot] Jul 19, 2026
e107b0c
🤖 봇 응답 (#248)
github-actions[bot] Jul 19, 2026
a8679df
📊 blog3 게시 완료 (#200)
github-actions[bot] Jul 19, 2026
7681647
feat: 미방영 회차 발행 예약 — 방영일 익일 자동 작성 + 예약 현황 표시
claude Jul 19, 2026
77721df
🔧 자동 수리 완료 (#139)
github-actions[bot] Jul 19, 2026
c53738e
🤖 봇 응답 (#249)
github-actions[bot] Jul 19, 2026
ce172cb
✅ 포스트 publish: 2026-07-19_SBS드라마김부장7화리뷰_602335f0 (#5)
github-actions[bot] Jul 19, 2026
84a1012
fix: blog-run — 업로드 실패 초안(post_drafts/) git 커밋에 포함
claude Jul 19, 2026
cfe44eb
🤖 봇 응답 (#250)
github-actions[bot] Jul 19, 2026
8071b97
chore: 트렌드 키워드 자동 수집 (2026-07-19 20:56 KST)
github-actions[bot] Jul 19, 2026
67eab29
🤖 봇 응답 (#251)
github-actions[bot] Jul 19, 2026
a196c98
📊 blog1 게시 완료 (#201)
github-actions[bot] Jul 19, 2026
811a0e2
chore: 사이트맵 자동 갱신 (2026-07-19 21:13 KST)
github-actions[bot] Jul 19, 2026
3233ef1
🔧 자동 수리 완료 (#141)
github-actions[bot] Jul 19, 2026
6bbe5e0
🔧 자동 수리 완료 (#143)
github-actions[bot] Jul 19, 2026
5b2a8d6
🤖 봇 응답 (#252)
github-actions[bot] Jul 19, 2026
575da6b
chore: 김부장 회차별 리뷰 blog1·blog3 중복분 8편 삭제
claude Jul 19, 2026
22ed2d4
🤖 봇 응답 (#253)
github-actions[bot] Jul 19, 2026
5d6def5
📊 blog1 게시 완료 (#202)
github-actions[bot] Jul 19, 2026
7c5aa48
📊 blog2 게시 완료 (#202)
github-actions[bot] Jul 19, 2026
0a30974
📊 blog3 게시 완료 (#202)
github-actions[bot] Jul 19, 2026
d15e70a
🤖 봇 응답 (#254)
github-actions[bot] Jul 19, 2026
8674796
🔧 자동 수리 완료 (#145)
github-actions[bot] Jul 19, 2026
efb17e4
🔧 자동 수리 완료 (#147)
github-actions[bot] Jul 19, 2026
d8d4958
🤖 봇 응답 (#255)
github-actions[bot] Jul 19, 2026
5106e82
🔧 자동 수리 완료 (#148)
github-actions[bot] Jul 19, 2026
304cd01
chore: 트렌드 키워드 자동 수집 (2026-07-19 23:58 KST)
github-actions[bot] Jul 19, 2026
b064009
✅ 포스트 publish: 2026-07-19_SBS드라마김부장회차별리뷰_015b2c3f (#7)
github-actions[bot] Jul 19, 2026
b4a862b
🔧 auto-repair: post_drafts 디렉토리 커밋 누락 수정
claude Jul 19, 2026
585e4db
fix: 포스트 미발행 주원인 2건 수정 — 분량 기준 불일치 + 팩트체크 중복 글리치
claude Jul 19, 2026
6172dbd
feat: 글 작성 이미지 정책 — 최소 1장 / 최대 3장
claude Jul 19, 2026
f8c6f60
fix: 전체 점검 — Blogger 토큰 401 폴백 + 타입 힌트 정리
claude Jul 19, 2026
0338e5a
feat: AI 이미지 생성 폴백 — 검색 실패 시 SVG 썸네일 전에 생성형 이미지 시도
claude Jul 19, 2026
7811ce0
feat: 구글 색인 자동 요청 (Indexing 가속) + 색인 현황 대시보드
claude Jul 19, 2026
3116dd8
feat: 유튜브 쇼츠/릴스 스크립트 자동 생성 (소셜 모듈 확장)
claude Jul 19, 2026
8ae62ee
🤖 봇 응답 (#256)
github-actions[bot] Jul 19, 2026
b4a524a
🤖 봇 응답 (#257)
github-actions[bot] Jul 19, 2026
c384c1e
🔧 shorts_generator: JSON 파싱 오류 복구 + max_tokens 증가
claude Jul 19, 2026
0a204e2
🔧 자동 수리 완료 (#149)
github-actions[bot] Jul 19, 2026
95b90eb
🔧 자동 수리 완료 (#150)
github-actions[bot] Jul 19, 2026
d9864a7
🔧 자동 수리 완료 (#151)
github-actions[bot] Jul 19, 2026
a108b70
chore: 트렌드 키워드 자동 수집 (2026-07-20 03:01 KST)
github-actions[bot] Jul 19, 2026
3034d85
chore: 트렌드 키워드 자동 수집 (2026-07-20 05:57 KST)
github-actions[bot] Jul 19, 2026
b297f9b
📊 blog1 게시 완료 (#203)
github-actions[bot] Jul 19, 2026
de0f777
📊 blog2 게시 완료 (#203)
github-actions[bot] Jul 19, 2026
1bfc8b1
📊 blog3 게시 완료 (#203)
github-actions[bot] Jul 19, 2026
3d44558
chore: 게시 후 성과 추적 (2026-07-20)
github-actions[bot] Jul 19, 2026
fac8112
📅 시리즈 발행 예약 처리 (#1)
github-actions[bot] Jul 19, 2026
a091329
chore: 트렌드 키워드 자동 수집 (2026-07-20 09:02 KST)
github-actions[bot] Jul 20, 2026
f992703
🔍 구글 색인 상태 리포트 (#1)
github-actions[bot] Jul 20, 2026
32afed8
fix: 글 작성 점검 — 동일 사진 반복·크로스 블로그 키워드 중복 해결
claude Jul 20, 2026
8d3fe6c
📊 블로그 성과 분석 업데이트 — 2026-07-20 (S/A/B/C 등급 + 실수익 계산)
github-actions[bot] Jul 20, 2026
0819ea8
🤖 봇 응답 (#258)
github-actions[bot] Jul 20, 2026
8bf739a
🔧 자동 수리 완료 (#152)
github-actions[bot] Jul 20, 2026
9da63a9
feat: 블로그별 주제 글 작성 실행 + 주제 맵 수정
claude Jul 20, 2026
8813923
✍️ 블로그별 주제 글 작성 (#1)
github-actions[bot] Jul 20, 2026
579d43c
fix: 시스템 정보 페이지 최신화
claude Jul 20, 2026
3b1cefd
🤖 봇 응답 (#259)
github-actions[bot] Jul 20, 2026
b6cf6fe
🔧 자동 수리 완료 (#153)
github-actions[bot] Jul 20, 2026
a64d0c9
🤖 봇 응답 (#260)
github-actions[bot] Jul 20, 2026
4cf741f
🔧 자동 수리 완료 (#154)
github-actions[bot] Jul 20, 2026
c73d586
fix: 시스템 정보 페이지가 비어 보이던 문제 — 썸네일 페이지 div 닫힘 누락
claude Jul 20, 2026
c21c50d
🤖 봇 응답 (#261)
github-actions[bot] Jul 20, 2026
6db11f5
🔧 자동 수리 완료 (#155)
github-actions[bot] Jul 20, 2026
6b7a9ec
🔎 AdSense 감사 리포트 (#4)
github-actions[bot] Jul 20, 2026
5e66f93
🔧 자동 수리 완료 (#156)
github-actions[bot] Jul 20, 2026
e91071d
🤖 봇 응답 (#262)
github-actions[bot] Jul 20, 2026
b38dd5c
🤖 봇 응답 (#263)
github-actions[bot] Jul 20, 2026
f6958a0
🔧 자동 수리 완료 (#157)
github-actions[bot] Jul 20, 2026
b79b952
chore: 트렌드 키워드 자동 수집 (2026-07-20 14:48 KST)
github-actions[bot] Jul 20, 2026
b59ac3f
📊 blog1 게시 완료 (#204)
github-actions[bot] Jul 20, 2026
0aeedf0
📊 blog2 게시 완료 (#204)
github-actions[bot] Jul 20, 2026
3e6abb3
📊 blog3 게시 완료 (#204)
github-actions[bot] Jul 20, 2026
df892b0
chore: 트렌드 키워드 자동 수집 (2026-07-20 16:50 KST)
github-actions[bot] Jul 20, 2026
40f0c97
feat: 죽은 링크(href=#) 스캔·수정 도구 — AdSense 탐색 정책 대응 (미리보기 실행)
claude Jul 20, 2026
beb1391
🔗 죽은 링크 리포트 (#1)
github-actions[bot] Jul 20, 2026
eec4901
chore: 트렌드 키워드 자동 수집 (2026-07-20 19:44 KST)
github-actions[bot] Jul 20, 2026
e5c6c29
📊 blog1 게시 완료 (#205)
github-actions[bot] Jul 20, 2026
322f354
📊 blog2 게시 완료 (#205)
github-actions[bot] Jul 20, 2026
d21f68f
📊 blog3 게시 완료 (#205)
github-actions[bot] Jul 20, 2026
5ce0d12
chore: 트렌드 키워드 자동 수집 (2026-07-20 22:04 KST)
github-actions[bot] Jul 20, 2026
9ef133a
chore: 트렌드 키워드 자동 수집 (2026-07-21 00:52 KST)
github-actions[bot] Jul 20, 2026
5e01585
🔧 자동 수리 완료 (#158)
github-actions[bot] Jul 20, 2026
aea6dd3
chore: 트렌드 키워드 자동 수집 (2026-07-21 03:56 KST)
github-actions[bot] Jul 20, 2026
8d447d7
chore: 트렌드 키워드 자동 수집 (2026-07-21 06:16 KST)
github-actions[bot] Jul 20, 2026
c5cab49
🔧 자동 수리 완료 (#159)
github-actions[bot] Jul 20, 2026
de2c2fd
🤖 봇 응답 (#264)
github-actions[bot] Jul 20, 2026
7d394f3
🔧 자동 수리 완료 (#160)
github-actions[bot] Jul 20, 2026
5052772
📦 blog1 구주제 글 정리 결과 (#2)
github-actions[bot] Jul 20, 2026
a3cefb1
🔧 자동 수리 완료 (#161)
github-actions[bot] Jul 20, 2026
f2bb430
🤖 봇 응답 (#265)
github-actions[bot] Jul 20, 2026
8a42397
🔎 AdSense 감사 리포트 (#5)
github-actions[bot] Jul 20, 2026
33a919d
📊 blog1 게시 완료 (#206)
github-actions[bot] Jul 20, 2026
c2c0393
📊 blog2 게시 완료 (#206)
github-actions[bot] Jul 20, 2026
6f43617
📊 blog3 게시 완료 (#206)
github-actions[bot] Jul 20, 2026
49b9cff
chore: 게시 후 성과 추적 (2026-07-21)
github-actions[bot] Jul 20, 2026
1d0c91b
📅 시리즈 발행 예약 처리 (#2)
github-actions[bot] Jul 20, 2026
be5eccb
chore: 트렌드 키워드 자동 수집 (2026-07-21 09:01 KST)
github-actions[bot] Jul 21, 2026
7adb4aa
🔍 구글 색인 상태 리포트 (#2)
github-actions[bot] Jul 21, 2026
9a8568e
chore: 트렌드 키워드 자동 수집 (2026-07-21 14:25 KST)
github-actions[bot] Jul 21, 2026
4ee4b8a
🤖 봇 응답 (#266)
github-actions[bot] Jul 21, 2026
3ad887f
🔧 자동 수리 완료 (#162)
github-actions[bot] Jul 21, 2026
b9462df
📊 blog1 게시 완료 (#207)
github-actions[bot] Jul 21, 2026
45de20b
📊 blog2 게시 완료 (#207)
github-actions[bot] Jul 21, 2026
9b27cf4
📊 blog3 게시 완료 (#207)
github-actions[bot] Jul 21, 2026
5e39418
blog2 주제를 국내여행·해외여행·스포츠·스포츠이슈·드라마영화·연예K팝으로 설정
claude Jul 21, 2026
1c53f05
AdSense '탐색' 정책 위반 재발 방지 — href="#" 죽은 링크 원천 차단
claude Jul 21, 2026
21c9f43
🔗 죽은 링크 실제 수정 실행 (승인됨)
claude Jul 21, 2026
ec861b9
🔗 죽은 링크 리포트 (#2)
github-actions[bot] Jul 21, 2026
332179f
🔗 죽은 링크 트리거 dry-run으로 원복
claude Jul 21, 2026
f1b3f35
🔗 죽은 링크 리포트 (#3)
github-actions[bot] Jul 21, 2026
6e6c12c
🤖 봇 응답 (#267)
github-actions[bot] Jul 21, 2026
c62364d
🔧 자동 수리 완료 (#163)
github-actions[bot] Jul 21, 2026
dfb616e
관리봇 업그레이드: 실행 액션 확장 + 상태 인지 + 실행 전 미리보기
claude Jul 21, 2026
f4ab9ad
🔧 자동 수리 완료 (#164)
github-actions[bot] Jul 21, 2026
012d541
🤖 봇 응답 (#268)
github-actions[bot] Jul 21, 2026
b61d729
자동 수리봇 오탐 수정 — 검토 대기 전환을 업로드 실패로 오판하지 않도록
claude Jul 21, 2026
fc22013
chore: 트렌드 키워드 자동 수집 (2026-07-21 16:26 KST)
github-actions[bot] Jul 21, 2026
85439d0
🤖 봇 응답 (#269)
github-actions[bot] Jul 21, 2026
97c1eb8
🔧 자동 수리 완료 (#165)
github-actions[bot] Jul 21, 2026
5cde7fd
학습 시스템 고도화 — 블로그별 breakdown + 실제 성과 데이터 + 추세 감지
claude Jul 21, 2026
da734f5
chore: 트렌드 키워드 자동 수집 (2026-07-21 19:19 KST)
github-actions[bot] Jul 21, 2026
8afc68f
📊 blog1 게시 완료 (#208)
github-actions[bot] Jul 21, 2026
1b88831
📊 blog2 게시 완료 (#208)
github-actions[bot] Jul 21, 2026
48d89cb
📊 blog3 게시 완료 (#208)
github-actions[bot] Jul 21, 2026
0e9e788
chore: 트렌드 키워드 자동 수집 (2026-07-21 21:22 KST)
github-actions[bot] Jul 21, 2026
e10008e
🔧 자동 수리 완료 (#166)
github-actions[bot] Jul 21, 2026
b7bf270
🤖 봇 응답 (#270)
github-actions[bot] Jul 21, 2026
0ff89f6
글 작성 프롬프트에 독자 체류·몰입 강화 지침 추가 (AdSense 준수 범위 내)
claude Jul 21, 2026
a31042c
🤖 봇 응답 (#271)
github-actions[bot] Jul 21, 2026
6815854
🔧 자동 수리 완료 (#167)
github-actions[bot] Jul 21, 2026
efa96f1
🗑 포스트 delete: 2026-07-21_코인투자1년후솔직한이야기_e4417826 (#9)
github-actions[bot] Jul 21, 2026
b8b7457
🗑 포스트 delete: 2026-07-21_코인투자1년후솔직한이야기_8cf0cb3b (#11)
github-actions[bot] Jul 21, 2026
de3f565
🔧 post-action: rebase 충돌 시 retry 루프 stuck 방지
claude Jul 21, 2026
1f94696
🔧 auto-repair.yml 푸시 재시도 루프 강화 — rebase 충돌 자동 해결
claude Jul 21, 2026
06ce2f2
저성과 등급(B/C) 글 삭제 도구 추가 + 성과 분석 멀티블로그 버그 수정
claude Jul 21, 2026
8081fc6
📊 성과 분석 실행 (등급 재계산)
claude Jul 21, 2026
1b93430
📊 블로그 성과 분석 업데이트 — 2026-07-21 (S/A/B/C 등급 + 실수익 계산)
github-actions[bot] Jul 21, 2026
eb0cc99
blog1의 gsc_site_url 오설정 수정 — 실제 서비스 도메인으로 정정
claude Jul 21, 2026
4090c06
📊 성과 분석 재실행 (blog1 GSC 도메인 수정 반영)
claude Jul 21, 2026
9b0e7f4
📊 블로그 성과 분석 업데이트 — 2026-07-21 (S/A/B/C 등급 + 실수익 계산)
github-actions[bot] Jul 21, 2026
b01e421
🤖 봇 응답 (#272)
github-actions[bot] Jul 21, 2026
0b182ca
🔧 자동 수리 완료 (#168)
github-actions[bot] Jul 21, 2026
bd4f166
📊 blog1 게시 완료 (#209)
github-actions[bot] Jul 21, 2026
7fd1acc
chore: 사이트맵 자동 갱신 (2026-07-22 00:07 KST)
github-actions[bot] Jul 21, 2026
7d6fbda
🔧 자동 수리 완료 (#169)
github-actions[bot] Jul 21, 2026
f00de32
chore: 트렌드 키워드 자동 수집 (2026-07-22 00:45 KST)
github-actions[bot] Jul 21, 2026
f282e71
GSC 조회 시 도메인 속성(sc-domain:) 폴백 추가 — blog1 403 원인 해결
claude Jul 21, 2026
47b0ed2
📊 성과 분석 재실행 (GSC 도메인 속성 폴백 반영)
claude Jul 21, 2026
a3fa08a
📊 블로그 성과 분석 업데이트 — 2026-07-21 (S/A/B/C 등급 + 실수익 계산)
github-actions[bot] Jul 21, 2026
a16a7b8
GSC 사이트맵 제출·URL 검사에도 도메인 속성(sc-domain:) 폴백 적용
claude Jul 21, 2026
f512bf1
🔍 gsc-indexing.yml에 push 트리거 추가 (사이트맵 즉시 제출용)
claude Jul 21, 2026
c6e6043
🔍 사이트맵 제출 실행
claude Jul 21, 2026
58e6070
🔍 구글 색인 상태 리포트 (#3)
github-actions[bot] Jul 21, 2026
128ba8d
get_blog_configs() BLOGS_CONFIG 병합 버그 수정 — blogs.json 필드 유실 방지
claude Jul 21, 2026
0831aad
🔍 사이트맵 제출 재실행 (BLOGS_CONFIG 병합 버그 수정 반영)
claude Jul 21, 2026
7188987
🔍 구글 색인 상태 리포트 (#4)
github-actions[bot] Jul 21, 2026
d778b6b
🔑 get-oauth-token.yml에 push 트리거 추가 (MCP 토큰이 workflow_dispatch 권한 없어 대…
claude Jul 21, 2026
f031e7c
🔑 OAuth 1단계 — 인증 URL 생성 실행
claude Jul 21, 2026
fad4c00
🔑 OAuth 인증 URL/토큰을 아티팩트로도 저장 (로그 시크릿 마스킹 우회)
claude Jul 21, 2026
78ae9b3
🔑 OAuth 1단계 재실행 (아티팩트 방식)
claude Jul 21, 2026
34df27c
🔑 OAuth 인증 URL을 git 커밋으로도 노출 (아티팩트 다운로드가 네트워크 정책에 막힘)
claude Jul 21, 2026
7a6069d
🔑 OAuth 1단계 재실행 (git 커밋 방식)
claude Jul 21, 2026
b76f48c
🔑 OAuth 인증 URL 출력 (임시 — 확인 후 삭제 권장)
github-actions[bot] Jul 21, 2026
a0926a8
OAuth redirect_uri를 http://localhost로 변경 — Google이 OOB 흐름 폐지
claude Jul 21, 2026
3ddf8de
🔑 OAuth 1단계 재실행 (localhost redirect_uri)
claude Jul 21, 2026
95602bc
🔑 OAuth 인증 URL 출력 (임시 — 확인 후 삭제 권장)
github-actions[bot] Jul 21, 2026
0d2805c
🔑 OAuth 2단계 — 코드 교환 실행
claude Jul 21, 2026
988c1f8
🔧 자동 수리 완료 (#170)
github-actions[bot] Jul 21, 2026
2af2c1f
chore: 트렌드 키워드 자동 수집 (2026-07-22 03:18 KST)
github-actions[bot] Jul 21, 2026
5d74896
chore: 트렌드 키워드 자동 수집 (2026-07-22 06:16 KST)
github-actions[bot] Jul 21, 2026
6acf24b
📊 blog1 게시 완료 (#210)
github-actions[bot] Jul 21, 2026
b5c4d2b
📊 blog2 게시 완료 (#210)
github-actions[bot] Jul 21, 2026
74d85d3
📊 blog3 게시 완료 (#210)
github-actions[bot] Jul 21, 2026
71cf496
chore: 게시 후 성과 추적 (2026-07-22)
github-actions[bot] Jul 21, 2026
3e89de0
📅 시리즈 발행 예약 처리 (#3)
github-actions[bot] Jul 21, 2026
1f6abc0
chore: 트렌드 키워드 자동 수집 (2026-07-22 08:59 KST)
github-actions[bot] Jul 21, 2026
1fb399e
🔑 임시 OAuth URL 출력 파일 정리
claude Jul 22, 2026
350640a
🔍 사이트맵 제출 재실행 (새 OAuth 토큰 반영)
claude Jul 22, 2026
013f351
🔍 GOOGLE_REFRESH_TOKEN 재검증
claude Jul 22, 2026
0fb3125
🔍 새 GOOGLE_REFRESH_TOKEN 검증
claude Jul 22, 2026
4337012
🔍 GOOGLE_CLIENT_SECRET 업데이트 후 재검증
claude Jul 22, 2026
3633803
🔍 재검증
claude Jul 22, 2026
c9aacc9
🔍 구글 색인 상태 리포트 (#10)
github-actions[bot] Jul 22, 2026
285d61c
chore: 트렌드 키워드 자동 수집 (2026-07-22 14:24 KST)
github-actions[bot] Jul 22, 2026
24f6ffc
🤖 봇 응답 (#273)
github-actions[bot] Jul 22, 2026
90963fd
인증 헬스체크 추가 — Google OAuth 자격증명 만료를 자동 감지
claude Jul 22, 2026
27d282b
OAuth 재인증 런북 작성 — 오늘 겪은 6연쇄 인증 장애 복구 절차 기록
claude Jul 22, 2026
101cd22
📊 blog1 게시 완료 (#211)
github-actions[bot] Jul 22, 2026
e98ca27
📊 blog2 게시 완료 (#211)
github-actions[bot] Jul 22, 2026
93256ea
📊 blog3 게시 완료 (#211)
github-actions[bot] Jul 22, 2026
6c76bb2
⑥ 인증 회귀 테스트 + ⑨ 등급 삭제 측정 게이트 추가
claude Jul 22, 2026
2430891
인시던트 로그 시스템 추가 — 오늘 발생한 6건 장애 기록
claude Jul 22, 2026
d16562c
원클릭 재인증 1단계 자동화 — 인증 헬스체크 카드에서 동의 화면 바로 열기
claude Jul 22, 2026
f6a2c98
chore: 트렌드 키워드 자동 수집 (2026-07-22 16:28 KST)
github-actions[bot] Jul 22, 2026
963b337
자가진단 자동 대조 봇 + 주간 운영 브리핑 기능 추가
claude Jul 22, 2026
8a4f018
개요 페이지에 주간 브리핑 미니 배너 추가
claude Jul 22, 2026
1ad4bb7
트렌드 선점 발행 기능 추가
claude Jul 22, 2026
f804a96
chore: 트렌드 키워드 자동 수집 (2026-07-22 19:18 KST)
github-actions[bot] Jul 22, 2026
6ed10ca
📊 blog1 게시 완료 (#212)
github-actions[bot] Jul 22, 2026
5217926
📊 blog2 게시 완료 (#212)
github-actions[bot] Jul 22, 2026
5f3b8ec
📊 blog3 게시 완료 (#212)
github-actions[bot] Jul 22, 2026
29039ac
📋 주간 운영 브리핑 (#1)
github-actions[bot] Jul 22, 2026
370195a
📋 주간 운영 브리핑 (#2)
github-actions[bot] Jul 22, 2026
2eb62df
🔥 트렌드 선점 후보 갱신 (#1)
github-actions[bot] Jul 22, 2026
d1feb2f
chore: 트렌드 키워드 자동 수집 (2026-07-22 21:24 KST)
github-actions[bot] Jul 22, 2026
8420675
chore: 트렌드 키워드 자동 수집 (2026-07-22 21:26 KST)
github-actions[bot] Jul 22, 2026
6190be9
📊 blog3 게시 완료 (#213)
github-actions[bot] Jul 22, 2026
40317b1
chore: 사이트맵 자동 갱신 (2026-07-22 21:32 KST)
github-actions[bot] Jul 22, 2026
48cc40f
🔧 자동 수리 완료 (#171)
github-actions[bot] Jul 22, 2026
fecaf2a
🔎 AdSense 감사 리포트 (#6)
github-actions[bot] Jul 22, 2026
eba9eea
글작성 고도화 1단계 — 카테고리별 도입부 후킹 지침 분화
claude Jul 22, 2026
37ab628
글작성 고도화 2단계 — 카테고리 태그를 발행 파이프라인 전체에 연결
claude Jul 22, 2026
9e6238e
읽기 난이도 자동 검사 기능 추가
claude Jul 22, 2026
891209d
FAQ 배치 최적화 — 본문 중간에도 FAQ 카드 1개 재배치
claude Jul 22, 2026
be83255
🔧 자동 수리 완료 (#172)
github-actions[bot] Jul 22, 2026
bbc3107
🔥 트렌드 선점 후보 갱신 (#2)
github-actions[bot] Jul 22, 2026
b0b205c
✅ 포스트 publish: 2026-07-22_대통령도택한방식강남에도집주인대출_b2fa04bd (#12)
github-actions[bot] Jul 22, 2026
5d9d238
chore: 트렌드 키워드 자동 수집 (2026-07-23 00:31 KST)
github-actions[bot] Jul 22, 2026
0188aee
🔥 트렌드 선점 후보 갱신 (#3)
github-actions[bot] Jul 22, 2026
c37c3c4
📊 blog3 게시 완료 (#214)
github-actions[bot] Jul 22, 2026
d81ab11
chore: 사이트맵 자동 갱신 (2026-07-23 00:37 KST)
github-actions[bot] Jul 22, 2026
801bf60
🔧 자동 수리 완료 (#173)
github-actions[bot] Jul 22, 2026
18a57c0
📊 blog1 게시 완료 (#215)
github-actions[bot] Jul 22, 2026
8b229df
🔧 자동 수리 완료 (#174)
github-actions[bot] Jul 22, 2026
7a9fd1d
chore: 트렌드 키워드 자동 수집 (2026-07-23 00:43 KST)
github-actions[bot] Jul 22, 2026
4c6abb8
🔥 트렌드 선점 후보 갱신 (#4)
github-actions[bot] Jul 22, 2026
fa09950
🔧 자동 수리 완료 (#175)
github-actions[bot] Jul 22, 2026
519bd73
chore: 트렌드 키워드 자동 수집 (2026-07-23 03:11 KST)
github-actions[bot] Jul 22, 2026
906e635
🔥 트렌드 선점 후보 갱신 (#5)
github-actions[bot] Jul 22, 2026
4d3b388
🔥 트렌드 선점 후보 갱신 (#6)
github-actions[bot] Jul 22, 2026
45c9577
📊 blog1 게시 완료 (#216)
github-actions[bot] Jul 22, 2026
d918a9f
📊 blog2 게시 완료 (#216)
github-actions[bot] Jul 22, 2026
1506862
📊 blog3 게시 완료 (#216)
github-actions[bot] Jul 22, 2026
8ddf507
chore: 게시 후 성과 추적 (2026-07-23)
github-actions[bot] Jul 22, 2026
21c761d
📅 시리즈 발행 예약 처리 (#4)
github-actions[bot] Jul 23, 2026
c7422f0
chore: 트렌드 키워드 자동 수집 (2026-07-23 09:05 KST)
github-actions[bot] Jul 23, 2026
ccb9dea
🔍 구글 색인 상태 리포트 (#11)
github-actions[bot] Jul 23, 2026
813eeea
blog-automation 시스템을 latest에 통합 (unrelated histories 해결)
claude Jul 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/analytics-trigger
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
run-20260721162408
1 change: 1 addition & 0 deletions .github/dead-links-trigger
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
dry-run
1 change: 1 addition & 0 deletions .github/gsc-indexing-trigger
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
verify4-20260722051540
1 change: 1 addition & 0 deletions .github/oauth-token-trigger
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
2_exchange_code:4/0AXEQxICzh5-N1RNFskuv43pD-lr1G-zrbh6uDPmc4HZjN39t7LqH5q-1xNu8u6KDFfIVJg
1 change: 1 addition & 0 deletions .github/topic-posts-trigger
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
2026-07-20T02:41:01Z
27 changes: 22 additions & 5 deletions .github/workflows/auto-repair.yml
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,11 @@ jobs:
working-directory: blog-automation
run: mkdir -p logs

- name: 🔐 인증 헬스체크 (Google OAuth 자격증명 만료 감지)
working-directory: blog-automation
continue-on-error: true
run: python auth_health_check.py

- name: 🔧 자동 진단 및 수리 실행
working-directory: blog-automation
run: |
Expand Down Expand Up @@ -108,6 +113,7 @@ jobs:
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
for f in \
docs/data/auth_health.json \
docs/data/repairs.json docs/data/pending_posts.json \
docs/data/posts.json docs/data/post_registry.json \
docs/data/code_repairs.json \
Expand All @@ -123,8 +129,7 @@ jobs:
blog-automation/post_manager.py \
blog-automation/adsense_validator.py \
blog-automation/main.py \
blog-automation/trend_collector.py \
blog-automation/image_handler.py \
blog-automation/auto_repair.py \
blog-automation/social_publisher.py \
blog-automation/fix_existing_posts.py \
blog-automation/coupang_affiliate.py; do
Expand All @@ -138,9 +143,21 @@ jobs:
git commit -m "🔧 자동 수리 완료 (#${{ github.run_number }})"
_push_ok=0
for i in 1 2 3; do
git pull --rebase --autostash origin claude/blog-automation-system-KAbtE \
&& git push origin claude/blog-automation-system-KAbtE \
&& { _push_ok=1; break; }
git rebase --abort 2>/dev/null || true
if git pull --rebase --autostash origin claude/blog-automation-system-KAbtE; then
git push origin claude/blog-automation-system-KAbtE && { _push_ok=1; break; }
else
if git ls-files -u | grep -q .; then
for cf in docs/data/post_registry.json blog-automation/logs/post_registry.json; do
git checkout --theirs -- "$cf" 2>/dev/null || true
git add -f "$cf" 2>/dev/null || true
done
git rebase --continue --no-edit \
&& git push origin claude/blog-automation-system-KAbtE \
&& { _push_ok=1; break; }
fi
git rebase --abort 2>/dev/null || true
fi
echo "pull+push 재시도 $i/3..."
sleep $((i * 3))
done
Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/blog-analytics.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ on:
schedule:
# 매주 월요일 09:00 KST (UTC 00:00)
- cron: "0 0 * * 1"
push:
branches: [claude/blog-automation-system-KAbtE]
paths: ['.github/analytics-trigger']
workflow_dispatch:
inputs:
dry_run:
Expand Down
10 changes: 10 additions & 0 deletions .github/workflows/bot-reply.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,16 @@ jobs:
system_parts = [
"당신은 블로그 자동화 시스템의 관리봇입니다. Claude Haiku 모델 기반으로 시스템 상태를 분석하고 조언합니다.",
"응답은 간결하고 실용적으로 한국어로 작성하세요.",
"\n액션 제안이 필요하면 응답 끝에 다음 형식의 JSON 블록을 붙이세요 (없으면 생략):\n"
'```actions\n[{"label":"버튼 이름","cmd":"실행:죽은링크스캔"}]\n```\n'
"가능한 cmd 값: 페이지이동:posts, 페이지이동:review, 페이지이동:series, 페이지이동:run, "
"페이지이동:analytics, 페이지이동:dashboard, 페이지이동:system, "
"실행:포스트생성, 실행:자동수리, 실행:진단만, 실행:백업, 실행:애드센스감사, 실행:주간학습, "
"실행:죽은링크스캔, 실행:죽은링크수정, 실행:중복이미지스캔, 실행:중복이미지교체, "
"실행:중복목차정리, 실행:시리즈발행처리, 실행:색인요청, 실행:쇼츠생성.\n"
"실제 콘텐츠를 수정하는 cmd(죽은링크수정, 중복이미지교체)는 먼저 스캔 결과(dead_links 등 컨텍스트)를 "
"설명하고, 사용자가 명확히 동의한 경우에만 제안하세요. 워크플로 실행 cmd는 사용자가 요청·동의한 "
"맥락에서만 제안하세요.",
]
ctx_for_system = {k: v for k, v in ctx.items() if k != 'history'}
if ctx_for_system:
Expand Down
101 changes: 90 additions & 11 deletions .github/workflows/get-oauth-token.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
name: 🔑 Google OAuth 토큰 발급

on:
push:
branches: [claude/blog-automation-system-KAbtE]
paths: ['.github/oauth-token-trigger']
workflow_dispatch:
inputs:
step:
Expand All @@ -24,12 +27,39 @@ on:
required: false
default: ''

permissions:
contents: write

jobs:
get-token:
runs-on: ubuntu-latest
timeout-minutes: 5

steps:
- name: 코드 체크아웃
uses: actions/checkout@v4
with:
ref: claude/blog-automation-system-KAbtE

- name: 실행 모드 결정 (push 트리거 파일 또는 workflow_dispatch 입력)
id: mode
run: |
if [ "${{ github.event_name }}" = "push" ]; then
LINE=$(cat .github/oauth-token-trigger 2>/dev/null | head -1)
if [[ "$LINE" == 2_exchange_code:* ]]; then
echo "step_mode=2_exchange_code" >> "$GITHUB_ENV"
echo "auth_code_value=${LINE#2_exchange_code:}" >> "$GITHUB_ENV"
else
echo "step_mode=1_get_url" >> "$GITHUB_ENV"
echo "auth_code_value=" >> "$GITHUB_ENV"
fi
echo "scope_value=blogger+gsc" >> "$GITHUB_ENV"
else
echo "step_mode=${{ inputs.step }}" >> "$GITHUB_ENV"
echo "auth_code_value=${{ inputs.auth_code }}" >> "$GITHUB_ENV"
echo "scope_value=${{ inputs.scope }}" >> "$GITHUB_ENV"
fi

- name: Python 설정
uses: actions/setup-python@v5
with:
Expand All @@ -39,10 +69,10 @@ jobs:
run: pip install requests -q

- name: 🔗 1단계 — 인증 URL 생성
if: ${{ inputs.step == '1_get_url' }}
if: ${{ env.step_mode == '1_get_url' }}
env:
CLIENT_ID: ${{ secrets.GOOGLE_CLIENT_ID }}
SCOPE_CHOICE: ${{ inputs.scope }}
SCOPE_CHOICE: ${{ env.scope_value }}
run: |
python3 - <<'PYEOF'
import os, urllib.parse
Expand All @@ -58,7 +88,7 @@ jobs:

params = {
"client_id": client_id,
"redirect_uri": "urn:ietf:wg:oauth:2.0:oob",
"redirect_uri": "http://localhost",
"response_type": "code",
"scope": scope,
"access_type": "offline",
Expand All @@ -70,21 +100,58 @@ jobs:
print()
print("아래 URL을 브라우저에서 열고 Google 계정으로 로그인하세요:")
print()
print(url)
print(url) # GitHub 로그에서는 client_id가 자동 마스킹됨 — 실제 값은 업로드되는 아티팩트에서 확인
print()
print("=" * 60)
print("로그인 후 표시되는 '인증 코드'를 복사하세요.")
print("로그인·동의 후 브라우저가 http://localhost/?code=...&scope=... 로 이동하며")
print("'사이트에 연결할 수 없음' 오류 페이지가 뜹니다 (정상 — localhost에 서버가 없어서).")
print("이때 주소창의 URL에서 'code=' 뒤부터 '&scope=' 앞까지를 복사하세요 (URL 디코딩 필요할 수 있음).")
print("그 다음 이 워크플로우를 step=2_exchange_code 로 재실행하고")
print("auth_code 항목에 복사한 코드를 붙여넣으세요.")
print()
print("⚠️ 'redirect_uri_mismatch' 오류가 뜨면 Google Cloud Console → API 및 서비스 →")
print("사용자 인증 정보 → 이 OAuth 클라이언트 → '승인된 리디렉션 URI'에")
print("http://localhost 를 추가해야 합니다.")

# 로그는 시크릿 마스킹으로 client_id가 ***로 가려지므로,
# 아티팩트(네트워크 정책상 다운로드 불가할 수 있음) + git 커밋 파일로 이중 저장
with open("oauth_url.txt", "w") as f:
f.write(url + "\n")
PYEOF

- name: 인증 URL 아티팩트 업로드
if: ${{ env.step_mode == '1_get_url' }}
uses: actions/upload-artifact@v4
with:
name: oauth-auth-url
path: oauth_url.txt
retention-days: 1

- name: 인증 URL 임시 커밋 (client_id는 공개 식별자 — 사용 후 삭제 권장)
if: ${{ env.step_mode == '1_get_url' }}
run: |
cp oauth_url.txt .github/oauth_url_output.txt
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add -f .github/oauth_url_output.txt
if git diff --staged --quiet; then
echo "변경사항 없음"
else
git commit -m "🔑 OAuth 인증 URL 출력 (임시 — 확인 후 삭제 권장)"
for i in 1 2 3; do
git pull --rebase --autostash origin claude/blog-automation-system-KAbtE \
&& git push origin claude/blog-automation-system-KAbtE && break
sleep $((i * 2))
done
fi

- name: 🔄 2단계 — 코드 교환 및 Refresh Token 출력
if: ${{ inputs.step == '2_exchange_code' }}
if: ${{ env.step_mode == '2_exchange_code' }}
env:
CLIENT_ID: ${{ secrets.GOOGLE_CLIENT_ID }}
CLIENT_SECRET: ${{ secrets.GOOGLE_CLIENT_SECRET }}
AUTH_CODE: ${{ inputs.auth_code }}
SCOPE_CHOICE: ${{ inputs.scope }}
AUTH_CODE: ${{ env.auth_code_value }}
SCOPE_CHOICE: ${{ env.scope_value }}
run: |
python3 - <<'PYEOF'
import os, requests
Expand All @@ -102,7 +169,7 @@ jobs:
"code": auth_code,
"client_id": client_id,
"client_secret": client_secret,
"redirect_uri": "urn:ietf:wg:oauth:2.0:oob",
"redirect_uri": "http://localhost",
"grant_type": "authorization_code",
})

Expand All @@ -124,10 +191,22 @@ jobs:
print("=" * 60)
print("✅ Refresh Token 발급 성공!")
print()
print(f"{secret_name} 값:")
print(refresh_token)
print(f"{secret_name} 값: (로그에는 마스킹되어 안 보일 수 있음 — 아티팩트 파일 확인)")
print()
print("=" * 60)
print("이 값을 복사해서:")
print(save_hint)

# refresh_token은 시크릿이 아니라 로그에 마스킹되지 않지만,
# 혹시 모를 노출 최소화를 위해 아티팩트로도 저장 (1일 후 자동 삭제)
with open("oauth_result.txt", "w") as f:
f.write(f"{secret_name}={refresh_token}\n")
PYEOF

- name: Refresh Token 아티팩트 업로드
if: ${{ env.step_mode == '2_exchange_code' }}
uses: actions/upload-artifact@v4
with:
name: oauth-refresh-token
path: oauth_result.txt
retention-days: 1
3 changes: 3 additions & 0 deletions .github/workflows/gsc-indexing.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ on:
# 매일 오전 9시 KST (UTC 00:00)
schedule:
- cron: '0 0 * * *'
push:
branches: [claude/blog-automation-system-KAbtE]
paths: ['.github/gsc-indexing-trigger']
workflow_dispatch:
inputs:
inspect_count:
Expand Down
19 changes: 16 additions & 3 deletions .github/workflows/post-action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -164,9 +164,22 @@ jobs:
git commit -m "$EMOJI 포스트 $ACTION: ${POST_ID:0:40} (#${{ github.run_number }})"
_push_ok=0
for i in 1 2 3; do
git pull --rebase --autostash origin claude/blog-automation-system-KAbtE \
&& git push origin claude/blog-automation-system-KAbtE \
&& { _push_ok=1; break; }
git rebase --abort 2>/dev/null || true
if git pull --rebase --autostash origin claude/blog-automation-system-KAbtE; then
git push origin claude/blog-automation-system-KAbtE && { _push_ok=1; break; }
else
# rebase 충돌 시: 레지스트리 파일을 로컬 커밋(theirs) 버전으로 해결
if git ls-files -u | grep -q .; then
for cf in docs/data/post_registry.json blog-automation/logs/post_registry.json; do
git checkout --theirs -- "$cf" 2>/dev/null || true
git add -f "$cf" 2>/dev/null || true
done
git rebase --continue --no-edit \
&& git push origin claude/blog-automation-system-KAbtE \
&& { _push_ok=1; break; }
fi
git rebase --abort 2>/dev/null || true
fi
echo "pull+push 재시도 $i/3..."
sleep $((i * 3))
done
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,9 @@ tap-testdir*/
!/workspaces/libnpmsearch/
!/workspaces/libnpmteam/
!/workspaces/libnpmversion/

# Blog Automation System
!/blog-automation/
!/docs/data/
!/docs/data/analytics_summary.json
!/serve-dashboard.py
81 changes: 63 additions & 18 deletions blog-automation/.env.example
Original file line number Diff line number Diff line change
@@ -1,18 +1,63 @@
# Claude API
ANTHROPIC_API_KEY="sk-ant-..."

# Google Blogger API (OAuth 2.0)
# Google Cloud Console에서 발급: https://console.cloud.google.com
BLOGGER_CLIENT_ID="your-client-id.apps.googleusercontent.com"
BLOGGER_CLIENT_SECRET="your-client-secret"
BLOGGER_BLOG_ID="1234567890" # 블로그 ID (blogger.com 주소에서 확인)
BLOGGER_REFRESH_TOKEN="" # setup_blogger_auth.py 실행 후 발급

# 블로그 설정
BLOG_LANGUAGE="ko" # ko (한국어) or en (영어)
TREND_COUNTRY="KR" # KR, US, JP 등
POSTS_PER_RUN="1" # 1회 실행 시 발행할 포스트 수
POST_STATUS="live" # live (즉시 발행) or draft (임시저장)

# 스케줄 (cron 형식, 분 시 * * *)
SCHEDULE_CRON="0 9 * * *" # 매일 오전 9시
# ============================================
# 블로그 자동화 시스템 환경 변수 설정
# ============================================
# 이 파일을 복사해서 .env 로 저장 후 값을 입력하세요
# cp .env.example .env

# ---- Anthropic Claude API ----
ANTHROPIC_API_KEY=sk-ant-xxxxxxxxxxxxxxxxxxxxxxxx

# ---- Naver API (https://developers.naver.com) ----
NAVER_CLIENT_ID=your_naver_client_id
NAVER_CLIENT_SECRET=your_naver_client_secret

# ---- Google / Blogger API ----
# Google Cloud Console에서 OAuth2 자격증명 생성
GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
GOOGLE_REFRESH_TOKEN=your_google_refresh_token
BLOGGER_BLOG_ID=your_blogger_blog_id

# ---- AdSense ----
# Google AdSense 관리자 페이지 > 광고 > 광고 단위에서 확인
ADSENSE_CLIENT_ID=ca-pub-XXXXXXXXXXXXXXXX

# ---- ImgBB API (Instagram 이미지 업로드용) ----
# https://api.imgbb.com 에서 무료 API 키 발급
IMGBB_API_KEY=your_imgbb_api_key

# ---- Instagram Graph API ----
# Meta Developer Portal에서 앱 생성 후 취득
INSTAGRAM_ACCESS_TOKEN=your_instagram_access_token
INSTAGRAM_ACCOUNT_ID=your_instagram_account_id

# ---- Threads API ----
# Meta Threads API (Instagram과 동일한 앱에서 취득)
THREADS_ACCESS_TOKEN=your_threads_access_token
THREADS_USER_ID=your_threads_user_id

# ---- TikTok API ----
# TikTok Developer Portal에서 앱 생성
TIKTOK_ACCESS_TOKEN=your_tiktok_access_token
TIKTOK_OPEN_ID=your_tiktok_open_id

# ---- 스케줄 설정 ----
# Cron 표현식 (기본: 매일 오전 8시)
SCHEDULE_CRON=0 8 * * *

# ---- 콘텐츠 설정 ----
# 블로그 언어 (ko: 한국어, en: 영어)
BLOG_LANGUAGE=ko
# 키워드 수집 국가 (KR: 한국, US: 미국)
TREND_COUNTRY=KR
# 한 번에 생성할 포스트 수 (1-5)
POSTS_PER_RUN=3

# ---- 썸네일 설정 ----
THUMBNAIL_WIDTH=1280
THUMBNAIL_HEIGHT=720
THUMBNAIL_OUTPUT_DIR=./output/thumbnails

# ---- 로그 설정 ----
LOG_LEVEL=info
LOG_FILE=./logs/automation.log
Loading