Help

The Community will be undergoing maintenance from Friday February 21 - Friday, February 28 and will be "read only" during this time. To learn more, check out our Announcements blog post.

OpenAPI import of JSON script stops unexpectedly.

Solved
Jump to Solution
3730 2
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..."