Spaces:
Runtime error
Runtime error
import gradio as gr | |
import asyncio | |
from search_engine import search, advanced_search | |
from osint_engine import create_report | |
def format_results(results): | |
if not results: | |
return "No results found." | |
if isinstance(results, list): | |
# Format web search results | |
formatted_results = [] | |
for result in results: | |
formatted_result = f""" | |
### [{result['title']}]({result['url']}) | |
{result['summary']} | |
**Source:** {result['url']} | |
**Published:** {result.get('published_date', 'N/A')} | |
""" | |
formatted_results.append(formatted_result) | |
return "\n---\n".join(formatted_results) | |
elif isinstance(results, dict): | |
# Format OSINT results | |
return create_report(results) | |
else: | |
return str(results) | |
def safe_search(query, search_type="web", max_results=5, platform=None, | |
image_url=None, phone=None, location=None, domain=None): | |
"""Safe wrapper for search functions""" | |
try: | |
kwargs = { | |
"max_results": max_results, | |
"platform": platform, | |
"phone": phone, | |
"location": location, | |
"domain": domain | |
} | |
if search_type == "web": | |
results = search(query, max_results) | |
else: | |
# For async searches | |
if search_type == "image" and image_url: | |
query = image_url | |
loop = asyncio.new_event_loop() | |
asyncio.set_event_loop(loop) | |
results = loop.run_until_complete(advanced_search(query, search_type, **kwargs)) | |
loop.close() | |
return format_results(results) | |
except Exception as e: | |
return f"Error: {str(e)}" | |
# Create Gradio interface | |
with gr.Blocks(theme=gr.themes.Soft()) as demo: | |
gr.Markdown("# π Intelligent Search Engine") | |
gr.Markdown(""" | |
An AI-powered search engine with advanced OSINT capabilities. | |
Features: | |
- Web search with AI summaries | |
- Username search across platforms | |
- Image search and analysis | |
- Social media profile search | |
- Personal information gathering | |
- Historical data search | |
""") | |
with gr.Tab("Web Search"): | |
with gr.Row(): | |
query_input = gr.Textbox( | |
label="Search Query", | |
placeholder="Enter your search query...", | |
lines=2 | |
) | |
max_results = gr.Slider( | |
minimum=1, | |
maximum=10, | |
value=5, | |
step=1, | |
label="Number of Results" | |
) | |
search_button = gr.Button("Search") | |
results_output = gr.Markdown(label="Search Results") | |
search_button.click( | |
fn=lambda q, n: safe_search(q, "web", n), | |
inputs=[query_input, max_results], | |
outputs=results_output | |
) | |
with gr.Tab("Username Search"): | |
username_input = gr.Textbox( | |
label="Username", | |
placeholder="Enter username to search..." | |
) | |
username_button = gr.Button("Search Username") | |
username_output = gr.Markdown(label="Username Search Results") | |
username_button.click( | |
fn=lambda u: safe_search(u, "username"), | |
inputs=username_input, | |
outputs=username_output | |
) | |
with gr.Tab("Image Search"): | |
image_url = gr.Textbox( | |
label="Image URL", | |
placeholder="Enter image URL to search..." | |
) | |
image_button = gr.Button("Search Image") | |
image_output = gr.Markdown(label="Image Search Results") | |
image_button.click( | |
fn=lambda u: safe_search(u, "image", image_url=u), | |
inputs=image_url, | |
outputs=image_output | |
) | |
with gr.Tab("Social Media Search"): | |
with gr.Row(): | |
social_username = gr.Textbox( | |
label="Username", | |
placeholder="Enter username..." | |
) | |
platform = gr.Dropdown( | |
choices=["all", "instagram", "twitter", "reddit"], | |
value="all", | |
label="Platform" | |
) | |
social_button = gr.Button("Search Social Media") | |
social_output = gr.Markdown(label="Social Media Results") | |
social_button.click( | |
fn=lambda u, p: safe_search(u, "social", platform=p), | |
inputs=[social_username, platform], | |
outputs=social_output | |
) | |
with gr.Tab("Personal Info"): | |
with gr.Row(): | |
phone = gr.Textbox(label="Phone Number", placeholder="+1234567890") | |
location = gr.Textbox(label="Location", placeholder="City, Country") | |
domain = gr.Textbox(label="Domain", placeholder="example.com") | |
personal_button = gr.Button("Gather Information") | |
personal_output = gr.Markdown(label="Personal Information Results") | |
personal_button.click( | |
fn=lambda p, l, d: safe_search("", "personal", phone=p, location=l, domain=d), | |
inputs=[phone, location, domain], | |
outputs=personal_output | |
) | |
with gr.Tab("Historical Data"): | |
url_input = gr.Textbox( | |
label="URL", | |
placeholder="Enter URL to search historical data..." | |
) | |
historical_button = gr.Button("Search Historical Data") | |
historical_output = gr.Markdown(label="Historical Data Results") | |
historical_button.click( | |
fn=lambda u: safe_search(u, "historical"), | |
inputs=url_input, | |
outputs=historical_output | |
) | |
gr.Markdown(""" | |
### Examples | |
Try these example searches: | |
- Web Search: "Latest developments in artificial intelligence" | |
- Username: "johndoe" | |
- Image URL: "https://example.com/image.jpg" | |
- Social Media: "techuser" on Twitter | |
- Historical Data: "example.com" | |
""") | |
# Launch the app | |
if __name__ == "__main__": | |
demo.launch() | |