Connectors

Connectors

Custom Connector Load Pages - Sample code?

Member
edited June 2024 in Connectors

I am building a custom connector and have managed to get it to get the data a parse (excluding columns which contain gaps). the data I have got so far though is page 1 of 51. Is there any sample code which can cycle around pulling in all the pages of data i.e. mine so far is:

else if (metadata.report == "Vulnerabilities"){
var res = httprequest.get("https://api.appcheck-ng.com/api/v1/"+metadata.account.apikey+"/vulnerabilities");

//display result
DOMO.log(res);
//Parse data
if(httprequest.getStatusCode() == 200) {
var jsonRes = JSON.parse(res).data;

datagrid.addColumn('Category', datagrid.DATA_TYPE_STRING);
datagrid.addColumn('Impact', datagrid.DATA_TYPE_STRING);
datagrid.addColumn('Target', datagrid.DATA_TYPE_STRING);
datagrid.addColumn('Probability', datagrid.DATA_TYPE_STRING);
datagrid.addColumn('Title', datagrid.DATA_TYPE_STRING);
datagrid.addColumn('Priority', datagrid.DATA_TYPE_STRING);
datagrid.addColumn('Host', datagrid.DATA_TYPE_STRING);
datagrid.addColumn('Port', datagrid.DATA_TYPE_STRING);

for(var i=0 ; i<jsonRes.length ; i++) {

  1. datagrid.addCell(jsonRes[i].category);
  2. datagrid.addCell(jsonRes[i].impact);
  3. datagrid.addCell(jsonRes[i].target);
  4. datagrid.addCell(jsonRes[i].probability);
  5. datagrid.addCell(jsonRes[i].title);
  6. datagrid.addCell(jsonRes[i].priority);
  7. datagrid.addCell(jsonRes[i].host);
  8. datagrid.addCell(jsonRes[i].port);
  9. datagrid.endRow();
  10. }

}
}

but, this is just the start as the initial response is:

{"count": 2731, "success": true, "results": 250, "pages": 51, "message": "Vulnerabilities found: 2731 Showing: 250 Page: 1 of 51", "data": [{"category": "xxxx", "impact": "low", "target": "xxxx", "probability": "low", "title": "xxxx", "priority": "low", "host": "xxxx.com", "vuln_id": "xxxxxxxxxxxxxxxxxxxxxxxx", "parameter": "cookie.ex_v", "port": 443}, ……..

I can add "?page=2"); so know I can select pages:

{"count": 2731, "success": true, "results": 250, "pages": 51, "message": "Vulnerabilities found: 2731 Showing: 250 Page: 2 of 51", "data": [{"

Thanks

Best Answer

  • Coach
    Answer ✓

    For paginated data, you might try something like this:

    1. else if (metadata.report == "Vulnerabilities") {

    2. // Define base URL and API key
    3. var baseUrl = "https://api.appcheck-ng.com/api/v1/" + metadata.account.apikey + "/vulnerabilities";
    4. var allData = [];
    5.  
    6. // Function to fetch data for a specific page
    7. function fetchPage(page) {
    8. var url = baseUrl + "?page=" + page;
    9. var res = httprequest.get(url);
    10. DOMO.log("Fetching page: " + page);
    11. DOMO.log(res);

    12. if (httprequest.getStatusCode() == 200) {
    13. var jsonRes = JSON.parse(res);
    14. allData = allData.concat(jsonRes.data);
    15. return jsonRes.meta.pagination.pages; // Return total number of pages
    16. } else {
    17. DOMO.log("Failed to fetch data: " + httprequest.getStatusCode());
    18. return 0; // Return 0 to stop the loop in case of an error
    19. }
    20. }


    21. // Fetch the first page to determine the total number of pages
    22. var totalPages = fetchPage(1);
    23.  


    24. // Loop through remaining pages if there are more than one
    25. for (var page = 2; page <= totalPages; page++) {
    26. fetchPage(page);
    27. }
    28.  


    29. // Define the schema for the data grid
    30. datagrid.addColumn('Category', datagrid.DATA_TYPE_STRING);
    31. datagrid.addColumn('Impact', datagrid.DATA_TYPE_STRING);
    32. datagrid.addColumn('Target', datagrid.DATA_TYPE_STRING);
    33. datagrid.addColumn('Probability', datagrid.DATA_TYPE_STRING);
    34. datagrid.addColumn('Title', datagrid.DATA_TYPE_STRING);
    35. datagrid.addColumn('Priority', datagrid.DATA_TYPE_STRING);
    36. datagrid.addColumn('Host', datagrid.DATA_TYPE_STRING);
    37. datagrid.addColumn('Port', datagrid.DATA_TYPE_STRING);
    38.  


    39. // Populate the data grid with all the fetched data
    40. for (var i = 0; i < allData.length; i++) {
    41. datagrid.addCell(allData[i].category);
    42. datagrid.addCell(allData[i].impact);
    43. datagrid.addCell(allData[i].target);
    44. datagrid.addCell(allData[i].probability);
    45. datagrid.addCell(allData[i].title);
    46. datagrid.addCell(allData[i].priority);
    47. datagrid.addCell(allData[i].host);
    48. datagrid.addCell(allData[i].port);
    49. datagrid.endRow();
    50. }
    51. }

    ** Was this post helpful? Click Agree or Like below. **
    ** Did this solve your problem? Accept it as a solution! **

Answers

  • Coach
    Answer ✓

    For paginated data, you might try something like this:

    1. else if (metadata.report == "Vulnerabilities") {

    2. // Define base URL and API key
    3. var baseUrl = "https://api.appcheck-ng.com/api/v1/" + metadata.account.apikey + "/vulnerabilities";
    4. var allData = [];
    5.  
    6. // Function to fetch data for a specific page
    7. function fetchPage(page) {
    8. var url = baseUrl + "?page=" + page;
    9. var res = httprequest.get(url);
    10. DOMO.log("Fetching page: " + page);
    11. DOMO.log(res);

    12. if (httprequest.getStatusCode() == 200) {
    13. var jsonRes = JSON.parse(res);
    14. allData = allData.concat(jsonRes.data);
    15. return jsonRes.meta.pagination.pages; // Return total number of pages
    16. } else {
    17. DOMO.log("Failed to fetch data: " + httprequest.getStatusCode());
    18. return 0; // Return 0 to stop the loop in case of an error
    19. }
    20. }


    21. // Fetch the first page to determine the total number of pages
    22. var totalPages = fetchPage(1);
    23.  


    24. // Loop through remaining pages if there are more than one
    25. for (var page = 2; page <= totalPages; page++) {
    26. fetchPage(page);
    27. }
    28.  


    29. // Define the schema for the data grid
    30. datagrid.addColumn('Category', datagrid.DATA_TYPE_STRING);
    31. datagrid.addColumn('Impact', datagrid.DATA_TYPE_STRING);
    32. datagrid.addColumn('Target', datagrid.DATA_TYPE_STRING);
    33. datagrid.addColumn('Probability', datagrid.DATA_TYPE_STRING);
    34. datagrid.addColumn('Title', datagrid.DATA_TYPE_STRING);
    35. datagrid.addColumn('Priority', datagrid.DATA_TYPE_STRING);
    36. datagrid.addColumn('Host', datagrid.DATA_TYPE_STRING);
    37. datagrid.addColumn('Port', datagrid.DATA_TYPE_STRING);
    38.  


    39. // Populate the data grid with all the fetched data
    40. for (var i = 0; i < allData.length; i++) {
    41. datagrid.addCell(allData[i].category);
    42. datagrid.addCell(allData[i].impact);
    43. datagrid.addCell(allData[i].target);
    44. datagrid.addCell(allData[i].probability);
    45. datagrid.addCell(allData[i].title);
    46. datagrid.addCell(allData[i].priority);
    47. datagrid.addCell(allData[i].host);
    48. datagrid.addCell(allData[i].port);
    49. datagrid.endRow();
    50. }
    51. }

    ** Was this post helpful? Click Agree or Like below. **
    ** Did this solve your problem? Accept it as a solution! **

  • Hi, thanks. This was great. The only changes I made was the returned total pages on line 16 I changed to

    1. return JSON.parse(res).pages; // Return total number of pages

    and I also commented out the log report on line 12 so my Console just shows

    Fetching page: 1

    Fetching page: 2

    Fetching page: 3

    Fetching page: 4

    Fetching page: 5

    ……..

    This can be used to create the dataset successfully :). Many thanks

Welcome!

It looks like you're new here. Members get access to exclusive content, events, rewards, and more. Sign in or register to get started.
Sign In