Spaces:
Runtime error
Runtime error
| """ | |
| Simple OpenAlex API Test Space | |
| """ | |
| import gradio as gr | |
| import requests | |
| import json | |
| import time | |
| from typing import Dict, List, Any | |
| def test_openalex_api(query: str) -> tuple: | |
| """Test OpenAlex API with different strategies""" | |
| if not query.strip(): | |
| return "Please enter a search query", "", "" | |
| results_text = f"π Testing OpenAlex API with query: '{query}'\n\n" | |
| # Strategy 1: Direct API call | |
| try: | |
| results_text += "=== STRATEGY 1: Direct requests call ===\n" | |
| url = "https://api.openalex.org/works" | |
| params = { | |
| 'search': query, | |
| 'per-page': 10 | |
| } | |
| headers = { | |
| 'User-Agent': 'OpenAlexTest/1.0 (mailto:test@example.com)', | |
| 'Accept': 'application/json' | |
| } | |
| results_text += f"URL: {url}\n" | |
| results_text += f"Params: {params}\n" | |
| results_text += f"Headers: {headers}\n\n" | |
| response = requests.get(url, params=params, headers=headers, timeout=30) | |
| results_text += f"Status Code: {response.status_code}\n" | |
| results_text += f"Response Headers: {dict(response.headers)}\n\n" | |
| if response.status_code == 200: | |
| data = response.json() | |
| results_count = len(data.get('results', [])) | |
| results_text += f"β SUCCESS: Found {results_count} results\n" | |
| if results_count > 0: | |
| first_result = data['results'][0] | |
| results_text += f"First result: {first_result.get('title', 'No title')}\n" | |
| results_text += f"Year: {first_result.get('year', 'Unknown')}\n" | |
| results_text += f"Citations: {first_result.get('citations', 0)}\n\n" | |
| # Return formatted results | |
| formatted_results = json.dumps(data, indent=2)[:2000] + "..." if len(json.dumps(data, indent=2)) > 2000 else json.dumps(data, indent=2) | |
| else: | |
| results_text += f"β FAILED: HTTP {response.status_code}\n" | |
| results_text += f"Response: {response.text[:500]}\n\n" | |
| formatted_results = response.text | |
| except Exception as e: | |
| results_text += f"β EXCEPTION: {str(e)}\n\n" | |
| formatted_results = str(e) | |
| # Strategy 2: Test with different query formats | |
| test_queries = [ | |
| query, | |
| query.replace(' ', '+'), | |
| query.lower(), | |
| ' '.join(query.split()[:3]) # First 3 words only | |
| ] | |
| results_text += "=== STRATEGY 2: Different query formats ===\n" | |
| for i, test_query in enumerate(test_queries): | |
| try: | |
| results_text += f"\nTest {i+1}: '{test_query}'\n" | |
| response = requests.get( | |
| "https://api.openalex.org/works", | |
| params={'search': test_query, 'per-page': 5}, | |
| headers=headers, | |
| timeout=15 | |
| ) | |
| if response.status_code == 200: | |
| data = response.json() | |
| count = len(data.get('results', [])) | |
| results_text += f"β {count} results\n" | |
| if count > 0: | |
| break # Stop at first successful query | |
| else: | |
| results_text += f"β HTTP {response.status_code}\n" | |
| except Exception as e: | |
| results_text += f"β Error: {str(e)}\n" | |
| # Strategy 3: Test basic connectivity | |
| results_text += "\n=== STRATEGY 3: Basic connectivity test ===\n" | |
| try: | |
| response = requests.get("https://api.openalex.org/", timeout=10) | |
| results_text += f"OpenAlex root endpoint: HTTP {response.status_code}\n" | |
| except Exception as e: | |
| results_text += f"β Cannot reach OpenAlex: {str(e)}\n" | |
| # Test other endpoints | |
| try: | |
| response = requests.get("https://httpbin.org/get", timeout=10) | |
| results_text += f"HTTPBin test (internet connectivity): HTTP {response.status_code}\n" | |
| except Exception as e: | |
| results_text += f"β No internet connectivity: {str(e)}\n" | |
| return results_text, formatted_results, f"Query tested: {query}" | |
| # Create Gradio interface | |
| with gr.Blocks(title="OpenAlex API Test", theme=gr.themes.Soft()) as app: | |
| gr.Markdown("# π¬ OpenAlex API Test Space") | |
| gr.Markdown("Test OpenAlex API connectivity and search functionality") | |
| with gr.Row(): | |
| with gr.Column(): | |
| query_input = gr.Textbox( | |
| label="Search Query", | |
| placeholder="Enter search terms (e.g., 'machine learning', 'climate change')", | |
| value="machine learning" | |
| ) | |
| test_btn = gr.Button("π Test OpenAlex API", variant="primary") | |
| with gr.Row(): | |
| with gr.Column(): | |
| results_output = gr.Textbox( | |
| label="Test Results", | |
| lines=20, | |
| max_lines=30 | |
| ) | |
| with gr.Column(): | |
| json_output = gr.Textbox( | |
| label="Raw JSON Response", | |
| lines=20, | |
| max_lines=30 | |
| ) | |
| status_output = gr.Textbox(label="Status", lines=1) | |
| test_btn.click( | |
| fn=test_openalex_api, | |
| inputs=[query_input], | |
| outputs=[results_output, json_output, status_output] | |
| ) | |
| # Auto-test on load | |
| app.load( | |
| fn=lambda: test_openalex_api("artificial intelligence"), | |
| outputs=[results_output, json_output, status_output] | |
| ) | |
| if __name__ == "__main__": | |
| app.launch() | |