
    i                         d Z ddlZddlZddlZddlmZmZ ddlmZmZ ddl	Z	ddZ
d ZddZd	 Zed
k    r e             dS dS )z
Reddit Search: Uses DuckDuckGo site search only
Prioritizes recent (last 12 months) and high-score posts.
Usage: python search_reddit.py "<query>" [--subreddit <name>] [--days <N>] [--limit <N>]
    N)datetime	timedelta)quoteurlparse   c                    	 d|  }|r|                     dd          }|d| z  }t          |          }d| }ddi}t          j        ||dd	
          }|                                 g }	|j        }
d}t          j        ||
          D ]}t          |	          |k    r n|	                    d          }t          j
        dd|	                    d                    }|                     dd                               dd                               dd                               dd          }d|v rD	 t          j        d|          }|r$ddlm}  ||	                    d                    }n#  Y nxY wd|vrt          j        d|          }|rd|	                    d           nd}d}t          j        ||
|                                |                                dz                      }|r)t          j
        dd|	                    d                    nd}|	                    |||d |d!d"         d#ddd#d!d$
           |	S # t           $ r*}t#          d%| t$          j        &           g cY d!}~S d!}~ww xY w)'z(Search Reddit via DuckDuckGo site searchzsite:reddit.com zr/ z subreddit:zhttps://duckduckgo.com/html/?q=z
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36   T)headerstimeoutallow_redirectsz:<a[^>]*class="result__a"[^>]*href="([^"]*)"[^>]*>(.*?)</a>   z<[^>]+>   z&amp;&z&lt;<z&gt;>z&quot;"zduckduckgo.com/l/?uddg=zuddg=([^&]+)r   )unquotez
reddit.comzreddit\.com/r/([^/]+)Unknownz-<a[^>]*class="result__snippet"[^>]*>(.*?)</a>i   
duckduckgoN   N/A)
titleurl	subredditsourcesnippetauthorscorecommentscreated
created_tszDuckDuckGo search error: )file)replacer   requestsgetraise_for_statustextrefinditerlengroupsubsearchurllib.parser   endappend	Exceptionprintsysstderr)queryr   limitgoogle_queryr-   encoded_queryr   r   responseresultshtmllink_patternmatchr   redirect_matchr   	sub_matchsubreddit_namesnippet_patternsnippet_matchsnippet_textes                         D/root/.hermes/skills/research/reddit-search/scripts/search_reddit.pyquery_duckduckgo_site_searchrG      s   I1%11 	0##D"--C/#///L l++??? X
 <WbRVWWW!!### } U[t44 ,	 ,	E7||u$$++a..CF:r5;;q>>::E MM'3//77DDLLVUXYYaabjloppE )C//%'Y%D%DN% ?888888%gn&:&:1&=&=>>D 3&& 	":C@@I:CR6)//!"4"4666N OOIotEIIKK		TW<W7XYYMMZb26*b-2E2Ea2H2HIII`bLNN+&'- "         -!--CJ????						s7   D6I 9;E54I 5E97CI 
JJ :J Jc                 T   |                                 }|                                }| D ]k}d}|d                                          }|D ]}||v r|dz  }|d                                          }|D ]}||v r|dz  }|dz  }t          |          |d<   lt          | d d	
          S )z|
    Score results based on:
    - Recency (highest priority)
    - Title match (primary relevance)
    - Content match
    r   r   r   r         relevance_scorec                     | d         S )NrK    )xs    rF   <lambda>zscore_results.<locals>.<lambda>{   s    +<)=     T)keyreverse)lowersplitintsorted)	r;   query_termsquery_lowertermsresultr   title_lowertermsnippet_lowers	            rF   score_resultsr^   \   s     ##%%KE / / Wo++-- 	 	D{"" y)//11 	 	D}$$
 	$'JJ !! '==tLLLLrP   c                    g }|                     dt          |            dt          |t          |                      d           |                     d           |                     d           t          | d|         d          D ]\  }}d|d	                                          d
}|                     d| d| d|d                     |                     d|d                     |                     d|d                     |                    d          r3|d         dk    r'|                     d|d         dd          d           d                    |          S )zFormat results for displayu   🔍 Found z results (top )u"   ⚡ Source: DuckDuckGo site searchzF======================================================================Nr   [r   ]
z.  r   u      📍 r   u      🔗 r   r   r   u      💬    z...)r1   r+   min	enumerateupperr&   join)r;   r7   outputir
source_tags         rF   format_resultsrn   }   s|   F
MMWGWWCs7||<T<TWWWXXX
MM6777
MM('&5&/1-- > >1/8**,,///
9199
99QwZ99:::1;11222+5++,,,55 	>) 5 5MM<Qy\$3$%7<<<===
 99VrP   c                     t           j        dd          } | s2t          d           t          d           t          j        d           | d         }d }d}d}|t	          |           k     r| |         dk    r'|dz   t	          |           k     r| |dz            }|dz  }nE| |         dk    r4|dz   t	          |           k     rt          | |dz                      }|dz  }n|dz  }|t	          |           k     t          d	| d
           |rt          d|            t          d|            t          |||          }|rt          ||          }ng }t          ||          }t          d|z              t          d           t          d           t          t          j
        |d |         dd                     d S )Nr   zKUsage: python search_reddit.py '<query>' [--subreddit <name>] [--limit <N>]zANote: Uses DuckDuckGo site search only. No time filter available.r   r   z--subredditr   z--limitu   🔍 Searching Reddit for: 'z'...z   Subreddit: z   Top results: )r7   rc   zG
======================================================================zJSON Output (top results):F)indentensure_ascii)r4   argvr3   exitr+   rU   rG   r^   rn   jsondumps)argsr6   r   r7   rk   r;   scored_results	formatteds           rF   mainry      s   8ABB<D [\\\QRRRGEIE	A
c$ii--7m##AD		(9(9QUIFAA!W	!!a!ec$ii&7&7QU$$EFAAFA c$ii-- 

4
4
4
4555 ,*y**+++	
$U
$
$%%%*5)5IIIG  &w66 ~u55I	$
 
/	
&'''	$*^FUF+AE
J
J
JKKKKKrP   __main__)Nr   )r   )__doc__r4   rt   r)   r   r   r/   r   r   r%   rG   r^   rn   ry   __name__rM   rP   rF   <module>r}      s     


  				 ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( K K K KZM M MB   ,,L ,L ,L\ zDFFFFF rP   