ISE / app.py
fikird
Add OSINT capabilities and advanced search features
12d42ff
raw
history blame
6 kB
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()