Import Required Libraries
- To interact with the Finnhub API, you'll need to use `fetch` or a similar library like `axios` for making HTTP requests in JavaScript.
- While native `fetch` works well for most cases, `axios` can offer enhanced functionality, such as intercepting requests or setting default headers.
const axios = require('axios'); // If using Node.js, ensure axios is installed
Set Up Constants
- Create constants for reusability, such as the base URL of the API and any endpoints you plan to use repeatedly.
- Store your API key securely. Never hardcode it directly in the code for production apps; consider using environment variables.
const FINNHUB_API_BASE_URL = 'https://finnhub.io/api/v1';
const API_KEY = 'your_api_key_here'; // Preferably use process.env.API_KEY
Create a Function to Fetch Data
- Encapsulate your API call logic inside a reusable function. This function can accept parameters to specify different endpoints or query parameters.
- Handle errors gracefully, using `try/catch` blocks to manage any issues during the fetch request.
async function fetchFinancialData(endpoint, params = {}) {
const url = new URL(`${FINNHUB_API_BASE_URL}/${endpoint}`);
params.token = API_KEY; // Add the API key to params
Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));
try {
const response = await axios.get(url.toString());
return response.data;
} catch (error) {
console.error('Error fetching financial data:', error);
throw error; // Rethrow to handle it outside if needed
}
}
Utilize the Fetch Function
- Example usage of the fetch function to retrieve specific financial data, such as stock symbols or company profiles.
- Showcase how to handle the returned data, emphasizing any specific data parsing needs.
(async () => {
try {
const symbol = 'AAPL';
const financialData = await fetchFinancialData('quote', { symbol });
console.log(`Current price of ${symbol}: $${financialData.c}`);
} catch (error) {
console.error('Unable to retrieve data:', error);
}
})();
Optimize and Expand
- Consider adding support for additional endpoints as needed, building upon the same fetch function structure.
- For optimization, manage pagination effectively if fetching large datasets, and use caching strategies if necessary to avoid hitting rate limits.
async function fetchStockSymbols() {
try {
const stockSymbols = await fetchFinancialData('stock/symbol', { exchange: 'US' });
return stockSymbols;
} catch (error) {
console.error('Failed to fetch stock symbols:', error);
}
}