MoneyRadar2 / app.py
seawolf2357's picture
Update app.py
73ed8f5 verified
raw
history blame
5.7 kB
import gradio as gr
import requests
import json
from datetime import datetime, timedelta
API_KEY = "V38CNn4HXpLtynJQyOeoUensTEYoFy8PBUxKpDqAW1pawT1vfJ2BWtPQ98h6"
MAJOR_COUNTRIES = [
"United States", "United Kingdom", "Canada", "Australia", "Germany",
"France", "Japan", "South Korea", "China", "India",
"Brazil", "Mexico", "Russia", "Italy", "Spain",
"Netherlands", "Sweden", "Switzerland", "Norway", "Denmark",
"Finland", "Belgium", "Austria", "New Zealand", "Ireland",
"Singapore", "Hong Kong", "Israel", "United Arab Emirates", "Saudi Arabia",
"South Africa", "Turkey", "Egypt", "Poland", "Czech Republic",
"Hungary", "Greece", "Portugal", "Argentina", "Chile",
"Colombia", "Peru", "Venezuela", "Thailand", "Malaysia",
"Indonesia", "Philippines", "Vietnam", "Pakistan", "Bangladesh"
]
def search_serphouse(query, country, page, num_result):
url = "https://api.serphouse.com/serp/live"
payload = {
"data": {
"q": query,
"domain": "google.com",
"loc": country,
"lang": "en",
"device": "desktop",
"serp_type": "news",
"page": str(page),
"verbatim": "1",
"num": str(num_result)
}
}
headers = {
"accept": "application/json",
"content-type": "application/json",
"authorization": f"Bearer {API_KEY}"
}
try:
response = requests.post(url, json=payload, headers=headers)
response.raise_for_status()
return response.json()
except requests.RequestException as e:
return f"Error: {str(e)}"
def is_recent_news(time_str):
debug_info = f"Checking time: {time_str}\n"
if not time_str:
debug_info += "Time string is empty\n"
return False, debug_info
time_parts = time_str.lower().split()
debug_info += f"Time parts: {time_parts}\n"
if len(time_parts) < 2:
debug_info += "Time parts less than 2\n"
return False, debug_info
try:
value = int(time_parts[0])
unit = time_parts[1]
debug_info += f"Value: {value}, Unit: {unit}\n"
if unit in ['minute', 'minutes', 'hour', 'hours']:
debug_info += "Within minutes or hours\n"
return True, debug_info
elif unit in ['day', 'days']:
is_recent = value <= 1
debug_info += f"Within days, is recent: {is_recent}\n"
return is_recent, debug_info
else:
debug_info += f"Unknown unit: {unit}\n"
return False, debug_info
except ValueError:
debug_info += f"ValueError when parsing: {time_parts[0]}\n"
return False, debug_info
def format_results(results):
all_results = "## All News Results\n\n"
recent_results = "## Recent News Results (Within 1 Day)\n\n"
debug_info = "## Debug Information\n\n"
debug_info += f"Raw API Response:\n```json\n{json.dumps(results, indent=2)}\n```\n\n"
try:
if isinstance(results, dict) and "results" in results and "news" in results["results"]:
news_results = results["results"]["news"]
debug_info += f"Number of news results: {len(news_results)}\n\n"
for result in news_results:
time_str = result.get("time", "Unknown time")
is_recent, time_debug = is_recent_news(time_str)
debug_info += f"Article: {result.get('title', 'No Title')}\n{time_debug}\n"
all_results += f"""
### [{result.get('title', 'No Title')}]({result.get('url', '#')})
{result.get('snippet', 'No Snippet')}
**Source:** {result.get('channel', 'Unknown')} - {time_str}
---
"""
if is_recent:
recent_results += f"""
### [{result.get('title', 'No Title')}]({result.get('url', '#')})
{result.get('snippet', 'No Snippet')}
**Source:** {result.get('channel', 'Unknown')} - {time_str}
---
"""
if recent_results == "## Recent News Results (Within 1 Day)\n\n":
recent_results += "*No recent news results found within 1 day.*\n\n"
else:
all_results += "*No valid news results found in the API response.*\n\n"
recent_results += "*No valid news results found in the API response.*\n\n"
debug_info += "Invalid or unexpected API response structure\n"
except Exception as e:
all_results += f"*Error processing results: {str(e)}*\n\n"
recent_results += f"*Error processing results: {str(e)}*\n\n"
debug_info += f"Exception occurred: {str(e)}\n"
return all_results, recent_results, debug_info
def serphouse_search(query, country, page, num_result):
results = search_serphouse(query, country, page, num_result)
all_results, recent_results, debug_info = format_results(results)
return all_results, recent_results, debug_info
css = """
footer {
visibility: hidden;
}
"""
iface = gr.Interface(
fn=serphouse_search,
inputs=[
gr.Textbox(label="Search Query"),
gr.Dropdown(MAJOR_COUNTRIES, label="Country"),
gr.Slider(1, 10, 1, label="Page"),
gr.Slider(1, 100, 10, label="Number of Results")
],
outputs=[
gr.Markdown(label="All Results"),
gr.Markdown(label="Recent Results (Within 1 Day)"),
gr.Markdown(label="Debug Information")
],
title="SERPHouse News Search Interface",
description="Enter your search query and select a country to get news results from the SERPHouse API. Recent results (within 1 day) are shown separately.",
theme="Nymbo/Nymbo_Theme",
css=css
)
iface.launch()