Journal‎ > ‎

Retrieving Salesforce Chatter User Influence Ranking using Google Apps Script

posted Feb 18, 2012 1:04 PM by Saqib Ali   [ updated Feb 18, 2012 1:09 PM ]
The following code can be used to retrieve Salesforce Chatter User Profiles including the User Influence Ranking. If you have any questions, please feel free to email me at docbook.xml@gmail.com



function retrieveChatterUserProfiles() {
     
  var lock = LockService.getPublicLock();
  if (lock.tryLock(300))  {
    
    
    // Consumer key and consumer secret must be obtained from http://developer.force.com/.
    // Instruction at http://wiki.developerforce.com/page/Chatter_API
 
    var consumerKey = "";   // Enter OAuth Consumer Key here
    var consumerSecret = ""; // Enter OAuth Consumer Secret here
    
    
    
    // Begin boilerplate
    var oauth = UrlFetchApp.addOAuthService("Chatter user data");
    oauth.setAccessTokenUrl("https://login.salesforce.com/_nc_external/system/security/oauth/AccessTokenHandler");
    oauth.setRequestTokenUrl("https://login.salesforce.com/_nc_external/system/security/oauth/RequestTokenHandler");
    oauth.setAuthorizationUrl("https://login.salesforce.com/setup/secur/RemoteAccessAuthorizationPage.apexp?oauth_consumer_key="+encodeURIComponent(consumerKey));
    oauth.setConsumerKey(consumerKey);
    oauth.setConsumerSecret(consumerSecret);
    
    
    var loginUrl = "https://login.salesforce.com/services/OAuth/u/23.0";
    var options = { method : "POST", oAuthServiceName : "Chatter user data", oAuthUseToken : "always" };
    var result = UrlFetchApp.fetch(loginUrl, options);
    
    var sfResponse = Xml.parse(result.getContentText(), true).getElement();
    
    var sessionId = sfResponse.getElement("sessionId").getText();
    var serverUrl = sfResponse.getElement("serverUrl").getText();
    var instanceUrl = serverUrl.match(/^https?:\/\/[^\/]+/)[0];
    
    // End boilerplate
    
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Profiles");
    sheet.clear();
    sheet.appendRow(["id", "url", "name", "email", "managerName", "followers", "followingPeople", "chatterInfluenceRank", "chatterInfluencePercentile", "aboutMe"]);
    
    var nextPageUrlSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("nextPageUrl");
    
    
    
    ///services/data/v24.0/chatter/users/?pageSize=100
    var nextPageUrl = "/services/data/v24.0/chatter/users/?pageSize=100"; 
    // Begin sample of Chatter Rest API

    while (nextPageUrl){

      var feedUrl = instanceUrl + nextPageUrl; // Chatter API URL
      var response = UrlFetchApp.fetch(feedUrl, { method : "GET", headers : { "Authorization" : "OAuth " + sessionId } });
      
      var feed = JSON.parse(response.getContentText());
      nextPageUrl = feed.nextPageUrl;
   
    
    
      for (var i=0; i<feed.users.length; i++){
        var chatterInfluenceRank = feed.users[i].chatterInfluence.rank;
        var chatterInfluencePercentile = feed.users[i].chatterInfluence.percentile;
        var name = feed.users[i].name;
        var email = feed.users[i].email;
        var id = feed.users[i].id;
        var url = feed.users[i].url;
        var followers = feed.users[i].followersCount;
        var followingPeople = feed.users[i].followingCounts.people;
        var aboutMe =  feed.users[i].aboutMe;
        var managerName =  feed.users[i].managerName;
        sheet.appendRow([id, url, name, email, managerName, followers, followingPeople, chatterInfluenceRank, chatterInfluencePercentile, aboutMe]);
      }
    Logger.log(nextPageUrl);
    }
  }
  
}