MovieMapper/test-api.js

100 lines
3.3 KiB
JavaScript

// Simple test script to verify TVDB API functionality
const axios = require('axios');
const dotenv = require('dotenv');
// Load environment variables
dotenv.config();
async function testTVDBAPI() {
try {
console.log('Testing TVDB API connectivity...');
// Get API key from environment
const apiKey = process.env.TVDB_API_KEY || process.env.API_KEY;
if (!apiKey) {
throw new Error('TVDB_API_KEY not found in environment variables');
}
// First get a token
const loginResponse = await axios.post('https://api4.thetvdb.com/v4/login', {
apikey: apiKey
}, {
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
});
console.log('Login successful:', loginResponse.data.status);
if (loginResponse.data && loginResponse.data.data && loginResponse.data.data.token) {
const token = loginResponse.data.data.token;
console.log('Got token:', token.substring(0, 50) + '...');
// Test search with the token
const searchResponse = await axios.get('https://api4.thetvdb.com/v4/search', {
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json',
'Accept': 'application/json'
},
params: {
query: 'IGPX'
}
});
console.log('Search response:', searchResponse.data);
if (searchResponse.data && searchResponse.data.data) {
console.log('Found shows:', searchResponse.data.data.length);
searchResponse.data.data.forEach(show => {
console.log(`- ${show.name} (ID: ${show.id})`);
});
}
// Test getting show details with extended info
const showId = '73011'; // IGPX Immortal Grand Prix ID
const showResponse = await axios.get(`https://api4.thetvdb.com/v4/series/${showId}/extended`, {
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json',
'Accept': 'application/json'
}
});
console.log('Show details response:', showResponse.data);
// Test getting episodes for the show
const episodesResponse = await axios.get(`https://api4.thetvdb.com/v4/series/${showId}/episodes`, {
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json',
'Accept': 'application/json'
},
params: {
page: 0
}
});
console.log('Episodes response structure:', {
data: episodesResponse.data.data ? 'has data' : 'no data',
total: episodesResponse.data.data?.total,
episodes: episodesResponse.data.data?.episodes ? episodesResponse.data.data.episodes.length : 0
});
if (episodesResponse.data && episodesResponse.data.data && episodesResponse.data.data.episodes) {
console.log('First few episodes:');
episodesResponse.data.data.episodes.slice(0, 5).forEach(episode => {
console.log(`- Episode ${episode.number}: ${episode.name} (Season ${episode.seasonNumber})`);
});
}
}
} catch (error) {
console.error('API Test Error:', error.message);
console.error('Error details:', error.response?.data || error);
}
}
testTVDBAPI();