Get Activity Details Of All OneDrive Users Using Microsoft Graph API

In this article, I will explain the steps to check all the activities of OneDrive users, using Graph API.

In the previous article, we have already seen how to email activity of all users using Graph API.

In our organization, we have this requirement to get the synced file count of all OneDrive users, shared externally file count, and shared internally file count for the last 30 days. We have used Microsoft Graph API to achieve this. Here, I’m sharing the steps involved to get the OneDrive activities and how to check the Graph API results in O365 portal reports.

We can get the 7, 30, 90, 180 days activity details using the below API.

API URL: https://graph.microsoft.com/v1.0/reports/getOneDriveActivityUserDetail(period='D7')

Version 1.0 provides the results in CSV format.

Using the beta version, we can get the JSON results. Here is the URL for the beta version.

Here are the available column details from the OneDrive Activity Graph API.

Get All OneDrive Users Activity Details Using Microsoft Graph API 

From Microsoft documentation

“Microsoft Graph is the gateway to data and intelligence in Microsoft 365. Microsoft Graph provides a unified programmability model that you can use to take advantage of the tremendous amount of data in Office 365, Enterprise Mobility + Security, and Windows 10.

You can use Microsoft Graph API to build apps for organizations and consumers that interact with the data of millions of users. With Microsoft Graph, you can connect to a wealth of resources, relationships, and intelligence, all through a single endpoint: https://graph.microsoft.com”

Reference URL - https://developer.microsoft.com/en-us/graph/docs/concepts/overview

Here is the Microsoft Documentation URL.

https://developer.microsoft.com/en-us/graph/docs/concepts/overview
 

Steps to retrieve OneDrive user activity details using node.js

 
Let us look at the code part first. Follow the below-listed steps and code.

End-point URL - https://graph.microsoft.com/v1.0/reports/getOneDriveActivityUserDetail(period='D30')

Graph Token URL - https://login.microsoftonline.com/{tenantID}/oauth2/v2.0/token

Graph Token body - client_id=" + configValues.clientId + "&scope=" + configValues.scope + "&client_secret=" + configValues.clientSecretId + "&grant_type=client_credentials

Step 1

Register the app in Azure AD using client ID, Tenant ID, and secret key.

Follow the below URL to register the app in Azure.

Make sure to check that your registered Azure app has permissions to read the directory data.

Step 2

In your node.js solution, just create the config file and provide the below values. We have created a config file to avoid the hard-coded things. Provide your tenantId, clientId, and secret key. Please don't use the below mentioned one; it is just a sample (it won't work).

  1. {    
  2.     "scope""https%3A%2F%2Fgraph.microsoft.com%2F.default",    
  3.     "tenantId""7aa111ae-1ab6-4256-af4c-a0c1cdb4575d",    
  4.     "clientId""bff7fae8-c253-37e5-9b6a-e096bed54f11",    
  5.     "clientSecretId""XgfrmWfX0K/N7SRouCdAskTKrz0cnKN2rS12IkJ9SJk="    
  6. }    

Step 3

Refer to the config file in your JS file, as shown below.

  1. var request = require('sync-request');      
  2. var fs = require('fs');      
  3. var configValues = JSON.parse(fs.readFileSync('emailactivityconfig.json'));      

Step 4

Then, frame the Graph Token URL and Graph Token Body to get the authorized token.

  1. var graphAccessUrl = "https://login.microsoftonline.com/" + configValues.tenantId + "/oauth2/v2.0/token";      
  2. var graphTokenBody = "client_id=" + configValues.clientId + "&scope=" + configValues.scope + "&client_secret=" + configValues.clientSecretId + "&grant_type=client_credentials"    

Step 5

Get the Authorized Token using the below method.

  1. varcontentType = "application/x-www-form-urlencoded; charset=utf-8";    
  2. vargraphTokenError = "Failed to get graph token";    
  3. vargraphToken = "";    
  4. //Call the get token method    
  5. getToken(graphAccessUrl, contentType, graphTokenBody, graphTokenError);    
  6. //This method is using to get the token from the graph token url and body    
  7. functiongetToken(url, type, content, errorMessage, callback) {    
  8.     var options = {    
  9.         'headers': {    
  10.             'Content-Type': type    
  11.         },    
  12.         'body': content    
  13.     };    
  14.     //Posting access parameters to the server    
  15.     var tokenResponse = httpPost(url, options);    
  16.     if (tokenResponse.statusCode === 200) {    
  17.         error = errorMessage;    
  18.         if (errorMessage === graphTokenError) {    
  19.             vartoken = JSON.parse(tokenResponse.body.toString('utf-8'));    
  20.             graphToken = token.access_token;    
  21.         }    
  22.         if (callback) {    
  23.             returncallback();    
  24.         }    
  25.     } else {    
  26.         log(errorMessage);    
  27.     }    
  28. }    

Step 6

Once you receive the token, make the HTTP call using endpoint and get the results.

Step 7

OneDrive Activity Report in Graph API v1.0 provides the results as CSV format not in JSON format, so we have no need to use the top. In a single API call, we can retrieve all the user results.

  1. var reqUrl = "https://graph.microsoft.com/v1.0/reports/getOneDriveActivityUserDetail(period='D30')";    
  2. var usersCount = 0;    
  3.     
  4. function getOneDriveActivityReportData(reqUrl) {    
  5.     try {    
  6.         console.log("Inside get user last logon data method!!!");    
  7.         var emailActivityRes = httpGet(encodeURI(reqUrl), GRAPH_TOKEN);    
  8.         if (emailActivityRes.statusCode == 200) {    
  9.             failIndex = 0;    
  10.             var parsedJson = convertCSVToJSON(emailActivityRes.body.toString('utf-8'));    
  11.             //add use case value to json valued array    
  12.             var parsJson = JSON.parse(parsedJson);    
  13.             if (parsJson) {    
  14.                 usersCount = usersCount + parsJson.length;    
  15.                 for (var i = 0; i < parsJson.length; i++) {    
  16.                     var currItem = parsJson[i];    
  17.                     if (currItem) {    
  18.                         //process your data here    
  19.                     }    
  20.                 }    
  21.             }    
  22.             console.log("OneDrive users count : " + usersCount);    
  23.         } else {    
  24.             console.log("One Drive user activity api received failed response: " + emailActivityRes.statusCode)    
  25.         }    
  26.     }    
  27. catch (ex) {    
  28.     console.log(ex);    
  29. }    
  30. }    
  31. //The below method is using to convert the csv values to json values    
  32. function convertCSVToJSON(csv) {    
  33.     /// <summary>This function is used to convert CSV to JSON</summary>     
  34.     /// <param name="csv" type="String">CSV string</param>    
  35.     /// <returns type="Array">Return as JSON Array</returns>    
  36.     try {    
  37.         var lines = csv.split("\n");    
  38.         var result = [];    
  39.         var headers = lines[0].split(",");    
  40.         for (var i = 1; i < lines.length; i++) {    
  41.             var obj = {};    
  42.             if (lines[i]) {    
  43.                 var currentline = lines[i].split(",");    
  44.                 for (var j = 0; j < headers.length; j++) {    
  45.                     obj[headers[j]] = currentline[j];    
  46.                 }    
  47.                 result.push(obj);    
  48.             }    
  49.         }    
  50.         return JSON.stringify(result);    
  51.     } catch (ex) {    
  52.         console.log(ex + " in csvToJSON method...");    
  53.     }    
  54. }   

Step 8

Then, bind the results based on your requirement. You will receive the below object when you call the OneDrive Users Activity API.

Get All OneDrive Users Activity Details Using Microsoft Graph API 

Steps to check the OneDrive user activity details from O365 portal

 
Once you get the results, you can verify the results from O365 and also, follow the below-listed steps to verify the output.

Step 1

Log into Microsoft 365 Admin Center. Learn more here.

https://admin.microsoft.com/AdminPortal 

Step 2

Provide a valid username and password to log into your account.

Step 3

From the Microsoft 365 Admin Center main menu, click the "Reports" >> "Usage" option.

Get All OneDrive Users Activity Details Using Microsoft Graph API 

Step 4

On the Usage pane, click "Select a report" drop-down list, expand OneDrive, and click the "Activity" option.

Get All OneDrive Users Activity Details Using Microsoft Graph API  
Get All OneDrive Users Activity Details Using Microsoft Graph API 
Step 5

Click on the "Export" option; you will get the last 30-days report for SharePoint Site collection with the relevant data.

Get All OneDrive Users Activity Details Using Microsoft Graph API

 

Reference Link

https://docs.microsoft.com/en-us/graph/api/reportroot-getonedriveactivityuserdetail?view=graph-rest-1.0

Summary

In this article, we have explored how to get the activity details of OneDrive users from Office365 portal, using Graph API. I hope this article will come in handy for you. Please share your feedback in the comments section.