Help

Re: OpenAPI import of JSON script stops unexpectedly.

Solved
Jump to Solution
3273 0
cancel
Showing results for 
Search instead for 
Did you mean: 
TMI
4 - Data Explorer
4 - Data Explorer

Goal: importing JSON from an open API into my airtable base.

How: Using a script extension in the base (at the bottom of this message), with proper error logging.

Result: No return after “let response;” The script just seems to stop without any error triggering. The last log is “console.log(" Start fetching domeinen data...")”

Test that does work: A curl request to the API does yield the complete JSON, just as a request through postman. So the API is reachable.

The code to request and import the data:

 

 

// API credentials
let apiKey = "(API key censored, but it's working)";
let apiUrl = "https://opendata.slo.nl/curriculum/api/v1/domein/";

// Function to fetch the domeinen data
async function fetchDomeinen() {
    console.log(" Start fetching domeinen data...");

    let response;
    try {
        response = await fetch(apiUrl, {
            method: "GET",
            headers: {
                "Accept": "application/json",
                "Authorization": "Basic " + btoa("key:" + apiKey) // Basic Auth with API key
            }
        });
        console.log("Response received:", response); // Log the full response object for debugging

        if (!response.ok) {
            console.error(` API request failed with status: ${response.status}, ${response.statusText}`);
            return null;
        }

        console.log(` API request completed. Status code: ${response.status}`);
    } catch (error) {
        console.error(" Error during fetch:", error);
        return null;
    }

    // Check if response contains data
    try {
        let data = await response.json();
        if (!data || data.length === 0) {
            console.error("⚠️ No data found in API response.");
            return null;
        }
        console.log(" Successfully fetched domeinen data:", data);
        return data; // Return the domeinen data
    } catch (error) {
        console.error(" Error parsing JSON:", error);
        return null;
    }
}

// Function to update Airtable with domeinen data
async function updateTableWithDomeinen() {
    console.log(" Fetching domeinen...");
    
    // Fetch domeinen data
    let domeinen = await fetchDomeinen();
    
    if (!domeinen) {
        console.log(" No domeinen data found. Exiting...");
        return;
    }

    // Check if the table "Domeinen" exists
    let domeinenTable;
    try {
        domeinenTable = base.getTable("Domeinen");
        console.log(" Domeinen table found.");
    } catch (error) {
        console.error(" Error: Domeinen table not found in Airtable. Please check table name.", error);
        return;
    }

    console.log(" Starting to insert domeinen data into Airtable...");
    
    // Loop through each domein and create a record in Airtable
    for (let domein of domeinen) {
        // Check if the essential fields are present in the domein object
        if (!domein.uuid || !domein.titel) {
            console.error(` Domein missing required fields (UUID or Title). Skipping domein:`, domein);
            continue;
        }

        console.log(` Inserting domein: UUID = ${domein.uuid}, Title = ${domein.titel}`);

        try {
            await domeinenTable.createRecordAsync({
                "UUID": domein.uuid || "No UUID",
                "Naam": domein.titel || "No Title",
                "Omschrijving": domein.omschrijving || "No Description",
                "Type domein": domein.type || "No Type", // Adjust according to API response
                "Release datum": domein.releaseDate ? new Date(domein.releaseDate) : null, // Optional
                "URL": `https://opendata.slo.nl/curriculum/uuid/${domein.uuid}`
            });
            console.log(` Successfully inserted domein: ${domein.uuid}`);
        } catch (error) {
            console.error(` Error inserting domein: ${domein.uuid}`, error);
        }
    }

    console.log(" Finished inserting all domeinen.");
}

// Run the script to update Airtable
updateTableWithDomeinen();

 

 

 

1 Solution

Accepted Solutions
Alexey_Gusev
13 - Mars
13 - Mars

Hi,
try to run it with last line 

await updateTableWithDomeinen();




See Solution in Thread

2 Replies 2
Alexey_Gusev
13 - Mars
13 - Mars

Hi,
try to run it with last line 

await updateTableWithDomeinen();




TMI
4 - Data Explorer
4 - Data Explorer

Thanks! This works and the script continues and logs an actual error. Now I can find the next issue, which might be unrelated: 

console.log
" Fetching domeinen..."
console.log
" Start fetching domeinen data..."
console.log
"Response received:"
{}
console.error
" API request failed with status: 401, Unauthorized"
console.log
" No domeinen data found. Exiting..."