+
    #iH                        R t ^ RIHt ^ RIt^ RIHtHt ^ RIt^ RIH	t	 Rt
Rt ! R R]4      t ! R	 R
4      tR R ltR R ltR# )u2  Google Patents arama — public XHR JSON endpoint.

patents.google.com'un kendi web UI'ı `https://patents.google.com/xhr/query?url=...`
public JSON endpoint'ine istek atar. Normal tarayıcı trafiği gibi çalışır.

Önemli:
- Hukuki yarı-gri alan — Google ToS scraping'e izin vermez ama XHR endpoint
  tarayıcı UI'ının kendisinin kullandığı public endpoint'tir. Rate-limit'e
  saygılı ol (1 req/2s), ek "resmi" kaynak olarak EPO'yu önce dene.
- Production'da: optional flag (ENABLE_GOOGLE_PATENTS=false default) ile
  kapatılabilir.
- Fallback için kullanışlı: EPO'da olmayan USPTO/CN başvurularına erişim.

Response schema (reverse engineered):
{
  "results": {
    "cluster": [
      {"result": [
        {"patent": {"publication_number": "US9876543B2",
                    "title": "...",
                    "snippet": "...",
                    "priority_date": "2019-03-15",
                    "publication_date": "2021-05-20",
                    "assignee": "...",
                    "inventor": [...]}},
        ...
      ]}
    ]
  }
}
)annotationsN)quote	urlencode)PriorArtHitz$https://patents.google.com/xhr/queryzuMozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36c                      ] tR t^1tRtRtR# )GooglePatentsErroru$   Google Patents HTTP / parse hatası. N)__name__
__module____qualname____firstlineno____doc____static_attributes__r       g/Users/zincirx/Documents/projelerim/patentyazar/backend-python/app/services/prior_art/google_patents.pyr   r   1   s    .r   r   c                  ^    ] tR t^5tRtRRRR/R R lltR R	 ltR
^
/R R lltR R ltRt	R# )GooglePatentsClientu}   Google Patents XHR endpoint üzerinden arama.

Rate-limit: bloke olmayı önlemek için `min_interval_seconds` kadar bekler.
http_clientNmin_interval_secondsg       @c               $    V ^8  d   QhRRRRRR/# )   r   zhttpx.AsyncClient | Noner   floatreturnNoner   )formats   "r   __annotate__ GooglePatentsClient.__annotate__;   s*     + + .+ $	+
 
+r   c               	    VR JV n         T;'       g    \        P                  ! RR\        /R7      V n        W n        \        P                  ! 4       V n        RV n	        R # )Ng      .@z
User-Agent)timeoutheadersg        )
_external_clienthttpxAsyncClient_USER_AGENT_http_min_intervalasyncioLock_lock_last_request_at)selfr   r   s   &$$r   __init__GooglePatentsClient.__init__;   sW     !,4 7  
 
E$5$5!;/%

 2\\^
'*r   c                   V ^8  d   QhRR/# r   r   r   r   )r   s   "r   r   r   J   s     & &T &r   c                	~   "   V P                   '       g%   V P                  P                  4       G R j  xL
  R # R #  L5iN)r    r$   aclose)r*   s   &r   closeGooglePatentsClient.closeJ   s/     $$$**##%%% %%s   0=;	=limitc               $    V ^8  d   QhRRRRRR/# )r   querystrr4   intr   list[PriorArtHit]r   )r   s   "r   r   r   N   s"     ? ?# ? ?>O ?r   c          	     F  "   V P                  4       G Rj  xL
  \        RVR\        V^24      /4      p\         R\	        V4       2p V P
                  P                  V4      G Rj  xL
 pTP                  ^8w  d-   \        RTP                   RTP                  R,           24      h TP                  4       p\        \        YrR
7      4      #  L Li  \        P                   d   p\        RT 24      ThRp?ii ; i  \         d   p\        R	T 24      ThRp?ii ; i5i)u   Google Patents arama (source='google').

Args:
    query: Doğal dil veya Google Patents advanced syntax
        (ör. '(post-quantum) cryptography', 'inventor:Smith').
    limit: 1-50.
Nqnumz?url=u   HTTP hatası: zGoogle Patents HTTP z: :N   Nu   JSON parse hatası: )r4   )_respect_rate_limitr   min_SEARCH_URLr   r$   getr!   	HTTPErrorr   status_codetextjson
ValueErrorlist_parse_google_response)r*   r6   r4   inner_params	outer_urlresponseexcdatas   &&$     r   searchGooglePatentsClient.searchN   s      &&((( #ueS^!DE"m5|)<(=>		F!ZZ^^I66H 3&$&x';';&<Bx}}T?R>ST 	L==?D *4=>>) 	) 7 	F$~cU%;<#E	F  	L$';C5%ABK	Lsi   D!C1D!	C 'C(C ,=D!*C? :D!C C<(C77C<<D!?D
DDD!c                   V ^8  d   QhRR/# r.   r   )r   s   "r   r   r   l   s     D D4 Dr   c                	  "   V P                   ;_uu_4       GR j  xL
  \        P                  ! 4       P                  4       pV P                  V P
                  ,           V,
          pV^ 8  d   \        P                  ! V4      G R j  xL
  \        P                  ! 4       P                  4       V n        R R R 4      GR j  xL
  R #  L L@ L
  + GR j  xL 
 '       g   i     R # ; i5ir0   )r(   r&   get_event_looptimer)   r%   sleep)r*   nowwaits   &  r   r>   'GooglePatentsClient._respect_rate_limitl   s     ::::((*//1C))D,>,>>#EDaxmmD)))$+$:$:$<$A$A$CD! :: *	 :::s]   C)CC)A(CC,C4C)?C
 C)C
C)C&	C
C&	C&	 	C))r    r$   r)   r(   r%   )
r	   r
   r   r   r   r+   r2   rN   r>   r   r   r   r   r   r   5   s=    
+ 15+ '*	+&?r ?<D Dr   r   c               $    V ^8  d   QhRRRRRR/# )r   rM   dictr4   r8   r   r9   r   )r   s   "r   r   r   x   s"        9J r   c               X   V P                  R/ 4      P                  R. 4      p. pV F  pVP                  R. 4       Ff  pVP                  R4      p\        V\        4      '       g   K,  \        V4      pV'       d   VP	                  V4       \        V4      V8  g   Kb  Vu u # 	  K  	  V# )u4   Google Patents XHR response → PriorArtHit listesi.resultsclusterresultpatent)rA   
isinstancerY   _parse_single_patentappendlen)rM   r4   clustershitsr\   r]   r^   hits   &$      r   rH   rH   x   s    xx	2&**9b9H Dkk(B/FZZ)Ffd++&v.CC 4yE! 0  Kr   c                    V ^8  d   QhRRRR/# )r   r^   rY   r   zPriorArtHit | Noner   )r   s   "r   r   r      s       *< r   c                   V P                  R 4      pV'       g   R# V P                  R4      ;'       g    . pRp\        V\        4      '       d%   V Uu. uF  qD'       g   K  \        V4      NK  	  ppM\        V\        4      '       d   V.pV P                  R4      pRp\        V\        4      '       d   V'       d   \        V^ ,          4      pM\        V\        4      '       d   Tp\	        RVV P                  R4      V P                  R4      VVV P                  R4      V P                  R4      RR	V 2R
7
      # u upi )publication_numberNinventorassigneegoogletitlesnippetpriority_datepublication_datez"https://patents.google.com/patent/)
source	patent_norl   abstract	applicant	inventorsfiling_datero   cpc_classesurl)rA   r_   rG   r7   r   )r^   pub_noinventors_rawrt   iassignee_rawrs   s   &      r   r`   r`      s   ZZ,-FJJz*00bM"&I-&&%28]aVSV]	8		M3	'	'"O	::j)L I,%%,Q(		L#	&	& 	jj!I&JJ/$6709  9s   	D<!D<)r   
__future__r   r&   urllib.parser   r   r!   app.services.prior_art.modelsr   r@   r#   RuntimeErrorr   r   rH   r`   r   r   r   <module>r      sN   @ #  )  549 / /=D =DF$r   