
    Ei'                     Z    d Z ddlZddlmZ ddlmZ ddlmZmZ ddlm	Z	  G d d	e      Z
y)
zGoogle News RSS feed collector.    N)List)datetime   )BaseCollector	TrendItem)GOOGLE_NEWS_TOPICSc            	       l     e Zd ZdZ fdZdedee   fdZdedededee	   fdZ
dedee	   fd	Z xZS )
GoogleNewsCollectorzQCollects top headlines from Google News RSS feeds including topic-specific feeds.c                 $    t         |   d       y )Ngoogle_news)super__init__)self	__class__s    @/home/sietch6/trending-topics-pipeline/collectors/google_news.pyr   zGoogleNewsCollector.__init__   s    '    regionreturnc                     |dk(  rd}d}nd}d}g }|j                  d| d| d| d	f       t        j                         D ]$  \  }}|j                  d
| d| d| d| |f       & |S )zk
        Get all RSS feed URLs for a region.

        Returns list of (url, category_name) tuples.
        CAzen-CAzCA:enzen-USzUS:enzhttps://news.google.com/rss?hl=z&gl=z&ceid=	Headlinesz#https://news.google.com/rss/topics/z?hl=)appendr   items)r   r   langceidfeeds
topic_nametopic_ids          r   
_get_feedszGoogleNewsCollector._get_feeds   s     T>DDDD 	-dV4xvdVL
 	 %7$<$<$> 	 JLL5hZtD6fXU[\`[ab 	 r   urlcategoryc                    g }	 t        j                  |      }|j                  r9|j                  s-| j                  j                  d| d|j                          g S t        |j                  d      D ]  \  }}d}t        |d      r|j                  j                  dd      }|j                  t        |j                  d||t        j                         j                         |j                  d	      |j                  d
d      ||d              	 |S # t         $ r5}	| j                  j                  d| dt#        |	              Y d}	~	|S d}	~	ww xY w)z.Parse a single RSS feed and return TrendItems.zFailed to parse z feed: r   start sourcetitler   link	published)r)   source_publicationr!   )r   r&   rankr   	timestampr    metadatazError parsing N)
feedparserparsebozoentrieserrorsr   bozo_exception	enumeratehasattrr&   getr   r'   r   utcnow	isoformat	Exceptionstr)
r   r    r   r!   r   feedr+   entrysource_namees
             r   _parse_feedzGoogleNewsCollector._parse_feed/   s;   	K##C(Dyy""%5hZwtGZGZF[#\]	(Q? e 5(+"',,"2"27B"?K#(;;,!%"*//"3"="="?!IIf-).;)C2=(0"0   	KKKzQIJJ	Ks   AD B7D 	E!*EEc                 ^   g }t               }| j                  |      }|D ]n  \  }}| j                  |||      }|D ]Q  }|j                  j	                         j                         }	|	|vs0|j                  |	       |j                  |       S p t        |d      D ]  \  }
}|
|_	         |S )aM  
        Collect headlines from all Google News RSS feeds.

        Fetches main headlines plus topic-specific feeds (Technology, Science,
        Business, Entertainment, Health) for broader coverage.

        Args:
            region: Two-letter region code (US, CA)

        Returns:
            List of TrendItem objects
        r   r#   )
setr   r?   r   lowerstripaddr   r4   r+   )r   r   	all_itemsseen_titlesr   r    r!   r   item	title_keyis              r   collectzGoogleNewsCollector.collectT   s     	e'" 	+MC$$S&(;E  + OO11399;	K/OOI.$$T*	+		+ !!4 	GAtDI	 r   )__name__
__module____qualname____doc__r   r:   r   tupler   r   r?   rJ   __classcell__)r   s   @r   r
   r
      s_    [( e <#s #C #3 #4	? #Jc d9o r   r
   )rN   r.   typingr   r   baser   r   configr   r
    r   r   <module>rU      s%    %    * %h- hr   