-
-
Save honktang/60e130040d2a9bddd6be5cfc7e88818e to your computer and use it in GitHub Desktop.
get avatar from google profiles, facebook, gravatar, twitter, tumblr
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment