This sample code uses jQuery to fetch 10 experts from a given category and display them on the page. It is meant as a guide on the API and is not production-ready.
//******************
// Kasamba profile listing API Endpoint example
// Uses API Version 1.1
// No support or warranty is offered or implied for this snippet.
//*******************
//updates the experts displayed to the given category
//categories provided are converted into the categoryid used in the ajax request
function changeExperts(categoryID){
$("#expertgrid").empty(); // I have a div element with id "expertgrid" that I'm using to hold my expert information
//build GET url and fetch the results
var url = '<a href="//apis.kassrv.com/experts.svc/1.1/categories/'+categoryID+'/jsonp?sort=9&count=10&callback=api_expertProfiles';">//apis.kassrv.com/experts.svc/1.1/categories/'+categoryID+'/jsonp?sort=9&count=10&callback=api_expertProfiles';</a>
$.ajax({
type:'GET',
url: url,
dataType: 'script' });
});
}
//callback function from retrieving a listing of expert profiles
//obj is returned json data
function api_expertProfiles(obj){
// cycle through experts and create their html
for(var i=0;i< obj.experts.length;i++){
var catID = obj.category.id;
var expertID = obj.experts[i].id;
var expertThumbnail = obj.experts[i].thumbnail;
var expertName = obj.experts[i].name;
var expertAverageRating = Math.round(obj.experts[i].averageRating);
var expertReviews = obj.experts[i].reviews;
var expertReviewsCount = obj.experts[i].reviewsCount;
var expertFee = obj.experts[i].fee;
var expertDetailedDescription = obj.experts[i].description;
var expertContactLive = obj.experts[i].contactLive;
var expertStatus = obj.experts[i].status;
var expertContactOffline = obj.experts[i].contactOffline;
var contactLink = expertContactOffline;
if(expertStatus == 1 || expertStatus == 4) // these statuses are 'available'
{ contactLink = expertContactLive; }
//start the expert profile HTML
var expertString = "< div id='"+GRIDNAME+"_Expert_"+i+"' >"+
"< div class='grid' >"+
"< div class='profile-info' >"+
"< div class='profile-photo' >"+
"< a href=\"javascript:OpenWindow('https://www.liveperson.com/Professional/expert-profile.aspx?BanID="+BANNERID+"&CatID="+catID+"&ExpID="+expertID+"','970','800') \" >< img class='photo' src='"+expertThumbnail+"' title='"+expertName+"' alt='"+expertName+"' / >< /a >"+
"< /div >"+
"< span class='rating' >< img src='//marketing-kasamba.kassrv.com/ac/liveperson-partners/shared/graphics/rate"+expertAverageRating+".png' / >< /span >"+
"< cite class='reviews' >< a href=\"javascript:OpenWindow('https://www.liveperson.com/rating/expert-rating.aspx?BanID="+BANNERID+"&i_MemID="+expertID+"','450','700')\" >"+expertReviewsCount+" reviews< /a >< /cite >"+
"< cite class='perminute' >$ "+expertFee+"/min< /cite >"+
"< /div >"+
"< div class='profile-desc' >"+
"< h2 >< a id='profile_url' href=\"javascript:OpenWindow('https://www.liveperson.com/Professional/expert-profile.aspx?BanID="+BANNERID+"&CatID="+catID+"&ExpID="+expertID+"','970','800')\" class='expname' >"+expertName+"< /a >< /h2 >"+
"< p class='description' >"+expertDetailedDescription+"< /p >"+
"< a href=\"javascript:OpenWindow('"+contactLink+"45123','680','700')\" title='Contact Live' class='contact-link' >"+expertStatus+"< /a >"+
"< /div >"+
"< /div >"+
"< /div >";
//write the expert's profile to the div container
$("#expertgrid").append(expertString);
}
// clean up profile descriptions
// set statuses
// remove html from brief descriptions
// trim desctions
}
This sample code uses jQuery to fetch all the reviews for a specific expert It is meant as a guide on the API and is not production-ready.
//******************
// Kasamba expert reviews
// Uses API Version 1.1
// No support or warranty is offered or implied for this snippet.
//*******************
// Read a page's GET URL variables and return them as an associative array.
function getUrlVars()
{
var vars = [], hash;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for(var i = 0; i < hashes.length; i++)
{
hash = hashes[i].split('=');
vars.push(hash[0]);
vars[hash[0]] = hash[1];
}
return vars;
}
//Get and populate an experts reviews
function getExpertReviews(expertid){
//cursory validation
if(expertid == 0) {
profilestring = 'No Expert Found with that ID.';
$(profileDiv).html(profilestring);
return;
}
if(categoryid == 0){
profilestring = 'No Category Found with that ID.';
$(profileDiv).html(profilestring);
return;
}
var url = '//apis.kassrv.com/reviews.svc/1.1/'+expertid+'/jsonp?callback=api_expertProfiles';
$.ajax({
type:'GET',
url: url,
dataType: 'script'
});
}
//callback for expert profile info
function api_expertProfiles(data){
var profilestring = '';
if(data.id != undefined){
profilestring += data.id+'< br / >' +
data.name +'< br / >' +
data.reviewsCount +'< br / >' +
data.averageRating +'< br / >' +
'REVIEWS:'+'< br / >';
$.each(data.reviews, function(i, review){
profilestring += review.clientName+'< br / >'+
review.date+'< br / >'+
review.rating+'< br / >'+
review.comment+'< br / >';
})
$(profileDiv).html(profilestring);
}else{
profilestring = 'Expert not found in that category or there was a mysterious error.';
$(profileDiv).html(profilestring);
}
}
$().ready(function(){
//get expertID from url
URLvars = getUrlVars();
expertid = 0;
categoryid = 0;
profileDiv = '#expertProfile'
if(undefined != URLvars['expertid'])
{ expertid=URLvars['expertid']; }
if(undefined != URLvars['categoryid'])
{ categoryid=URLvars['categoryid']}
alert('fetching expertid : '+expertid+'in categoryid: '+categoryid);
//get expert info via ajax
getExpertReviews(expertid, categoryid);
})
This sample code uses jQuery to fetch 10 experts from a given category and display them on the page. It is meant as a guide on the API and is not production-ready.
//******************
// Kasamba expert full profile
// Uses API Version 1.1
// No support or warranty is offered or implied for this snippet.
//*******************
// Read a page's GET URL variables and return them as an associative array.
function getUrlVars()
{
var vars = [], hash;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for(var i = 0; i < hashes.length; i++)
{
hash = hashes[i].split('=');
vars.push(hash[0]);
vars[hash[0]] = hash[1];
}
return vars;
}
function getExpertProfileInfo(expertid){
//cursory validation
if(expertid == 0) {
profilestring = 'No Expert Found with that ID.';
$(profileDiv).html(profilestring);
return;
}
if(categoryid == 0){
profilestring = 'No Category Found with that ID.';
$(profileDiv).html(profilestring);
return;
}
var url = '//apis.kassrv.com/experts.svc/1.1/'+expertid+'/category/'+categoryid+'/jsonp?callback=api_expertProfiles';
$.ajax({
type:'GET',
url: url,
dataType: 'script'
});
}
//callback for expert profile info
function api_expertProfiles(data){
var profilestring = '';
if(data.id != undefined){
profilestring += data.id+'< br / >' +
data.name +'< br / >' +
data.title +'< br / >' +
data.description +'< br / >' +
data.status+'< br / >' +
data.fee+'< br / >' +
data.contactLive+'< br / >' +
data.detailedDescription+'< br / >' +
data.picture+'< br / >';
$(profileDiv).html(profilestring);
}else{
profilestring = 'Expert not found in that category or there was a mysterious error.';
$(profileDiv).html(profilestring);
}
}
$().ready(function(){
//get expertID from url
URLvars = getUrlVars();
expertid = 0;
categoryid = 0;
profileDiv = '#expertProfile'
if(undefined != URLvars['expertid'])
{ expertid=URLvars['expertid']; }
if(undefined != URLvars['categoryid'])
{ categoryid=URLvars['categoryid']}
alert('fetching expertid : '+expertid+'in categoryid: '+categoryid);
//get expert info via ajax
getExpertProfileInfo(expertid, categoryid);
});
This snippet of code fetches 15 experts from the "computers and programming" category using bannerid of 34. Please update the code as necessary when putting into production (e.g. bannerid).
#***************
# Kasamba profiles API Example
# Support API version 1.1 and earlier
# No support or warranty is offered or implied for this snippet.
#***************
require 'json'
require 'net/http'
def getExperts(category, format, args)
unless(format == 'json' || format == 'xml')
raise "Format invalid: must be 'json' or 'xml'"
end
unless(category.is_a?(Fixnum))
raise "Category invalid: must be a number"
end
category = category.to_s #we need it as a string for later
#Setup url and arguments substutitions
getProfilesURLTEMPLATE = "//apis.kassrv.com/experts.svc/APIVERSION/categories/CATEGORYID/FORMAT?"
apiVersionSwap = 'APIVERSION'
categoryIDSwap = 'CATEGORYID'
formatSwap = 'FORMAT'
params = {}
version = "1.1"
# build the request
paramArray = []
args.each { | key , value | paramArray << key+'='+value }
paramString = paramArray.join('&')
getProfileURL = getProfilesURLTEMPLATE.gsub(apiVersionSwap, version).gsub(categoryIDSwap, category).gsub(formatSwap, format)
getProfileURL = getProfileURL + paramString
puts "Requesting: #{getProfileURL} \n" #dump the request url to the screen
# make the request to fetch experts
url = URI.parse(getProfileURL)
response = Net::HTTP.get_response(url)
#check if we got a 200 success message or an error
case response
when Net::HTTPSuccess, Net::HTTPRedirection # OK
return response.body
else
raise response.error! # bubble up errors
end
end
begin
# 70 is the category ID for "computers and programming"
jsonData = getExperts(70, 'json', { "count"=>"15", "banner"=>"34" } ) # fetch 15 experts w/banner 34
rescue
print "There was a problem fetching the experts: ", $!
end
computerExperts = JSON.parse(jsonData)
experts = computerExperts['experts']
puts "Received #{experts.size} experts."
experts.each do |expert| # print out each expert ID and Name
puts expert['id'].to_s + " " + expert['name'].to_s
end