Ë
    n›Xj’  ã                  ó†   — d dl mZ d dlZd dlmZ d dlZd dlZe G d„ d«      «       Zg d¢Zg d¢Z	 G d„ d	«      Z
dd
„Zdd„Zy)é    )ÚannotationsN)Ú	dataclassc                  óD   — e Zd ZU ded<   ded<   ded<   ded<   dZded<   y	)
ÚNewsItemÚstrÚtitleÚsummaryÚlinkÚsourcer   ÚintÚscoreN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__r   © ó    ú5/var/www/html/content_generation/src/services/news.pyr   r   
   s   … àƒJØƒLØ
ƒIØƒKØ€Eˆ3„Nr   r   ))zOpenAI Blogzhttps://openai.com/blog/rss.xml)zGoogle AI Blogz&https://blog.google/technology/ai/rss/)ÚDeepMindz$https://deepmind.google/blog/rss.xml)zHugging Face Blogz$https://huggingface.co/blog/feed.xml)zTechCrunch AIz=https://techcrunch.com/category/artificial-intelligence/feed/)zVentureBeat AIz)https://venturebeat.com/category/ai/feed/)zThe Verge AIzAhttps://www.theverge.com/rss/ai-artificial-intelligence/index.xml)zMIT Tech Reviewz&https://www.technologyreview.com/feed/)zArs Technicaz8https://feeds.arstechnica.com/arstechnica/technology-lab)zTechCrunch Startupsz.https://techcrunch.com/category/startups/feed/)Ú
TechCrunchzhttps://techcrunch.com/feed/)zKrebs on Securityz!https://krebsonsecurity.com/feed/)zThe Hacker Newsz+https://feeds.feedburner.com/TheHackersNews)ÚBleepingComputerz&https://www.bleepingcomputer.com/feed/)zGitHub Blogzhttps://github.blog/feed/)zDev.tozhttps://dev.to/feed)ÚInfoQzhttps://feed.infoq.com/)zAWS Newsz7https://aws.amazon.com/about-aws/whats-new/recent/feed/)z	The Vergez&https://www.theverge.com/rss/index.xml)ÚWiredzhttps://www.wired.com/feed/rss)zNVIDIA Blogzhttps://blogs.nvidia.com/feed/)6Úaizartificial intelligenceÚllmÚgptÚclaudeÚgeminiÚopenaiÚmodelÚagentÚgenaizmachine learningÚneuralÚresearchÚpaperÚstartupÚfundingÚseriesÚraisedÚ	valuationÚacquisitionÚipoÚlaunchÚcyberÚsecurityÚbreachÚhackÚvulnerabilityÚcveÚ
ransomwareÚpatchÚ	developerÚdevopsÚapiÚsdkÚgithubzopen sourceÚ	frameworkÚreleaseÚcloudÚawsÚazureÚ
kubernetesÚsaasÚnvidiaÚchipÚgpuÚsemiconductorÚhardwareÚrobotÚroboticsÚ
automationÚannounceÚbreakthroughÚproductc                  ó(   — e Zd Zddd„Zddd„Zd	d„Zy)
ÚNewsServiceNc                ó0   — |xs t         | _        || _        y ©N)ÚDEFAULT_FEEDSÚfeedsÚtimeout)ÚselfrR   rS   s      r   Ú__init__zNewsService.__init__>   s   € ØÒ+œmˆŒ
Øˆ�r   c                ó¾  — g }t        «       }d}| j                  D �]<  \  }}	 t        j                  || j                  ddi¬«      }|j                  «        t        j                  |j                  «      }d}	|j                  D ]Ñ  }
t        |
dd«      xs dj                  «       }|r|j                  «       |v rŒ7t        |
dd«      xs t        |
d	d«      xs d}t        |«      d d
 }t        |
dd«      xs d}t        ||||¬«      }t!        |«      |_        |j%                  |j                  «       «       |j'                  |«       |	dz  }	|	|k\  sŒÐ �Œ< �Œ? |j)                  d„ ¬«       |D �cg c]  }|j"                  dkD  sŒ|‘Œ }}t+        |«      |k\  r|n"||D �cg c]  }|j"                  dk(  sŒ|‘Œ c}z   }|d | S # t        $ r Y �Œ¶w xY wc c}w c c}w )Né   z
User-Agentz)ContentPipeline/2.0 (+premium media cron))rS   Úheadersr   r   Ú r	   Údescriptioni�  r
   )r   r	   r
   r   é   c                óf   — | j                    | j                  | j                  j                  «       fS rP   )r   r   r   Úlower)Úxs    r   Ú<lambda>z#NewsService.fetch.<locals>.<lambda>c   s   €  !§'¡' ¨1¯8©8°Q·W±W·]±]³_Ñ Er   )Úkey)ÚsetrR   ÚrequestsÚgetrS   Úraise_for_statusÚ
feedparserÚparseÚcontentÚ	ExceptionÚentriesÚgetattrÚstripr]   Ú_strip_htmlr   Ú_relevance_scorer   ÚaddÚappendÚsortÚlen)rT   Ú	max_itemsÚpoolÚseenÚper_feed_capr   ÚurlÚrespÚparsedÚtakenÚentryr   r	   r
   Úitemr^   ÚstrongÚchosens                     r   ÚfetchzNewsService.fetchB   sÓ  € Ø!ˆÜ›ˆØˆàŸ:�:‰KˆF�Cð	Ü—|‘|ØØ ŸL™LØ)Ð+VÐWô�ð
 ×%Ñ%Ô'Ü#×)Ñ)¨$¯,©,Ó7�ð ˆEØŸœ�Ü  ¨°Ó4Ò:¸×AÑAÓC�Ù §¡£°Ñ 5ØÜ" 5¨)°RÓ8Òc¼GÀEÈ=ÐZ\Ó<]ÒcÐac�Ü% gÓ.¨t°Ð4�Ü˜u f¨bÓ1Ò7°R�Ü e°WÀ4ÐPVÔW�Ü-¨dÓ3�”
Ø—‘˜Ÿ™›Ô'Ø—‘˜DÔ!Ø˜‘
�Ø˜LÓ(Úò (ð &ð8 	�	‰	ÑEˆ	ÔFÙ!Ó1™T˜ Q§W¡W¨q£[’!˜TˆÐ1Ü˜v›;¨)Ò3‘¸ÉdÓBcÉdÈÐVW×V]ÑV]ÐabÓVbÂ1ÈdÑBcÑ9cˆØ�j�yÐ!Ð!øô- ò Úðüò( 2ùÚBcs*   £AGÅ2GÆGÆ"GÆ7GÇ	GÇGc                óþ   — |syg }t        |d«      D ]Y  \  }}|j                  |› d|j                  › d|j                  › d|j                  › d|j
                  › d|j                  › �«       Œ[ dj                  |«      S )	NuL   (No news fetched â€” use only verifiable recent AI/tech/startup/cyber news.)r[   z. [z] score=z
   TITLE: z
   SUMMARY: z	
   URL: Ú
)Ú	enumeratero   r   r   r   r	   r
   Újoin)rT   ÚitemsÚlinesÚiÚits        r   Úas_prompt_blockzNewsService.as_prompt_blockh   s‡   € ÙØaØˆÜ˜u aÖ(‰EˆAˆrØ�L‰LØ�#�S˜Ÿ™˜ 8¨B¯H©H¨:ð 6ØŸX™X˜Jð 'Ø!Ÿz™z˜lð +ØŸ7™7˜)ð%õð )ð �y‰y˜ÓÐr   )Né   )rR   zlist[tuple[str, str]] | NonerS   r   )é   )rr   r   Úreturnúlist[NewsItem])rƒ   r‹   rŠ   r   )r   r   r   rU   r~   r‡   r   r   r   rN   rN   =   s   „ ôô$"ôL r   rN   c                óÎ   ‡ — ‰ j                   › d‰ j                  › �j                  «       }d}h d£}t        D ]  }||v sŒ|||v rdndz  }Œ t	        ˆ fd„dD «       «      r|dz  }|S )	NÚ r   >   r   r3   r   r!   r    rG   r0   r   r-   rB   r   r'   r<   r&   é   é   c              3  óV   •K  — | ]   }|‰j                   j                  «       v –— Œ" y ­wrP   )r   r]   )Ú.0r^   r{   s     €r   Ú	<genexpr>z#_relevance_score.<locals>.<genexpr>€   s&   øè ø€ Ð
gÑ-f¨ˆ1�—‘×!Ñ!Ó#Ô#Ñ-fùs   ƒ&))ÚcrunchÚkrebsr1   r:   r   rB   é   )r   r	   r]   ÚKEYWORDSÚany)r{   Útextr   ÚhotÚkws   `    r   rm   rm   v   st   ø€ Ø�j‰jˆ\˜˜4Ÿ<™<˜.Ð)×/Ñ/Ó1€DØ€Eò€C÷ ˆØ�Š:Ø˜" ™)‘Q¨Ñ*‰Eð ô Ó
gÑ-fÓ
gÔgØ�‰
ˆØ€Lr   c                ó~   — t        j                  dd| «      }t        j                  dd|«      }|j                  «       S )Nz<[^>]+>r�   z\s+)ÚreÚsubrk   )Úhtmlr˜   s     r   rl   rl   …   s2   € Ü�6‰6�*˜c 4Ó(€DÜ�6‰6�&˜#˜tÓ$€DØ�:‰:‹<Ðr   )r{   r   rŠ   r   )rž   r   rŠ   r   )Ú
__future__r   rœ   Údataclassesr   re   rb   r   rQ   r–   rN   rm   rl   r   r   r   Ú<module>r¡      sP   ðÝ "ã 	Ý !ã Û ð ÷ð ó ðò€ò:
€÷6 ñ 6 órôr   