
    Aj                       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                  e      ZdZdZdgZ e	j$                  de	j&                        Zd Zdd	Zdd
ZddZddZddddZedk(  rddlZ ej8                  ej:                          eej                  j=                  ej>                  j@                         ejB                  d      z
        Z" e# ejH                  e"d             yy)u$  Mastodon-Helper — RSS pro Researcher-Profil.

Kein Auth, keine API-Limits — RSS-Endpoint pro User: `https://<instance>/@<user>.rss`.
Per SYSTEM-PROMPT § 4: AI-Researcher Cross-Posten oft hier. Start mit Simon Willison.
Erweitern in `WATCH_USERS` wenn weitere AI-Builder dort aktiv sind.
    )annotationsNz$aria-radar/0.1 (+aseckzai@gmail.com)   z)https://fedi.simonwillison.net/@simon.rssz<item>(?P<body>.*?)</item>c                X    t        j                  d|  d|  dt         j                        S )N<z[^>]*>(?P<v>.*?)</>)recompileDOTALL)tags    1/root/aria/scripts/ai-radar/platforms/mastodon.py<lambda>r      s%    RZZ1SE1CC5(JBIIV     c                |    t        |      j                  |       }|r|j                  d      j                         S dS )Nv )TAG_RE_FACTORYsearchgroupstrip)bodyr   ms      r   _extractr      s5    s""4(A#$1773<,",r   c                l    	 t         j                  j                  |       S # t        t        f$ r Y y w xY w)N)emailutilsparsedate_to_datetime	TypeError
ValueError)values    r   _parse_rfc2822r    "   s3    {{0077z" s   ! 33c                r    t        j                  t        j                  dd|             j	                         S )Nz<[^>]+>r   )htmlunescaper   subr   )texts    r   _strip_htmlr&   )   s'    ==
B56<<>>r   c                n   t         j                  j                  | t        dd      }t         j                  j	                  |t
              5 }|j                         j                  dd      }d d d        g }t        j                        D ]  }|j                  d      }t        |d	      xs t        |d
      }	t        |d      }
t        |
      xs7 t        j                  j                  t        j                   j"                        }|j$                  *|j'                  t        j                   j"                        }||k  rt)        t        |d            }|r|d d nd}|j+                  ||	|j-                         dd | |d d dd       t/        |      |k\  s |S  |S # 1 sw Y   <xY w)Nz$application/rss+xml, application/xml)z
User-AgentAccept)headers)timeoutzutf-8replace)errorsr   linkguidpubDate)tzinfodescriptionP   z(no description)mastodoni,  )feedr%   )titleurldatesourcescoreraw)urllibrequestRequest
USER_AGENTurlopenTIMEOUT_SECONDSreaddecodeITEM_REfinditerr   r   r    dtdatetimenowtimezoneutcr0   r+   r&   append	isoformatlen)feed_urlsince	max_itemsreqrespr   itemsr   blockr-   pub_date_raw	publishedr1   r5   s                 r   _fetch_feedrV   -   s   
..
 
 *X~3
   AC			_		= =yy{!!')!<= Ed# v&A(5&*Ay1"<0TBKKOOBKKOO4T	#!)))AIu!(5-"@A$/CR 5G'')  #DS)

 
	 u:"L10 L9= =s   "F**F4   )max_per_userc                   g }t         D ]!  }	 t        || |      }|j                  |       # t        j                  dt        |      t        t                      |S # t        $ r!}t        j	                  d||       Y d}~xd}~ww xY w)z7Fetch latest Mastodon posts from WATCH_USERS RSS feeds.zmastodon %s failed: %sNz mastodon: %d items from %d users)WATCH_USERSrV   	ExceptionlogwarningextendinforL   )rN   rX   	all_itemsrM   rR   excs         r   fetchrb   N   s    I  	%>E 	  HH/Y[AQR  	KK0(C@	s   A	B%BB__main__)level   )days)rN   )indent)r   strr   rh   returnrh   )r   rh   ri   zdt.datetime | None)r%   rh   ri   rh   )rM   rh   rN   dt.datetimerO   intri   
list[dict])rN   rj   rX   rk   ri   rl   )%__doc__
__future__r   rF   rE   email.utilsr   r"   loggingr   urllib.requestr;   	getLogger__name__r\   r>   r@   rZ   r	   r
   rC   r   r   r    r&   rV   rb   jsonbasicConfigINFOrG   rH   rI   	timedeltarR   printdumps r   r   <module>r{      s    #     	 g!3
 0 "**2BII
>V-
?B 67  zGgll+8<2<<Q;OOPE	*$**U1
%&	 r   