mcp-client / app.py
codejedi's picture
beautifulsoup4
8ca7148
raw
history blame
4.5 kB
import gradio as gr
from textblob import TextBlob
import gradio as gr
from textblob import TextBlob
import requests
from bs4 import BeautifulSoup
def get_nation_issues(NATION, X_PASSWORD):
url = f"https://www.nationstates.net/cgi-bin/api.cgi"
headers = {
"X-Password": X_PASSWORD,
"User-Agent": "Nationstate LLM"
}
params = {
"nation": NATION,
"q": "issues"
}
response = requests.get(url, headers=headers, params=params)
return response.text
def get_nation_issues_JSON(nation, password):
"""
Fetches and reformats issues from the NationStates API.
Args:
nation (str): The nation name.
password (str): The API password.
Returns:
dict: A dictionary containing the nation ID and a list of issue details.
"""
# Fetch raw SML/XML data
sml_data = get_nation_issues(nation, password)
# Parse the SML/XML
soup = BeautifulSoup(sml_data, "xml")
# Extract nation info
nation_elem = soup.find("NATION")
nation_id = nation_elem.get("id") if nation_elem else "Unknown"
# List to store issues
issues_list = []
# Extract issues
if nation_elem:
for issue in nation_elem.find_all("ISSUE"):
issue_data = {
"issue_id": issue.get("id", "Unknown"),
"title": issue.TITLE.get_text() if issue.TITLE else "No title available",
"text": issue.TEXT.get_text() if issue.TEXT else "No text available",
"author": issue.AUTHOR.get_text() if issue.AUTHOR else "Unknown author",
"editor": issue.EDITOR.get_text() if issue.EDITOR else "Unknown editor",
"pic1": issue.PIC1.get_text() if issue.PIC1 else "No image 1",
"pic2": issue.PIC2.get_text() if issue.PIC2 else "No image 2",
"options": []
}
# Extract options within the issue
for option in issue.find_all("OPTION"):
option_data = {
"option_id": option.get("id", "Unknown"),
"text": option.get_text() if option else "No option text"
}
issue_data["options"].append(option_data)
# Add issue data to list
issues_list.append(issue_data)
return {"nation_id": nation_id, "issues": issues_list}
def address_nation_issues(NATION, X_PASSWORD, issue_id, option_id):
"""
Address a specific issue for a nation in NationStates API.
Args:
NATION (str): The nation name.
X_PASSWORD (str): The API password.
issue_id (int): The issue ID to address.
option_id (int): The chosen option ID for the issue.
Returns:
str: API response text.
"""
url = "https://www.nationstates.net/cgi-bin/api.cgi"
headers = {
"X-Password": X_PASSWORD,
"User-Agent": "Nationstate LLM"
}
data = {
"nation": NATION,
"c": "issue",
"issue": issue_id,
"option": option_id
}
response = requests.post(url, headers=headers, data=data)
return response.text
# Create the Gradio interface
get_nation_issues_JSON_interface = gr.Interface(
fn=get_nation_issues_JSON,
inputs=[
gr.Textbox(label="Nation Name", placeholder="Enter the nation name"),
gr.Textbox(label="API Password", placeholder="Enter your API password"),
],
outputs=gr.JSON(),
title="Get Nation Issues as JSON",
description="Fetch and reformat issues from the NationStates API",
api_name="get_nation_issues_JSON",
)
address_nation_issues_interface = gr.Interface(
fn=address_nation_issues,
inputs=[
gr.Textbox(label="Nation Name", placeholder="Enter the nation name"),
gr.Textbox(label="API Password", placeholder="Enter your API password"),
gr.Textbox(label="Issue ID", placeholder="Enter the issue ID to address"),
gr.Textbox(label="Option ID", placeholder="Enter the option ID to choose")
],
outputs=gr.Textbox(label="Response"),
title="Address Nation Issues",
description="Address a specific issue for a nation in NationStates API",
api_name="address_nation_issues",
)
demo = gr.TabbedInterface(
interface_list=[get_nation_issues_JSON_interface, address_nation_issues_interface],
tab_names=["Get Nation Issues JSON", "Address Nation Issues"])
# Launch the interface and MCP server
if __name__ == "__main__":
demo.launch(mcp_server=True)