Mayrasilva's picture
Rename App.py to app.py
43906c7 verified
Raw
History Blame Contribute Delete
1.86 kB
import gradio as gr
import requests
import json
from bs4 import BeautifulSoup
def validate_schema(url):
try:
response = requests.get(url, timeout=5)
response.raise_for_status()
soup = BeautifulSoup(response.text, 'html.parser')
scripts = soup.find_all('script', type='application/ld+json')
results = []
for script in scripts:
try:
data = json.loads(script.string)
if isinstance(data, dict):
results.append(data)
elif isinstance(data, list):
results.extend(data)
except Exception as e:
continue
detected_types = list({item.get('@type', 'Unknown') for item in results if '@type' in item})
core_types = {'Organization', 'Article', 'Person'}
trust_trail = any(t in core_types for t in detected_types)
schema_health = round(len(detected_types) / max(len(scripts), 1), 2)
return {
"trustTrail": trust_trail,
"schemaHealth": schema_health,
"detectedTypes": detected_types,
"warnings": [] if trust_trail else ["No core Trust Trail types (Organization, Article, Person) found."]
}
except Exception as e:
return {
"trustTrail": False,
"schemaHealth": 0.0,
"detectedTypes": [],
"warnings": [f"Error: {str(e)}"]
}
demo = gr.Interface(
fn=validate_schema,
inputs=gr.Textbox(label="Enter URL to validate", placeholder="https://your-site.com/page"),
outputs=gr.JSON(label="Validation Output"),
title="AI Citation SEO – Trust Trail Validator",
description="This tool checks for Trust Trail schema markup in a given URL and returns validation results."
)
if __name__ == "__main__":
demo.launch()