@@ -0,0 +1,123 @@
function get_avatar_from_service ( service , userid , size ) {
// this return the url that redirects to the according user image/avatar/profile picture
// implemented services: google profiles, facebook, gravatar, twitter, tumblr, default fallback
// for google use get_avatar_from_service('google', profile-name or user-id , size-in-px )
// for facebook use get_avatar_from_service('facebook', vanity url or user-id , size-in-px or size-as-word )
// for gravatar use get_avatar_from_service('gravatar', md5 hash email@adress, size-in-px )
// for twitter use get_avatar_from_service('twitter', username, size-in-px or size-as-word )
// for tumblr use get_avatar_from_service('tumblr', blog-url, size-in-px )
// everything else will go to the fallback
// google and gravatar scale the avatar to any site, others will guided to the next best version
var url = '' ;
switch ( service ) {
case "google" :
// see http://googlesystem.blogspot.com/2011/03/unedited-google-profile-pictures.html (couldn't find a better link)
// available sizes: all, google rescales for you
url = "http://profiles.google.com/s2/photos/profile/" + userid + "?sz=" + size ;
break ;
case "facebook" :
// see https://developers.facebook.com/docs/reference/api/
// available sizes: square (50x50), small (50xH) , normal (100xH), large (200xH)
var sizeparam = '' ;
if ( isNumber ( size ) ) {
if ( size >= 200 ) {
sizeparam = 'large'
} ;
if ( size >= 100 && size < 200 ) {
sizeparam = 'normal'
} ;
if ( size >= 50 && size < 100 ) {
sizeparam = 'small'
} ;
if ( size < 50 ) {
sizeparam = 'square'
} ;
} else {
sizeparam = size ;
}
url = "https://graph.facebook.com/" + userid + "/picture?type=" + sizeparam ;
break ;
case "gravatar" :
// see http://en.gravatar.com/site/implement/images/
// available sizes: all, gravatar rescales for you
url = "http://www.gravatar.com/avatar/" + userid + "?s=" + size
break ;
case "twitter" :
// see https://dev.twitter.com/docs/api/1/get/users/profile_image/%3Ascreen_name
// available sizes: bigger (73x73), normal (48x48), mini (24x24), no param will give you full size
var sizeparam = '' ;
if ( isNumber ( size ) ) {
if ( size >= 73 ) {
sizeparam = 'bigger'
} ;
if ( size >= 48 && size < 73 ) {
sizeparam = 'normal'
} ;
if ( size < 48 ) {
sizeparam = 'mini'
} ;
} else {
sizeparam = size ;
}
url = "http://api.twitter.com/1/users/profile_image?screen_name=" + userid + "&size=" + sizeparam ;
break ;
case "tumblr" :
// see http://www.tumblr.com/docs/en/api/v2#blog-avatar
//TODO do something smarter with the ranges
// available sizes: 16, 24, 30, 40, 48, 64, 96, 128, 512
var sizeparam = '' ;
if ( size >= 512 ) {
sizeparam = 512
} ;
if ( size >= 128 && size < 512 ) {
sizeparam = 128
} ;
if ( size >= 96 && size < 128 ) {
sizeparam = 96
} ;
if ( size >= 64 && size < 96 ) {
sizeparam = 64
} ;
if ( size >= 48 && size < 64 ) {
sizeparam = 48
} ;
if ( size >= 40 && size < 48 ) {
sizeparam = 40
} ;
if ( size >= 30 && size < 40 ) {
sizeparam = 30
} ;
if ( size >= 24 && size < 30 ) {
sizeparam = 24
} ;
if ( size < 24 ) {
sizeparam = 16
} ;
url = "http://api.tumblr.com/v2/blog/" + userid + "/avatar/" + sizeparam ;
break ;
default :
// http://www.iconfinder.com/icondetails/23741/128/avatar_devil_evil_green_monster_vampire_icon
// find your own
url = "http://i.imgur.com/RLiDK.png" ; // 48x48
}
return url ;
}
// helper methods
function isNumber ( n ) {
// see http://stackoverflow.com/questions/18082/validate-numbers-in-javascript-isnumeric
return ! isNaN ( parseFloat ( n ) ) && isFinite ( n ) ;
}