Skip to main content
Glama
test-springer-openaccess.ts4.23 kB
/** * Test if OpenAccess API needs separate key or configuration */ import axios from 'axios'; import dotenv from 'dotenv'; import { fileURLToPath } from 'url'; import { dirname, join } from 'path'; // Load environment variables const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); dotenv.config({ path: join(__dirname, '../../.env') }); const API_KEY = process.env.SPRINGER_API_KEY; const OPENACCESS_KEY = process.env.SPRINGER_OPENACCESS_API_KEY; console.log('=== Testing Springer OpenAccess API Configuration ===\n'); console.log('Main API Key configured:', !!API_KEY); console.log('Separate OpenAccess Key configured:', !!OPENACCESS_KEY); console.log('Using key for OpenAccess:', OPENACCESS_KEY || API_KEY ? 'Yes' : 'No'); async function testOpenAccessWithKey(apiKey: string | undefined, keyName: string) { if (!apiKey) { console.log(`\n❌ ${keyName} not configured`); return false; } console.log(`\n📝 Testing with ${keyName}...`); try { const response = await axios.get('https://api.springernature.com/openaccess/json', { params: { q: 'COVID-19', api_key: apiKey, s: 1, p: 5 }, headers: { 'Accept': 'application/json' }, timeout: 10000 }); console.log(`✅ Success! Status: ${response.status}`); // Check response structure if (response.data) { const records = response.data.records || response.data.result || []; console.log(` Records found: ${Array.isArray(records) ? records.length : 0}`); if (Array.isArray(records) && records.length > 0) { const first = records[0]; console.log(` First result:`); console.log(` - Title: ${first.title || 'N/A'}`); console.log(` - DOI: ${first.doi || 'N/A'}`); console.log(` - Has PDF: ${!!first.url?.find((u: any) => u.format === 'pdf')}`); } // Check API message if (response.data.apiMessage) { console.log(` API Message: ${response.data.apiMessage}`); } } return true; } catch (error: any) { if (error.response) { console.log(`❌ Failed with status ${error.response.status}: ${error.response.statusText}`); if (error.response.data?.message) { console.log(` Error: ${error.response.data.message}`); } if (error.response.status === 401) { console.log(` → This key does not have OpenAccess API permissions`); } } else { console.log(`❌ Network error: ${error.message}`); } return false; } } async function testBothAPIs() { // Test with main key const mainKeyWorks = await testOpenAccessWithKey(API_KEY, 'Main API Key'); // Test with separate OpenAccess key if configured and different if (OPENACCESS_KEY && OPENACCESS_KEY !== API_KEY) { const openAccessKeyWorks = await testOpenAccessWithKey(OPENACCESS_KEY, 'Separate OpenAccess Key'); console.log('\n=== Summary ==='); console.log(`Main key works with OpenAccess API: ${mainKeyWorks ? '✅' : '❌'}`); console.log(`Separate key works with OpenAccess API: ${openAccessKeyWorks ? '✅' : '❌'}`); } else { console.log('\n=== Summary ==='); console.log(`Main key works with OpenAccess API: ${mainKeyWorks ? '✅' : '❌'}`); if (!mainKeyWorks) { console.log('\n💡 Recommendations:'); console.log('1. Check if your API key has OpenAccess API permissions at:'); console.log(' https://dev.springernature.com/'); console.log('2. If you need OpenAccess API, you may need to:'); console.log(' - Request OpenAccess API access for your existing key'); console.log(' - Or get a separate API key with OpenAccess permissions'); console.log('3. Add the OpenAccess key to .env as SPRINGER_OPENACCESS_API_KEY'); console.log('\nNote: The Meta API v2 still works and can filter for open access papers,'); console.log('but the dedicated OpenAccess API provides better open access coverage.'); } } } // Run tests testBothAPIs().then(() => { console.log('\n=== Test Complete ==='); }).catch(error => { console.error('Unexpected error:', error); });

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Dianel555/paper-search-mcp-nodejs'

If you have feedback or need assistance with the MCP directory API, please join our Discord server