from urllib.parse import parse_qs, unquote, quote from app.models.config import Config DEFAULT_RESULTS = [ ('Example Domain', 'https://example.com/{slug}', 'Example information about {term}.'), ('Whoogle Search', 'https://github.com/benbusby/whoogle-search', 'Private self-hosted Google proxy'), ('Wikipedia', 'https://en.wikipedia.org/wiki/{title}', '{title} – encyclopedia entry.'), ] def _result_block(title, href, snippet): encoded_href = quote(href, safe=':/') return ( f'
' f'
' f'' f'

{title}

' f'{title}' f'
' f'
{snippet}
' f'
' f'
' ) def _main_results(query, params, language='', country=''): term = query.lower() slug = query.replace(' ', '-') results = [] pref_lang = '' pref_country = '' if 'preferences' in params: try: pref_data = Config(**{})._decode_preferences(params['preferences'][0]) pref_lang = str(pref_data.get('lang_interface', '') or '').lower() pref_country = str(pref_data.get('country', '') or '').lower() except Exception: pref_lang = pref_country = '' else: pref_lang = pref_country = '' if 'wikipedia' in term: hl = str(params.get('hl', [''])[0] or '').lower() gl = str(params.get('gl', [''])[0] or '').lower() lr = str(params.get('lr', [''])[0] or '').lower() language_code = str(language or '').lower() country_code = str(country or '').lower() is_japanese = ( hl.startswith('ja') or gl.startswith('jp') or lr.endswith('lang_ja') or language_code.endswith('lang_ja') or country_code.startswith('jp') or pref_lang.endswith('lang_ja') or pref_country.startswith('jp') ) if is_japanese: results.append(( 'ウィキペディア', 'https://ja.wikipedia.org/wiki/ウィキペディア', '日本語版ウィキペディアの記事です。' )) else: results.append(( 'Wikipedia', 'https://www.wikipedia.org/wiki/Wikipedia', 'Wikipedia is a free online encyclopedia.' )) if 'pinterest' in term: results.append(( 'Pinterest', 'https://www.pinterest.com/ideas/', 'Discover recipes, home ideas, style inspiration and other ideas.' )) if 'whoogle' in term: results.append(( 'Whoogle Search GitHub', 'https://github.com/benbusby/whoogle-search', 'Source code for Whoogle Search.' )) if 'github' in term: results.append(( 'GitHub', f'https://github.com/search?q={slug}', 'GitHub is a development platform to host and review code.' )) for title, url, snippet in DEFAULT_RESULTS: formatted_url = url.format(slug=slug, term=term, title=title.replace(' ', '_')) formatted_snippet = snippet.format(term=query, title=title) results.append((title, formatted_url, formatted_snippet)) unique = [] seen = set() for entry in results: if entry[1] in seen: continue seen.add(entry[1]) unique.append(entry) return ''.join(_result_block(*entry) for entry in unique) def build_mock_response(raw_query, language='', country=''): if '&' in raw_query: q_part, extra = raw_query.split('&', 1) else: q_part, extra = raw_query, '' query = unquote(q_part) params = parse_qs(extra) results_html = _main_results(query, params, language, country) safe_query = query.replace('"', '') pagination = ( f'Next' f'More' ) return ( '' 'Mock Google Results' '' f'
{results_html}
' f'
' f'' '
' f'' '' '' )