
    zi                       d Z ddlmZ ddlZddlZddlZddlZddlZddlZej                  j                  dd        ej                  ej                  ddej                          ej                  e      ZdZd	Z ej&                  d
ej(                        ZddZddZedk(  r	  ej0                   e              yy# e$ rC ej5                  d        ej6                  ej                          ej8                  d       Y yw xY w)u   
task_718_1_text_post.py
-----------------------
ThreadAuto 5단계 파이프라인으로 텍스트 전용 포스트 1건을 생성하고
Threads에 업로드하는 스크립트.

담당: 토르 (개발2팀 백엔드)
태스크: task-718.1
    )annotationsNz/home/jay/projects/ThreadAutou4   %(asctime)s [%(levelname)s] %(name)s — %(message)sz%Y-%m-%d %H:%M:%S)levelformatdatefmtstreamd   i,  u   [다요죠음임][\.\!\?]?\s*$c           	     f   g }| j                  dd      }t        |      }t        |cxk  xr	 t        k  nc }|s#|j	                  d| dt         dt         d       | j                         }|r|d   nd}t        t        j                  |            }|s|j	                  d| d	       |||||d
S )u  텍스트 검증 결과를 반환한다.

    Returns:
        {
            "pure_char_count": int,   줄바꿈 제외 순수 글자수
            "char_range_ok": bool,    100~300자 범위 여부
            "ending_ok": bool,        한국어 종결어미로 끝나는지 여부
            "last_char": str,         마지막 비공백 문자
            "issues": [str],          문제 목록
        }
    
 u   글자수 범위 위반: u   자 (허용: ~u   자)u*   종결어미 미준수: 마지막 문자='u/   ' (다/요/죠/음/임 등으로 끝나야 함))pure_char_countchar_range_ok	ending_ok	last_charissues)	replacelenCHAR_MINCHAR_MAXappendrstripboolENDING_PATTERNsearch)textr   	pure_textpure_lenr   strippedr   r   s           6/home/jay/workspace/teams/dev2/task_718_1_text_post.pyvalidate_textr!   /   s     FT2&I9~H4H4M1(=
RST\S]]abc {{}H (bI ^**845IB9+  NA  A  	B $&     c                   K   t         j                  d       ddlm}   | d      }t         j                  dt	        j
                  |dd	             t         j                  d
       ddlm}  |       }|j                  |d      }|j                  dd      }|j                  dg       }|j                  di       j                  dd      }t         j                  d|       t         j                  d|       t         j                  d|       t         j                  d       t        |      }t         j                  d|d          t         j                  d|d          t         j                  d|d   |d          |d   r6t         j                  d        |d   D ]  }	t         j                  d!|	        nt         j                  d"       t         j                  d#       dd$lm}
  |
       }|st        d%      t         j                  d&t        |             t         j                  d'       dd(lm}  ||      }|j%                  |       d {   }t         j                  d)       t         j                  d*       t         j                  d+|       t         j                  d)       |||d   |j                  d,d      |j                  d-d      |||d   |d   |d   d.d/}t'        t	        j
                  |dd	             y 7 w)0Nu:   === Step 1: 토픽 선택 (카테고리: 업계동향) ===r   )select_single_topicu   업계동향)categoryu   선택된 토픽:
%sF   )ensure_asciiindentuN   === Step 2: FiveStagePipeline 콘텐츠 생성 (content_type=text_insight) ===)FiveStagePipelinetext_insight)topiccontent_typer   r   hashtagspipeline_metadatareview_scorezN/Au   --- 생성된 텍스트 ---
%su   --- 해시태그 ---
%su   --- 검수 점수 ---
%su    === Step 3: 텍스트 검증 ===u*   순수 글자수 (줄바꿈 제외): %d자r   u   글자수 범위 OK: %sr   u,   종결어미 OK: %s (마지막 문자: '%s')r   r   r   u   검증 이슈 발견:z  - %su#   검증 통과: 모든 조건 충족u'   === Step 4: 액세스 토큰 취득 ===)get_valid_tokenuM   유효한 액세스 토큰이 없습니다. 먼저 인증을 완료하세요.u.   액세스 토큰 획득 완료 (길이: %d자)u5   === Step 5: Threads 텍스트 포스트 업로드 ===)ThreadsClientz<============================================================u%   텍스트 포스트 업로드 성공!zThreads Post ID: %stitler%   )r   r   r   )post_idr   
char_counttopic_titletopic_categoryr-   r/   
validation)loggerinfocontent.topic_selectorr$   jsondumpscontent.five_stage_pipeliner)   generategetr!   warningauth.token_storer0   RuntimeErrorr   
api.clientr1   	post_textprint)r$   r+   r)   pipelineresultr   r-   r/   r7   issuer0   tokenr1   clientr3   outputs                   r    mainrL   [   s     KKLM:8E
KK'EVW)XY
 KK`a= "HUHF

62&D **Z4H::126::>5QL
KK148
KK*H5
KK+\:
 KK23t$J
KK<jIZ>[\
KK):o+FG
KK>
;@WYcdoYpq(./) 	,ENN8U+	, 	9:
 KK9:0Ejkk
KK@#e*M
 KKGH(5!F$$T**G
KK
KK78
KK%w/
KK  !23yy"-))J3$'8#K0 *
F 
$**V%
:;1 +s   ILLB7L__main__u.   실행 중 예외 발생 — 전체 traceback:)file   )r   strreturndict)rQ   None)__doc__
__future__r   asyncior;   loggingresys	tracebackpathinsertbasicConfigINFOstderr	getLogger__name__r8   r   r   compile	MULTILINEr   r!   rL   run	Exceptionerror	print_excexit r"   r    <module>rj      s   #    	 
  2 3
   
,,A::	 
		8	$  =r||L$XU<x zDF   EF	,s   (C AD	D	