
    i3                     t   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        ej                  e      ZdZe dZe dZdZej%                  d	       d d
lmZ  ed      Zej%                  d ej,                  edd             ej%                  d       d dlmZ  e       Zej5                  ed      Zej%                  d eej;                                      ej%                  d eej?                  dg                     e edd      5 Z! ejD                  ee!dd       ddd       ej%                  de       ej%                  d       d dl#m$Z$  e$       Z%ej?                  dej?                  dd             Z&g Z'dev rNed   D ]F  Z(e'jS                  e(j?                  dd!      e(j?                  d"e(j?                  d#d!            d$       H ej?                  d%d!      Z*ej?                  d&g       Z+e%jY                  e&e'e*e+e'      Z-ej%                  d( ej,                  e-de.)             ej%                  d*        ej^                  d+      e-i i i dg d,Z0ej%                  d-       e-j?                  d.g       Z1i Z2e1s(d/Z3eji                  e3       e0d0   jS                  e3       nue1D ]p  Z	 ej                  jk                  e      Z6e6d1kD  Z7d2e6e7d3e2e<   e7rej%                  d4ee6       n.d5e d6e6 d7Z3ejq                  e3       e0d0   jS                  e3       r  ee1      d< ee1      d<k\  e2 ee1      d<k\  xr  e<d= e2j{                         D              d>e0d?<   ej%                  d@ ee1       ee1      d<k\          ee1      d<k  re0d0   jS                  dA ee1       dB       ej%                  dC       dDZ>dZ?i Z@e1D ]  Zej                  j                  e      ZB	 ej                  j                  ee?      ZDe> dEeD ZE	 ej                  j                  eEdFG      ZIej                  j                  eIdHI      5 ZKeKj                  ZLeKj                  j?                  dJd!      ZNeLdKk(  Z7eLeNe7dLe@eE<   ej%                  dMe7rdNndOeEeLeN       e7se0d0   jS                  dPeL dQeE        ddd        e@ eSe@      xr  e<dV e@j{                         D              dWe0dX<   ej%                  dY       e-j?                  dZ      ZTeTre-j?                  d[      sUd\e-j?                  d[       d]e-j?                  d^       Z3eji                  e3       e0d0   jS                  e3       de3d_e0d`<   n9ej%                  daeT       d dblUmVZV  eV       ZWeWs1dcZ3eji                  e3       e0d0   jS                  e3       de3d_e0d`<   nddZXe dEeT deeX dfeW ZYej%                  dgeTeX       ej%                  dh        ej                  di       	 ej                  j                  eYdjG      ZIeIj                  dkdl       ej                  j                  eIdmI      5 ZK ej                  eKj                         j                  d            Z_ddd       ej%                  dn ej,                  e_dd             e_j?                  dod!      Z`e`dpk(  Zae_j?                  dqi       Zb ecebed      rebj?                  drg       ng Zeeer e<ds eeD              ndZfd2e_j?                  dt      e`ea eee      eeefe_due0d`<   earej%                  dv       n*dwe` Z3eji                  e3       e0d0   jS                  e3       eer)efs'dxZ3ejq                  e3       e0d0   jS                  e3       eesejq                  dy       e0d?   j?                  dd      Zie0dX   j?                  dd      Zje0d`   j?                  d[d      xr e0d`   j?                  dd      Zkeixr eke0d<   eiejekde0d<    e edd      5 Z! ejD                  e0e!dde.       ddd       ej%                  de        eld        eld        elde-j?                  d[               elde-j?                  dZ               elde-j?                  d^               eld ee1               elde-j?                  d.g                el         eldei         eldej         eldek        e0d`   j?                  do      r/ elde0d`   do            elde0d`   j?                  dd               el         elde0d           e0d0   r eld       e0d0   D ]  ZR eldeR          eld        elde         elde         eld       y# 1 sw Y   xY w# e9$ r7 dd dd3e2e<   d8e Z3eji                  e3       e0d0   jS                  e3       Y <e:$ rHZ;dd d e.e;      d9e2e<   d:e d;e; Z3eji                  e3       e0d0   jS                  e3       Y dZ;[;dZ;[;ww xY w# eF$ r e> dEeB ZEY ?w xY w# 1 sw Y   xY w# ejh                  j                  $ r[Z;e;j                  d e.e;      dRe@eE<   dSe;j                   dQeE Z3eji                  e3       e0d0   jS                  e3       Y dZ;[;dZ;[;wejh                  j                  $ r[Z;d d e.e;j                        dRe@eE<   dTeE d;e;j                   Z3eji                  e3       e0d0   jS                  e3       Y dZ;[;sdZ;[;we:$ rGZ;d d e.e;      dRe@eE<   dUeE d;e; Z3eji                  e3       e0d0   jS                  e3       Y dZ;[;dZ;[;ww xY w# 1 sw Y   	xY w# ejh                  j                  $ rZ; ege;dz      r!e;j                         j                  dd{|      nd!Zhd}e;j                   dQehdd~  Z3eji                  e3       e0d0   jS                  e3       de3e;j                  de0d`<   Y dZ;[;dZ;[;we:$ r=Z;de; Z3eji                  e3       e0d0   jS                  e3       de3d_e0d`<   Y dZ;[;dZ;[;ww xY w# 1 sw Y   FxY w)    Nz/home/jay/projects/ThreadAutoz.%(asctime)s %(name)s %(levelname)s %(message)s)levelformatz$/home/jay/projects/ThreadAuto/outputz/task680_result.jsonz/task680_verification.jsonzhttps://graph.threads.net/v1.0u   === Step 1: 토픽 선택 ===)select_single_topicu   정보제공)categoryu   선택된 토픽: %sF   )ensure_asciiindentuE   === Step 2: FiveStagePipeline 콘텐츠 생성 (약 10분 소요) ===)FiveStagePipelinecardnews)topiccontent_typeu   파이프라인 결과 키: %su   slides 수: %dslideswzutf-8)encodingu!   파이프라인 결과 저장: %suE   === Step 3+4: 카드뉴스 렌더링 + Threads Carousel 업로드 ===)ThreadsPublishertopic_idtitleu   보험 정보 textsubtitle)r   descriptioncaptionhashtags)r   itemsr   r   contentu   발행 결과: %s)r   defaultu   === Step 5: 검증 시작 ===z%Y-%m-%dT%H:%M:%S)	timestamppublish_resultstep1_image_filesstep2_image_urlsstep3_threads_apioverall_successfailure_reasonsu5   --- 검증 1: PNG 파일 존재 및 크기 확인 ---image_pathsu8   image_paths가 비어 있음 — 렌더링 실패 의심r#   i (  T)exists
size_bytesoku"   이미지 파일 OK: %s (%d bytes)u    이미지 파일 크기 부족: z (z bytes < 10KB)u   이미지 파일 없음: )r%   r&   r'   erroru    이미지 파일 확인 오류: u    —    c              #   >   K   | ]  }|j                  d         ywr'   Nget.0vs     0/home/jay/workspace/teams/dev2/task-680.1_run.py	<genexpr>r2   s   s     +[AAEE$K+[   )countminimum_requiredcount_okfilesall_okr   u1   이미지 파일 수: %d (최소 3장 필요: %s)u!   이미지 파일이 3장 미만: u   장u:   --- 검증 2: 이미지 URL HTTP HEAD 접근성 확인 ---z,https://aidevserver.tail2cdab6.ts.net/images/HEAD)method   )timeoutzContent-Type   )statusr   r'   u.   URL 접근 %s: %s (status=%d, content_type=%s)OKFAILu   URL 접근 실패 (HTTP z): )r?   r'   r(   u   URL HTTP 오류 (u   URL 접근 불가 (URLError): u   URL 확인 오류: c              #   >   K   | ]  }|j                  d         ywr+   r,   r.   s     r1   r2   r2      s     'Rd'Rr3   )urlsr8   r    uD   --- 검증 3: Threads API 게시물 조회 및 media_type 검증 ---threads_post_idsuccessu0   업로드 실패 또는 post_id 없음. success=z, error=r(   )rE   r(   r!   zThreads post_id: %s)get_valid_tokenu   액세스 토큰 취득 실패z%id,media_type,children{id,media_type}z?fields=z&access_token=u%   Threads API 조회: GET /%s?fields=%su#   Threads API 처리 대기 (5초)...   GETAcceptzapplication/json   u   Threads API 응답: %s
media_typeCAROUSEL_ALBUMchildrendatac              #   D   K   | ]  }|j                  d       dk(    yw)rK   IMAGENr,   )r/   cs     r1   r2   r2      s     $[QUU<%8G%C$[s    id)rE   post_idrK   is_carousel_albumchildren_countrM   children_all_imageraw_responseu*   검증 성공: media_type = CAROUSEL_ALBUMu>   media_type 검증 실패: 기대값=CAROUSEL_ALBUM, 실제값=u?   children 타입 검증 실패: IMAGE가 아닌 아이템 포함u[   children 목록이 비어 있음 (API가 children 필드를 반환하지 않을 수 있음)readreplace)errorsu   Threads API HTTP 오류 (i  )rE   r(   	http_codeu   Threads API 조회 오류: r8   rT   r"   )step1_image_files_okstep2_image_urls_okstep3_carousel_album_okstep_summary)r   r	   r   u   검증 결과 저장: %szG
======================================================================u    === task-680.1 최종 결과 ===u   발행 성공: zThreads Post ID: u   에러: u   이미지 파일 수: u   이미지 경로: u    [검증 1] 이미지 파일 OK: u'   [검증 2] 이미지 URL 접근성 OK: u%   [검증 3] Carousel Album 검증 OK: z  media_type: u     children 수: rU   zN/Au   전체 검증 성공: u   실패 원인:z  - zF======================================================================u   파이프라인 결과: u   검증 결과: )msysjsonloggingosurllib.requesturllibtimepathinsertbasicConfigINFO	getLogger__name__logger
OUTPUT_DIRRESULT_PATHVERIFY_PATHTHREADS_BASE_URLinfocontent.topic_selectorr   r   dumpscontent.five_stage_pipeliner
   pipelinegenerateresultlistkeyslenr-   openfdumppublisher.threads_publisherr   	publisherr   r   slideappendr   r   publish_cardnewsr   strstrftimeverificationr$   img_file_resultsmsgr(   getsizesizer'   warningFileNotFoundError	ExceptioneallvaluesBASE_URLOUTPUT_DIR_PATHurl_resultsbasenamefilenamerelpathrel	image_url
ValueErrorrequestRequestrequrlopenrespr?   headersr   	HTTPErrorcodeURLErrorreasonboolrD   auth.token_storerF   access_tokenfieldsapi_urlsleep
add_headerloadsrX   decodeapi_datarK   is_carouselchildren_data
isinstancedictchildren_listrV   hasattr
error_bodystep1_okstep2_okstep3_okprint     r1   <module>r      s   3 3 3 2 3   ',,/_ `			8	$3
01673 
 + , 6^4 "JDJJu5QR$S T
 S T 9			Z		@ ,d6;;=.A B c&**Xr":; < 
+sW- 7DIIfaeA67 / =
 S T 8	

:uyy/BC
v! YYw+ 99VUYYz2-FG
 	 **Y
#::j"%++

 ,  NX[!\ ]
 + , 23$ C D  3 
DC
LL"#**3/ 8	877??4(D	!B04DPR%ST"@$M8bnUs#./66s;8. K A%+!#[+[AQAXAXAZ+[([%  ! ?[AQSVWbScghSh i{a"#**-NsS^O_N``c+de H I98 '4Dww%H-ggoodO4j#'	4nn$$Yv$>^^##C#4 	j[[F<<++NB?L3B  ,&K	"
 KKH "	6<Q./669QRXQYY\]f\g7hi	j'4T ;RC'R[=O=O=Q'R$R$   R S $$%67n00;<^=O=OPY=Z<[[cdrdvdvw~d  dA  BC
LL"#**3/49C(HL$%
KK%7 1"$L.S&'..s38=,L() 9%&a'8WcVde;_fU 	9:

14	Q..(((?CNN8%78''R'8 CD%4::diik&8&8&ABC KK0*$**XTYbc2de!lB7J$(88K %LLR8M=GW[=\M--fb9bdM_l$[]$[![rw  #<<-(%0"%m"4)&8 (	1L,- HIVWaVbcS!./66s;%7Ws#./66s; |} +,005A*+//%@$%)))U; F$%))*=uE 	
 #+"7x $#' ^  
+sW- JDIIlAE!SIJ & 4
 m  ( ) **9567 8 .,,->?@A B ##G,-. / s;/01 2 >--mR@AB C  (
3 4 /z: ; -hZ8 9#$((6	N<(;<\JK
LM	\*=>BBCSUZ[\
]^  |,=>?@ A!"	
01 VHo f  . / }% & fg7 7J ! 	805Qe%TT"-dV4CLL*+2237 	805Qe^abc^d%eT"4TF%sCCLL*+22377		8>  -j(,	-
	j 	j <<!! 4,-FF%#a&!QI!!&&YK8S&'..s33<<   4,-US]!SI.ykqxxjIS&'..s33 4,-USV!LI#I;eA37S&'..s33	4ZC CN ||%% 	fGNqRXGYC_aJ-affXSDS9I8JKCLL*+2237<AC^_^d^d0eL,- 	Q/s3CLL*+2237<AC0PL,-		Q,J Js   g&A-g##i->:j8A,j $j=Ao 	0o 9D%o r-g #8i*i*"=i%%i*-i=<i= j
	jn=&Ak<<n=Am..n=6<n88n= o
o r*&A9q%%r*-2r%%r*-r7