diff --git a/README.md b/README.md index 60fdb7f..f722306 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Usage twitter: true }, url: 'http://sharrre.com' - }); + }); Example === diff --git a/index.html b/index.html index ebe6eeb..bd94876 100644 --- a/index.html +++ b/index.html @@ -1,11 +1,11 @@ - - Sharrre.com + + Sharrre.com - + '); - var loading = 0; - if(typeof window.IN === 'undefined' && loading == 0){ - loading = 1; - (function() { - var li = document.createElement('script');li.type = 'text/javascript';li.async = true; - li.src = '//platform.linkedin.com/in.js'; - var s = document.getElementsByTagName('script')[0];s.parentNode.insertBefore(li, s); - })(); - } - else{ - window.IN.init(); - } - }, - pinterest : function(self){ - var sett = self.options.buttons.pinterest; - $(self.element).find('.buttons').append('
Pin It
'); - - (function() { - var li = document.createElement('script');li.type = 'text/javascript';li.async = true; - li.src = '//assets.pinterest.com/js/pinit.js'; - var s = document.getElementsByTagName('script')[0];s.parentNode.insertBefore(li, s); - })(); - } - }, - /* Tracking for Google Analytics - ================================================== */ - tracking = { - googlePlus: function(){}, - facebook: function(){ - //console.log('facebook'); - fb = window.setInterval(function(){ - if (typeof FB !== 'undefined') { - FB.Event.subscribe('edge.create', function(targetUrl) { - _gaq.push(['_trackSocial', 'facebook', 'like', targetUrl]); - }); - FB.Event.subscribe('edge.remove', function(targetUrl) { - _gaq.push(['_trackSocial', 'facebook', 'unlike', targetUrl]); - }); - FB.Event.subscribe('message.send', function(targetUrl) { - _gaq.push(['_trackSocial', 'facebook', 'send', targetUrl]); - }); - //console.log('ok'); - clearInterval(fb); - } - },1000); - }, - twitter: function(){ - //console.log('twitter'); - tw = window.setInterval(function(){ - if (typeof twttr !== 'undefined') { - twttr.events.bind('tweet', function(event) { - if (event) { - _gaq.push(['_trackSocial', 'twitter', 'tweet']); - } - }); - //console.log('ok'); - clearInterval(tw); - } - },1000); - }, - digg: function(){ - //if somenone find a solution, mail me ! - /*$(this.element).find('.digg').on('click', function(){ - _gaq.push(['_trackSocial', 'digg', 'add']); - });*/ - }, - delicious: function(){}, - stumbleupon: function(){}, - linkedin: function(){ - function LinkedInShare() { - _gaq.push(['_trackSocial', 'linkedin', 'share']); - } - }, - pinterest: function(){ - //if somenone find a solution, mail me ! - } - }, - /* Popup for each social network - ================================================== */ - popup = { - googlePlus: function(opt){ - window.open("https://plus.google.com/share?hl="+opt.buttons.googlePlus.lang+"&url="+encodeURIComponent((opt.buttons.googlePlus.url !== '' ? opt.buttons.googlePlus.url : opt.url)), "", "toolbar=0, status=0, width=900, height=500"); - }, - facebook: function(opt){ - window.open("http://www.facebook.com/sharer/sharer.php?u="+encodeURIComponent((opt.buttons.facebook.url !== '' ? opt.buttons.facebook.url : opt.url))+"&t="+opt.text+"", "", "toolbar=0, status=0, width=900, height=500"); - }, - twitter: function(opt){ - window.open("https://twitter.com/intent/tweet?text="+encodeURIComponent(opt.text)+"&url="+encodeURIComponent((opt.buttons.twitter.url !== '' ? opt.buttons.twitter.url : opt.url))+(opt.buttons.twitter.via !== '' ? '&via='+opt.buttons.twitter.via : ''), "", "toolbar=0, status=0, width=650, height=360"); - }, - digg: function(opt){ - window.open("http://digg.com/tools/diggthis/submit?url="+encodeURIComponent((opt.buttons.digg.url !== '' ? opt.buttons.digg.url : opt.url))+"&title="+opt.text+"&related=true&style=true", "", "toolbar=0, status=0, width=650, height=360"); - }, - delicious: function(opt){ - window.open('http://www.delicious.com/save?v=5&noui&jump=close&url='+encodeURIComponent((opt.buttons.delicious.url !== '' ? opt.buttons.delicious.url : opt.url))+'&title='+opt.text, 'delicious', 'toolbar=no,width=550,height=550'); - }, - stumbleupon: function(opt){ - window.open('http://www.stumbleupon.com/badge/?url='+encodeURIComponent((opt.buttons.stumbleupon.url !== '' ? opt.buttons.stumbleupon.url : opt.url)), 'stumbleupon', 'toolbar=no,width=550,height=550'); - }, - linkedin: function(opt){ - window.open('https://www.linkedin.com/cws/share?url='+encodeURIComponent((opt.buttons.linkedin.url !== '' ? opt.buttons.linkedin.url : opt.url))+'&token=&isFramed=true', 'linkedin', 'toolbar=no,width=550,height=550'); - }, - pinterest: function(opt){ - window.open('http://pinterest.com/pin/create/button/?url='+encodeURIComponent((opt.buttons.pinterest.url !== '' ? opt.buttons.pinterest.url : opt.url))+'&media='+encodeURIComponent(opt.buttons.pinterest.media)+'&description='+opt.buttons.pinterest.description, 'pinterest', 'toolbar=no,width=700,height=300'); - } - }; - - /* Plugin constructor - ================================================== */ - function Plugin( element, options ) { - this.element = element; - - this.options = $.extend( true, {}, defaults, options); - this.options.share = options.share; //simple solution to allow order of buttons - - this._defaults = defaults; - this._name = pluginName; - - this.init(); - }; - - /* Initialization method - ================================================== */ - Plugin.prototype.init = function () { - var self = this; - if(this.options.urlCurl !== ''){ - urlJson.googlePlus = this.options.urlCurl + '?url={url}&type=googlePlus'; // PHP script for GooglePlus... - urlJson.stumbleupon = this.options.urlCurl + '?url={url}&type=stumbleupon'; // PHP script for Stumbleupon... - } - $(this.element).addClass(this.options.className); //add class - - //HTML5 Custom data - if(typeof $(this.element).data('title') !== 'undefined'){ - this.options.title = $(this.element).attr('data-title'); - } - if(typeof $(this.element).data('url') !== 'undefined'){ - this.options.url = $(this.element).data('url'); - } - if(typeof $(this.element).data('text') !== 'undefined'){ - this.options.text = $(this.element).data('text'); - } - - //how many social website have been selected - $.each(this.options.share, function(name, val) { - if(val === true){ - self.options.shareTotal ++; - } - }); - - if(self.options.enableCounter === true){ //if for some reason you don't need counter - //get count of social share that have been selected - $.each(this.options.share, function(name, val) { - if(val === true){ - //self.getSocialJson(name); - try { - self.getSocialJson(name); - } catch(e){ - } - } - }); - } - else if(self.options.template !== ''){ //for personalized button (with template) - this.options.render(this, this.options); - } - else{ // if you want to use official button like example 3 or 5 - this.loadButtons(); - } - - //add hover event - $(this.element).hover(function(){ - //load social button if enable and 1 time - if($(this).find('.buttons').length === 0 && self.options.enableHover === true){ - self.loadButtons(); - } - self.options.hover(self, self.options); - }, function(){ - self.options.hide(self, self.options); - }); - - //click event - $(this.element).click(function(){ - self.options.click(self, self.options); - return false; - }); - }; - - /* loadButtons methode - ================================================== */ - Plugin.prototype.loadButtons = function () { - var self = this; - $(this.element).append('
'); - $.each(self.options.share, function(name, val) { - if(val == true){ - loadButton[name](self); - if(self.options.enableTracking === true){ //add tracking - tracking[name](); - } - } - }); - }; - - /* getSocialJson methode - ================================================== */ - Plugin.prototype.getSocialJson = function (name) { - var self = this, - count = 0, - url = urlJson[name].replace('{url}', encodeURIComponent(this.options.url)); - if(this.options.buttons[name].urlCount === true && this.options.buttons[name].url !== ''){ - url = urlJson[name].replace('{url}', this.options.buttons[name].url); - } - //console.log('name : ' + name + ' - url : '+url); //debug - if(url != '' && self.options.urlCurl !== ''){ //urlCurl = '' if you don't want to used PHP script but used social button - $.getJSON(url, function(json){ - if(typeof json.count !== "undefined"){ //GooglePlus, Stumbleupon, Twitter, Pinterest and Digg - var temp = json.count + ''; - temp = temp.replace('\u00c2\u00a0', ''); //remove google plus special chars - count += parseInt(temp, 10); - } - //get the FB total count (shares, likes and more) - else if(json.data && json.data.length > 0 && typeof json.data[0].total_count !== "undefined"){ //Facebook total count - count += parseInt(json.data[0].total_count, 10); - } - else if(typeof json[0] !== "undefined"){ //Delicious - count += parseInt(json[0].total_posts, 10); - } - else if(typeof json[0] !== "undefined"){ //Stumbleupon - } - self.options.count[name] = count; - self.options.total += count; - self.renderer(); - self.rendererPerso(); - //console.log(json); //debug - }) - .error(function() { - self.options.count[name] = 0; - self.rendererPerso(); - }); - } - else{ - self.renderer(); - self.options.count[name] = 0; - self.rendererPerso(); - } - }; - - /* launch render methode - ================================================== */ - Plugin.prototype.rendererPerso = function () { - //check if this is the last social website to launch render - var shareCount = 0; - for (e in this.options.count) { shareCount++; } - if(shareCount === this.options.shareTotal){ - this.options.render(this, this.options); - } - }; - - /* render methode - ================================================== */ - Plugin.prototype.renderer = function () { - var total = this.options.total, - template = this.options.template; - if(this.options.shorterTotal === true){ //format number like 1.2k or 5M - total = this.shorterTotal(total); - } - - if(template !== ''){ //if there is a template - template = template.replace('{total}', total); - $(this.element).html(template); - } - else{ //template by defaults - $(this.element).html( - '
' + total + '' + - (this.options.title !== '' ? '' + this.options.title + '' : '') + - '
' - ); - } - }; - - /* format total numbers like 1.2k or 5M - ================================================== */ - Plugin.prototype.shorterTotal = function (num) { - if (num >= 1e6){ - num = (num / 1e6).toFixed(2) + "M" - } else if (num >= 1e3){ - num = (num / 1e3).toFixed(1) + "k" - } - return num; - }; - - /* Methode for open popup - ================================================== */ - Plugin.prototype.openPopup = function (site) { - popup[site](this.options); //open - if(this.options.enableTracking === true){ //tracking! - var tracking = { - googlePlus: {site: 'Google', action: '+1'}, - facebook: {site: 'facebook', action: 'like'}, - twitter: {site: 'twitter', action: 'tweet'}, - digg: {site: 'digg', action: 'add'}, - delicious: {site: 'delicious', action: 'add'}, - stumbleupon: {site: 'stumbleupon', action: 'add'}, - linkedin: {site: 'linkedin', action: 'share'}, - pinterest: {site: 'pinterest', action: 'pin'} - }; - _gaq.push(['_trackSocial', tracking[site].site, tracking[site].action]); - } - }; - - /* Methode for add +1 to a counter - ================================================== */ - Plugin.prototype.simulateClick = function () { - var html = $(this.element).html(); - $(this.element).html(html.replace(this.options.total, this.options.total+1)); - }; - - /* Methode for add +1 to a counter - ================================================== */ - Plugin.prototype.update = function (url, text) { - if(url !== ''){ - this.options.url = url; - } - if(text !== ''){ - this.options.text = text; - } - }; - - /* A really lightweight plugin wrapper around the constructor, preventing against multiple instantiations - ================================================== */ - $.fn[pluginName] = function ( options ) { - var args = arguments; - if (options === undefined || typeof options === 'object') { - return this.each(function () { - if (!$.data(this, 'plugin_' + pluginName)) { - $.data(this, 'plugin_' + pluginName, new Plugin( this, options )); - } - }); - } else if (typeof options === 'string' && options[0] !== '_' && options !== 'init') { - return this.each(function () { - var instance = $.data(this, 'plugin_' + pluginName); - if (instance instanceof Plugin && typeof instance[options] === 'function') { - instance[options].apply( instance, Array.prototype.slice.call( args, 1 ) ); - } - }); - } - }; -})(jQuery, window, document); +/*! + * Sharrre.com - Make your sharing widget! + * Version: beta 1.3.5 + * Author: Julien Hany + * License: MIT http://en.wikipedia.org/wiki/MIT_License or GPLv2 http://en.wikipedia.org/wiki/GNU_General_Public_License + */ + +;(function ( $, window, document, undefined ) { + + /* Defaults */ +var pluginName = 'sharrre', + defaults = { + className: 'sharrre', + share: { + googlePlus: false, + facebook: false, + twitter: false, + tumblr: false, + digg: false, + delicious: false, + stumbleupon: false, + linkedin: false, + pinterest: false + }, + shareTotal: 0, + template: '', + title: '', + url: document.location.href, + text: document.title, + urlCurl: 'sharrre.php', //PHP script for google plus... + count: {}, //counter by social network + total: 0, //total of sharing + shorterTotal: true, //show total by k or M when number is to big + enableHover: true, //disable if you want to personalize hover event with callback + enableCounter: true, //disable if you just want use buttons + enableTracking: false, //tracking with google analitycs + hover: function(){}, //personalize hover event with this callback function + hide: function(){}, //personalize hide event with this callback function + click: function(){}, //personalize click event with this callback function + render: function(){}, //personalize render event with this callback function + buttons: { //settings for buttons + googlePlus : { //http://www.google.com/webmasters/+1/button/ + url: '', //if you need to personnalize button url + urlCount: false, //if you want to use personnalize button url on global counter + size: 'medium', + lang: 'en-US', + annotation: '' + }, + facebook: { //http://developers.facebook.com/docs/reference/plugins/like/ + url: '', //if you need to personalize url button + urlCount: false, //if you want to use personnalize button url on global counter + action: 'like', + layout: 'button_count', + width: '', + send: 'false', + faces: 'false', + colorscheme: '', + share: '', + font: '', + lang: 'en_US' + }, + twitter: { //http://twitter.com/about/resources/tweetbutton + url: '', //if you need to personalize url button + urlCount: false, //if you want to use personnalize button url on global counter + count: 'horizontal', + hashtags: '', + via: '', + related: '', + lang: 'en' + }, + tumblr: { + url: '', + urlCount: false, + description: '', + name: '' + }, + digg: { //http://about.digg.com/downloads/button/smart + url: '', //if you need to personalize url button + urlCount: false, //if you want to use personnalize button url on global counter + type: 'DiggCompact' + }, + delicious: { + url: '', //if you need to personalize url button + urlCount: false, //if you want to use personnalize button url on global counter + size: 'medium' //medium or tall + }, + stumbleupon: { //http://www.stumbleupon.com/badges/ + url: '', //if you need to personalize url button + urlCount: false, //if you want to use personnalize button url on global counter + layout: '1' + }, + linkedin: { //http://developer.linkedin.com/plugins/share-button + url: '', //if you need to personalize url button + urlCount: false, //if you want to use personnalize button url on global counter + counter: '' + }, + pinterest: { //http://pinterest.com/about/goodies/ + url: '', //if you need to personalize url button + media: '', + description: '', + layout: 'horizontal' + }, + email: { // Send by email + url: '' + } + } + }, + /* Json URL to get count number + ================================================== */ + urlJson = { + googlePlus: "", + + //new FQL method by Sire + facebook: "//graph.facebook.com/fql?q=SELECT%20url,%20normalized_url,%20share_count,%20like_count,%20comment_count,%20total_count,commentsbox_count,%20comments_fbid,%20click_count%20FROM%20link_stat%20WHERE%20url=%27{url}%27&callback=?", + //old method facebook: "//graph.facebook.com/?id={url}&callback=?", + //facebook : "//api.ak.facebook.com/restserver.php?v=1.0&method=links.getStats&urls={url}&format=json" + + twitter: "//cdn.api.twitter.com/1/urls/count.json?url={url}&callback=?", + digg: "//services.digg.com/2.0/story.getInfo?links={url}&type=javascript&callback=?", + delicious: '//feeds.delicious.com/v2/json/urlinfo/data?url={url}&callback=?', + tumblr: "", + //stumbleupon: "//www.stumbleupon.com/services/1.01/badge.getinfo?url={url}&format=jsonp&callback=?", + stumbleupon: "", + linkedin: "//www.linkedin.com/countserv/count/share?format=jsonp&url={url}&callback=?", + pinterest: "//api.pinterest.com/v1/urls/count.json?url={url}&callback=?" + }, + /* Load share buttons asynchronously + ================================================== */ + loadButton = { + googlePlus : function(self){ + var sett = self.options.buttons.googlePlus; + //$(self.element).find('.buttons').append('
'); + $(self.element).find('.buttons').append('
'); + window.___gcfg = { + lang: self.options.buttons.googlePlus.lang + }; + var loading = 0; + if((typeof gapi === 'undefined' || typeof gapi.plusone === 'undefined') && loading == 0){ + loading = 1; + (function() { + var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; + po.src = '//apis.google.com/js/plusone.js'; + var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); + })(); + } + else{ + gapi.plusone.go(); + } + }, + facebook : function(self){ + var sett = self.options.buttons.facebook; + $(self.element).find('.buttons').append('
'); + var loading = 0; + if(typeof FB === 'undefined' && loading == 0){ + loading = 1; + (function(d, s, id) { + var js, fjs = d.getElementsByTagName(s)[0]; + if (d.getElementById(id)) {return;} + js = d.createElement(s); js.id = id; + js.src = '//connect.facebook.net/'+sett.lang+'/all.js#xfbml=1'; + if (sett.appId) { + js.src += '&appId='+sett.appId; + } + fjs.parentNode.insertBefore(js, fjs); + }(document, 'script', 'facebook-jssdk')); + } + else{ + FB.XFBML.parse(); + } + }, + twitter : function(self){ + var sett = self.options.buttons.twitter; + $(self.element).find('.buttons').append('
Tweet
'); + var loading = 0; + if(typeof twttr === 'undefined' && loading == 0){ + loading = 1; + (function() { + var twitterScriptTag = document.createElement('script'); + twitterScriptTag.type = 'text/javascript'; + twitterScriptTag.async = true; + twitterScriptTag.src = '//platform.twitter.com/widgets.js'; + var s = document.getElementsByTagName('script')[0]; + s.parentNode.insertBefore(twitterScriptTag, s); + })(); + } + else{ + $.ajax({ url: '//platform.twitter.com/widgets.js', dataType: 'script', cache:true}); //http://stackoverflow.com/q/6536108 + } + }, + tumblr: function(self) { + var sett = self.options.buttons.tumblr; + $(self.element).find('.buttons').append('
Share on Tumblr
') + var loading = 0; + if(typeof Tumblr === 'undefined' && loading == 0) { + loading = 1; + (function() { + var tumblrScriptTag = document.createElement('script'); + var s = document.getElementsByTagName('script')[0]; + tumblrScriptTag.type = 'text/javascript'; + tumblrScriptTag.async = true; + tumblrScriptTag.src = '//platform.tumblr.com/v1/share.js'; + s.parentNode.insertBefore(tumblrScriptTag, s); + })(); + } + else { + Tumblr.activate_share_on_tumblr_buttons(); + } + }, + digg : function(self){ + var sett = self.options.buttons.digg; + $(self.element).find('.buttons').append('
'); + var loading = 0; + if(typeof __DBW === 'undefined' && loading == 0){ + loading = 1; + (function() { + var s = document.createElement('SCRIPT'), s1 = document.getElementsByTagName('SCRIPT')[0]; + s.type = 'text/javascript'; + s.async = true; + s.src = '//widgets.digg.com/buttons.js'; + s1.parentNode.insertBefore(s, s1); + })(); + } + }, + delicious : function(self){ + if(self.options.buttons.delicious.size == 'tall'){//tall + var css = 'width:50px;', + cssCount = 'height:35px;width:50px;font-size:15px;line-height:35px;', + cssShare = 'height:18px;line-height:18px;margin-top:3px;'; + } + else{//medium + var css = 'width:93px;', + cssCount = 'float:right;padding:0 3px;height:20px;width:26px;line-height:20px;', + cssShare = 'float:left;height:20px;line-height:20px;'; + } + var count = self.shorterTotal(self.options.count.delicious); + if(typeof count === "undefined"){ + count = 0; + } + $(self.element).find('.buttons').append( + '
'+ + '
'+count+'
'+ + '
'+ + 'Delicious Add
'); + + $(self.element).find('.delicious').on('click', function(){ + self.openPopup('delicious'); + }); + }, + stumbleupon : function(self){ + var sett = self.options.buttons.stumbleupon; + $(self.element).find('.buttons').append('
'); + var loading = 0; + if(typeof STMBLPN === 'undefined' && loading == 0){ + loading = 1; + (function() { + var li = document.createElement('script');li.type = 'text/javascript';li.async = true; + li.src = '//platform.stumbleupon.com/1/widgets.js'; + var s = document.getElementsByTagName('script')[0];s.parentNode.insertBefore(li, s); + })(); + s = window.setTimeout(function(){ + if(typeof STMBLPN !== 'undefined'){ + STMBLPN.processWidgets(); + clearInterval(s); + } + },500); + } + else{ + STMBLPN.processWidgets(); + } + }, + linkedin : function(self){ + var sett = self.options.buttons.linkedin; + $(self.element).find('.buttons').append('
'); + var loading = 0; + if(typeof window.IN === 'undefined' && loading == 0){ + loading = 1; + (function() { + var li = document.createElement('script');li.type = 'text/javascript';li.async = true; + li.src = '//platform.linkedin.com/in.js'; + var s = document.getElementsByTagName('script')[0];s.parentNode.insertBefore(li, s); + })(); + } + else{ + window.IN.init(); + } + }, + pinterest : function(self){ + var sett = self.options.buttons.pinterest; + $(self.element).find('.buttons').append('
Pin It
'); + + (function() { + var li = document.createElement('script');li.type = 'text/javascript';li.async = true; + li.src = '//assets.pinterest.com/js/pinit.js'; + var s = document.getElementsByTagName('script')[0];s.parentNode.insertBefore(li, s); + })(); + } + }, + /* Tracking for Google Analytics + ================================================== */ + tracking = { + googlePlus: function(){}, + facebook: function(){ + //console.log('facebook'); + fb = window.setInterval(function(){ + if (typeof FB !== 'undefined') { + FB.Event.subscribe('edge.create', function(targetUrl) { + //_gaq.push(['_trackSocial', 'facebook', 'like', targetUrl]); + ga('send', 'social', 'facebook', 'like', targetUrl); + }); + FB.Event.subscribe('edge.remove', function(targetUrl) { + //_gaq.push(['_trackSocial', 'facebook', 'unlike', targetUrl]); + ga('send', 'social', 'facebook', 'unlike', targetUrl); + }); + FB.Event.subscribe('message.send', function(targetUrl) { + //_gaq.push(['_trackSocial', 'facebook', 'send', targetUrl]); + ga('send', 'social', 'facebook', 'send', targetUrl); + }); + clearInterval(fb); + } + },1000); + }, + twitter: function(){ + //console.log('twitter'); + tw = window.setInterval(function(){ + if (typeof twttr !== 'undefined') { + twttr.events.bind('tweet', function(event) { + if (event) { + //_gaq.push(['_trackSocial', 'twitter', 'tweet']); + ga('send', 'social', 'twitter', 'tweet'); + } + }); + clearInterval(tw); + } + },1000); + }, + tumblr: function(){}, + digg: function(){ + //if somenone find a solution, mail me ! + /*$(this.element).find('.digg').on('click', function(){ + _gaq.push(['_trackSocial', 'digg', 'add']); + });*/ + }, + delicious: function(){}, + stumbleupon: function(){}, + linkedin: function(){ + function LinkedInShare() { + //_gaq.push(['_trackSocial', 'linkedin', 'share']); + ga('send', 'social', 'linkedin', 'share'); + } + }, + pinterest: function(){ + //if somenone find a solution, mail me ! + } + }, + /* Popup for each social network + ================================================== */ + popup = { + googlePlus: function(opt){ + window.open("https://plus.google.com/share?hl="+opt.buttons.googlePlus.lang+"&url="+encodeURIComponent((opt.buttons.googlePlus.url !== '' ? opt.buttons.googlePlus.url : opt.url)), "", "toolbar=0, status=0, width=900, height=500"); + }, + facebook: function(opt){ + window.open("http://www.facebook.com/sharer/sharer.php?u="+encodeURIComponent((opt.buttons.facebook.url !== '' ? opt.buttons.facebook.url : opt.url))+"&t="+opt.text+"", "", "toolbar=0, status=0, width=900, height=500"); + }, + twitter: function(opt){ + window.open("https://twitter.com/intent/tweet?text="+encodeURIComponent(opt.text)+"&url="+encodeURIComponent((opt.buttons.twitter.url !== '' ? opt.buttons.twitter.url : opt.url))+(opt.buttons.twitter.via !== '' ? '&via='+opt.buttons.twitter.via : ''), "", "toolbar=0, status=0, width=650, height=360"); + }, + tumblr: function(opt){ + window.open("http://www.tumblr.com/share/link?url="+encodeURIComponent(opt.buttons.tumblr.url) + "&name=" + encodeURIComponent(opt.buttons.tumblr.name) + "&description=" + encodeURIComponent(opt.buttons.tumblr.description), "", "toolbar=0, status=0, width=900, height=500"); + }, + digg: function(opt){ + window.open("http://digg.com/tools/diggthis/submit?url="+encodeURIComponent((opt.buttons.digg.url !== '' ? opt.buttons.digg.url : opt.url))+"&title="+opt.text+"&related=true&style=true", "", "toolbar=0, status=0, width=650, height=360"); + }, + delicious: function(opt){ + window.open('http://www.delicious.com/save?v=5&noui&jump=close&url='+encodeURIComponent((opt.buttons.delicious.url !== '' ? opt.buttons.delicious.url : opt.url))+'&title='+opt.text, 'delicious', 'toolbar=no,width=550,height=550'); + }, + stumbleupon: function(opt){ + window.open('http://www.stumbleupon.com/badge/?url='+encodeURIComponent((opt.buttons.stumbleupon.url !== '' ? opt.buttons.stumbleupon.url : opt.url)), 'stumbleupon', 'toolbar=no,width=550,height=550'); + }, + linkedin: function(opt){ + window.open('https://www.linkedin.com/cws/share?url='+encodeURIComponent((opt.buttons.linkedin.url !== '' ? opt.buttons.linkedin.url : opt.url))+'&token=&isFramed=true', 'linkedin', 'toolbar=no,width=550,height=550'); + }, + pinterest: function(opt){ + window.open('http://pinterest.com/pin/create/button/?url='+encodeURIComponent((opt.buttons.pinterest.url !== '' ? opt.buttons.pinterest.url : opt.url))+'&media='+encodeURIComponent(opt.buttons.pinterest.media)+'&description='+opt.buttons.pinterest.description, 'pinterest', 'toolbar=no,width=700,height=300'); + }, + + email: function (opt) { + window.open('mailto:?body=' + (opt.buttons.email.url !== '' ? opt.buttons.email.url : opt.url) + '&subject=' + opt.text, 'email', 'toolbar=no,width=550,height=550'); + } + }; + + /* Plugin constructor + ================================================== */ + function Plugin( element, options ) { + this.element = element; + + this.options = $.extend( true, {}, defaults, options); + this.options.share = options.share; //simple solution to allow order of buttons + + this._defaults = defaults; + this._name = pluginName; + + this.init(); + }; + + /* Initialization method + ================================================== */ + Plugin.prototype.init = function () { + var self = this; + if(this.options.urlCurl !== ''){ + urlJson.googlePlus = this.options.urlCurl + '?url={url}&type=googlePlus'; // PHP script for GooglePlus... + urlJson.stumbleupon = this.options.urlCurl + '?url={url}&type=stumbleupon'; // PHP script for Stumbleupon... + } + $(this.element).addClass(this.options.className); //add class + + //HTML5 Custom data + if(typeof $(this.element).data('title') !== 'undefined'){ + this.options.title = $(this.element).attr('data-title'); + } + if(typeof $(this.element).data('url') !== 'undefined'){ + this.options.url = $(this.element).data('url'); + } + if(typeof $(this.element).data('text') !== 'undefined'){ + this.options.text = $(this.element).data('text'); + } + + //how many social website have been selected + $.each(this.options.share, function(name, val) { + if(val === true){ + self.options.shareTotal ++; + } + }); + + if(self.options.enableCounter === true){ //if for some reason you don't need counter + //get count of social share that have been selected + $.each(this.options.share, function(name, val) { + if(val === true){ + //self.getSocialJson(name); + try { + self.getSocialJson(name); + } catch(e){ + } + } + }); + } + else if(self.options.template !== ''){ //for personalized button (with template) + this.options.render(this, this.options); + } + else{ // if you want to use official button like example 3 or 5 + this.loadButtons(); + } + + //add hover event + $(this.element).hover(function(){ + //load social button if enable and 1 time + if($(this).find('.buttons').length === 0 && self.options.enableHover === true){ + self.loadButtons(); + } + self.options.hover(self, self.options); + }, function(){ + self.options.hide(self, self.options); + }); + + + //click event + $(this.element).click(function(){ + self.options.click(self, self.options); + return false; + }); + }; + + + /* loadButtons methode + ================================================== */ + Plugin.prototype.loadButtons = function () { + var self = this; + $(this.element).append('
'); + $.each(self.options.share, function(name, val) { + if(val == true){ + loadButton[name](self); + if(self.options.enableTracking === true){ //add tracking + tracking[name](); + } + } + }); + }; + + /* getSocialJson method + ================================================== */ + Plugin.prototype.getSocialJson = function (name) { + var self = this, + count = 0, + url = 'http://' + self.cleanURL(self.options.url,name); + + if (self.options.urlCurl !== '') { //urlCurl = '' if you don't want to used PHP script but used social button + + $.getJSON(self.buildSocialURL(url, name), function(json){ + if(typeof json.count !== "undefined"){ //GooglePlus, Stumbleupon, Twitter, Pinterest and Digg + var temp = json.count + ''; + temp = temp.replace('\u00c2\u00a0', ''); //remove google plus special chars + count += parseInt(temp, 10); + } + + //get the FB total count (shares, likes and more) + else if(json.data && json.data.length > 0 && typeof json.data[0].total_count !== "undefined"){ //Facebook total count + count += parseInt(json.data[0].total_count, 10); + } + else if(typeof json[0] !== "undefined"){ //Delicious + count += parseInt(json[0].total_posts, 10); + } + else if(typeof json[0] !== "undefined"){ //Stumbleupon + } + + self.options.count[name] += count; + self.options.total += count; + self.renderer(); + self.rendererPerso(); + }) + .error(function() { + self.options.count[name] = 0; + self.rendererPerso(); + }); + } + else{ + self.renderer(); + self.options.count[name] = 0; + self.rendererPerso(); + } + }; + + /* clean url + ================================================== */ + Plugin.prototype.cleanURL = function (url, name) { + // Strip paramaters + url = url.replace(window.location.search, ""); + // Strip protocol + url = url.replace(/.*?:\/\//g, ""); + return url; + }; + + /* convert url to social link + ================================================== */ + Plugin.prototype.buildSocialURL = function(url, name) { + newurl = (this.options.buttons[name].urlCount === true && this.options.buttons[name].url !== '') ? this.options.buttons[name].url : encodeURIComponent(url); + return urlJson[name].replace('{url}', newurl); + }; + + /* launch render methode + ================================================== */ + Plugin.prototype.rendererPerso = function () { + //check if this is the last social website to launch render + var shareCount = 0; + for (e in this.options.count) { shareCount++; } + if(shareCount === this.options.shareTotal){ + this.options.render(this, this.options); + } + }; + + /* render methode + ================================================== */ + Plugin.prototype.renderer = function () { + var total = this.options.total, + template = this.options.template; + if(this.options.shorterTotal === true){ //format number like 1.2k or 5M + total = this.shorterTotal(total); + } + + if(template !== ''){ //if there is a template + template = template.replace('{total}', total); + $(this.element).html(template); + } + else{ //template by defaults + $(this.element).html( + '
' + total + '' + + (this.options.title !== '' ? '' + this.options.title + '' : '') + + '
' + ); + } + }; + + /* format total numbers like 1.2k or 5M + ================================================== */ + Plugin.prototype.shorterTotal = function (num) { + if (num >= 1e6){ + num = (num / 1e6).toFixed(2) + "M" + } else if (num >= 1e3){ + num = (num / 1e3).toFixed(1) + "k" + } + return num; + }; + + /* Methode for open popup + ================================================== */ + Plugin.prototype.openPopup = function (site) { + popup[site](this.options); //open + if(this.options.enableTracking === true){ //tracking! + var tracking = { + googlePlus: {site: 'Google', action: '+1'}, + facebook: {site: 'facebook', action: 'share'}, + twitter: {site: 'twitter', action: 'tweet'}, + digg: {site: 'digg', action: 'add'}, + delicious: {site: 'delicious', action: 'add'}, + stumbleupon: {site: 'stumbleupon', action: 'add'}, + linkedin: {site: 'linkedin', action: 'share'}, + pinterest: {site: 'pinterest', action: 'pin'}, + tumblr: {site: 'tumblr', action: 'share'}, + mail: {site: 'mail', action: 'share'} + }; + //_gaq.push(['_trackSocial', tracking[site].site, tracking[site].action]); + //ga('send', 'social', tracking[site].site, tracking[site].action); + ga('send', 'social', { + 'socialNetwork': tracking[site].site, + 'socialAction': tracking[site].action, + 'socialTarget': this.options.url + }); + } + }; + + /* Methode for add +1 to a counter + ================================================== */ + Plugin.prototype.simulateClick = function (className) { + var html = $(this.element).html(); + if (className === undefined) { + $(this.element).html(html.replace(this.options.total, this.options.total+1)); + } else { + $('.'+className).html(html.replace(this.options.total, this.options.total+1)); + } + }; + + /* Methode for add +1 to a counter + ================================================== */ + Plugin.prototype.update = function (url, text) { + if(url !== ''){ + this.options.url = url; + } + if(text !== ''){ + this.options.text = text; + } + }; + + /* A really lightweight plugin wrapper around the constructor, preventing against multiple instantiations + ================================================== */ + $.fn[pluginName] = function ( options ) { + var args = arguments; + if (options === undefined || typeof options === 'object') { + return this.each(function () { + if (!$.data(this, 'plugin_' + pluginName)) { + $.data(this, 'plugin_' + pluginName, new Plugin( this, options )); + } + }); + } else if (typeof options === 'string' && options[0] !== '_' && options !== 'init') { + return this.each(function () { + var instance = $.data(this, 'plugin_' + pluginName); + if (instance instanceof Plugin && typeof instance[options] === 'function') { + instance[options].apply( instance, Array.prototype.slice.call( args, 1 ) ); + } + }); + } + }; +})(jQuery, window, document); diff --git a/jquery.sharrre.min.js b/jquery.sharrre.min.js index 377659a..65740ae 100644 --- a/jquery.sharrre.min.js +++ b/jquery.sharrre.min.js @@ -4,4 +4,4 @@ * Author: Julien Hany * License: MIT http://en.wikipedia.org/wiki/MIT_License or GPLv2 http://en.wikipedia.org/wiki/GNU_General_Public_License */ -;(function(g,i,j,b){var h="sharrre",f={className:"sharrre",share:{googlePlus:false,facebook:false,twitter:false,digg:false,delicious:false,stumbleupon:false,linkedin:false,pinterest:false},shareTotal:0,template:"",title:"",url:j.location.href,text:j.title,urlCurl:"sharrre.php",count:{},total:0,shorterTotal:true,enableHover:true,enableCounter:true,enableTracking:false,hover:function(){},hide:function(){},click:function(){},render:function(){},buttons:{googlePlus:{url:"",urlCount:false,size:"medium",lang:"en-US",annotation:""},facebook:{url:"",urlCount:false,action:"like",layout:"button_count",width:"",send:"false",faces:"false",colorscheme:"",font:"",lang:"en_US"},twitter:{url:"",urlCount:false,count:"horizontal",hashtags:"",via:"",related:"",lang:"en"},digg:{url:"",urlCount:false,type:"DiggCompact"},delicious:{url:"",urlCount:false,size:"medium"},stumbleupon:{url:"",urlCount:false,layout:"1"},linkedin:{url:"",urlCount:false,counter:""},pinterest:{url:"",media:"",description:"",layout:"horizontal"}}},c={googlePlus:"",facebook:"https://graph.facebook.com/fql?q=SELECT%20url,%20normalized_url,%20share_count,%20like_count,%20comment_count,%20total_count,commentsbox_count,%20comments_fbid,%20click_count%20FROM%20link_stat%20WHERE%20url=%27{url}%27&callback=?",twitter:"http://cdn.api.twitter.com/1/urls/count.json?url={url}&callback=?",digg:"http://services.digg.com/2.0/story.getInfo?links={url}&type=javascript&callback=?",delicious:"http://feeds.delicious.com/v2/json/urlinfo/data?url={url}&callback=?",stumbleupon:"",linkedin:"http://www.linkedin.com/countserv/count/share?format=jsonp&url={url}&callback=?",pinterest:"http://api.pinterest.com/v1/urls/count.json?url={url}&callback=?"},l={googlePlus:function(m){var n=m.options.buttons.googlePlus;g(m.element).find(".buttons").append('
');i.___gcfg={lang:m.options.buttons.googlePlus.lang};var o=0;if(typeof gapi==="undefined"&&o==0){o=1;(function(){var p=j.createElement("script");p.type="text/javascript";p.async=true;p.src="//apis.google.com/js/plusone.js";var q=j.getElementsByTagName("script")[0];q.parentNode.insertBefore(p,q)})()}else{gapi.plusone.go()}},facebook:function(m){var n=m.options.buttons.facebook;g(m.element).find(".buttons").append('
');var o=0;if(typeof FB==="undefined"&&o==0){o=1;(function(t,p,u){var r,q=t.getElementsByTagName(p)[0];if(t.getElementById(u)){return}r=t.createElement(p);r.id=u;r.src="//connect.facebook.net/"+n.lang+"/all.js#xfbml=1";q.parentNode.insertBefore(r,q)}(j,"script","facebook-jssdk"))}else{FB.XFBML.parse()}},twitter:function(m){var n=m.options.buttons.twitter;g(m.element).find(".buttons").append('
Tweet
');var o=0;if(typeof twttr==="undefined"&&o==0){o=1;(function(){var q=j.createElement("script");q.type="text/javascript";q.async=true;q.src="//platform.twitter.com/widgets.js";var p=j.getElementsByTagName("script")[0];p.parentNode.insertBefore(q,p)})()}else{g.ajax({url:"//platform.twitter.com/widgets.js",dataType:"script",cache:true})}},digg:function(m){var n=m.options.buttons.digg;g(m.element).find(".buttons").append('
');var o=0;if(typeof __DBW==="undefined"&&o==0){o=1;(function(){var q=j.createElement("SCRIPT"),p=j.getElementsByTagName("SCRIPT")[0];q.type="text/javascript";q.async=true;q.src="//widgets.digg.com/buttons.js";p.parentNode.insertBefore(q,p)})()}},delicious:function(o){if(o.options.buttons.delicious.size=="tall"){var p="width:50px;",n="height:35px;width:50px;font-size:15px;line-height:35px;",m="height:18px;line-height:18px;margin-top:3px;"}else{var p="width:93px;",n="float:right;padding:0 3px;height:20px;width:26px;line-height:20px;",m="float:left;height:20px;line-height:20px;"}var q=o.shorterTotal(o.options.count.delicious);if(typeof q==="undefined"){q=0}g(o.element).find(".buttons").append('
'+q+'
Delicious Add
');g(o.element).find(".delicious").on("click",function(){o.openPopup("delicious")})},stumbleupon:function(m){var n=m.options.buttons.stumbleupon;g(m.element).find(".buttons").append('
');var o=0;if(typeof STMBLPN==="undefined"&&o==0){o=1;(function(){var p=j.createElement("script");p.type="text/javascript";p.async=true;p.src="//platform.stumbleupon.com/1/widgets.js";var q=j.getElementsByTagName("script")[0];q.parentNode.insertBefore(p,q)})();s=i.setTimeout(function(){if(typeof STMBLPN!=="undefined"){STMBLPN.processWidgets();clearInterval(s)}},500)}else{STMBLPN.processWidgets()}},linkedin:function(m){var n=m.options.buttons.linkedin;g(m.element).find(".buttons").append('
');var m=0;if(typeof g.IN==="undefined"&&m==0){m=1;(function(){var p=d.createElement("script");p.type="text/javascript";p.async=true;p.src="//platform.linkedin.com/in.js";var q=d.getElementsByTagName("script")[0];q.parentNode.insertBefore(p,q)})()}else{g.IN.init()}},pinterest:function(m){var n=m.options.buttons.pinterest;f(m.element).find(".buttons").append('
Pin It
');(function(){var o=d.createElement("script");o.type="text/javascript";o.async=true;o.src="//assets.pinterest.com/js/pinit.js";var p=d.getElementsByTagName("script")[0];p.parentNode.insertBefore(o,p)})()}},j={googlePlus:function(){},facebook:function(){fb=g.setInterval(function(){if(typeof FB!=="undefined"){FB.Event.subscribe("edge.create",function(m){ga("send","social","facebook","like",m)});FB.Event.subscribe("edge.remove",function(m){ga("send","social","facebook","unlike",m)});FB.Event.subscribe("message.send",function(m){ga("send","social","facebook","like",m)});clearInterval(fb)}},1000)},twitter:function(){tw=g.setInterval(function(){if(typeof twttr!=="undefined"){twttr.events.bind("tweet",function(m){if(m){ga("send","social","twitter","tweet")}});clearInterval(tw)}},1000)},digg:function(){},delicious:function(){},stumbleupon:function(){},linkedin:function(){function m(){ga("send","social","linkedin","share")}},pinterest:function(){}},b={googlePlus:function(m){g.open("https://plus.google.com/share?hl="+m.buttons.googlePlus.lang+"&url="+encodeURIComponent((m.buttons.googlePlus.url!==""?m.buttons.googlePlus.url:m.url)),"","toolbar=0, status=0, width=900, height=500")},facebook:function(m){g.open("http://www.facebook.com/sharer/sharer.php?u="+encodeURIComponent((m.buttons.facebook.url!==""?m.buttons.facebook.url:m.url))+"&t="+m.text+"","","toolbar=0, status=0, width=900, height=500")},twitter:function(m){g.open("https://twitter.com/intent/tweet?text="+encodeURIComponent(m.text)+"&url="+encodeURIComponent((m.buttons.twitter.url!==""?m.buttons.twitter.url:m.url))+(m.buttons.twitter.via!==""?"&via="+m.buttons.twitter.via:"")+(m.buttons.twitter.hashtags!==""?"&hashtags="+encodeURIComponent(m.buttons.twitter.hashtags):""),"","toolbar=0, status=0, width=650, height=360")},digg:function(m){g.open("http://digg.com/tools/diggthis/submit?url="+encodeURIComponent((m.buttons.digg.url!==""?m.buttons.digg.url:m.url))+"&title="+m.text+"&related=true&style=true","","toolbar=0, status=0, width=650, height=360")},delicious:function(m){g.open("http://www.delicious.com/save?v=5&noui&jump=close&url="+encodeURIComponent((m.buttons.delicious.url!==""?m.buttons.delicious.url:m.url))+"&title="+m.text,"delicious","toolbar=no,width=550,height=550")},stumbleupon:function(m){g.open("http://www.stumbleupon.com/badge/?url="+encodeURIComponent((m.buttons.delicious.url!==""?m.buttons.delicious.url:m.url)),"stumbleupon","toolbar=no,width=550,height=550")},linkedin:function(m){g.open("https://www.linkedin.com/cws/share?url="+encodeURIComponent((m.buttons.delicious.url!==""?m.buttons.delicious.url:m.url))+"&token=&isFramed=true","linkedin","toolbar=no,width=550,height=550")},pinterest:function(m){g.open("http://pinterest.com/pin/create/button/?url="+encodeURIComponent((m.buttons.pinterest.url!==""?m.buttons.pinterest.url:m.url))+"&media="+encodeURIComponent(m.buttons.pinterest.media)+"&description="+m.buttons.pinterest.description,"pinterest","toolbar=no,width=700,height=300")}};function i(m,n){this.element=m;this.options=f.extend(true,{},l,n);this.options.share=n.share;this._defaults=l;this._name=c;this.init()}i.prototype.init=function(){var m=this;if(this.options.urlCurl!==""){h.googlePlus=this.options.urlCurl+"?url={url}&type=googlePlus";h.stumbleupon=this.options.urlCurl+"?url={url}&type=stumbleupon"}f(this.element).addClass(this.options.className);if(typeof f(this.element).data("title")!=="undefined"){this.options.title=f(this.element).attr("data-title")}if(typeof f(this.element).data("url")!=="undefined"){this.options.url=f(this.element).data("url")}if(typeof f(this.element).data("text")!=="undefined"){this.options.text=f(this.element).data("text")}f.each(this.options.share,function(o,n){if(n===true){m.options.shareTotal++}});if(m.options.enableCounter===true){f.each(this.options.share,function(p,o){if(o===true){try{m.getSocialJson(p)}catch(n){}}})}else{if(m.options.template!==""){this.options.render(this,this.options)}else{this.loadButtons()}}f(this.element).hover(function(){if(f(this).find(".buttons").length===0&&m.options.enableHover===true){m.loadButtons()}m.options.hover(m,m.options)},function(){m.options.hide(m,m.options)});f(this.element).click(function(){m.options.click(m,m.options);return false})};i.prototype.loadButtons=function(){var m=this;f(this.element).append('
');f.each(m.options.share,function(o,n){if(n==true){k[o](m);if(m.options.enableTracking===true){j[o]()}}})};i.prototype.getSocialJson=function(p){var o=this,n=0,m=h[p].replace("{url}",encodeURIComponent(this.options.url));if(this.options.buttons[p].urlCount===true&&this.options.buttons[p].url!==""){m=h[p].replace("{url}",this.options.buttons[p].url)}if(m!=""&&o.options.urlCurl!==""){f.getJSON(m,function(q){if(typeof q.count!=="undefined"){var r=q.count+"";r=r.replace("\u00c2\u00a0","");n+=parseInt(r,10)}else{if(q.data&&q.data.length>0&&typeof q.data[0].total_count!=="undefined"){n+=parseInt(q.data[0].total_count,10)}else{if(typeof q[0]!=="undefined"){n+=parseInt(q[0].total_posts,10)}else{if(typeof q[0]!=="undefined"){}}}}o.options.count[p]=n;o.options.total+=n;o.renderer();o.rendererPerso()}).error(function(){o.options.count[p]=0;o.rendererPerso()})}else{o.renderer();o.options.count[p]=0;o.rendererPerso()}};i.prototype.rendererPerso=function(){var m=0;for(e in this.options.count){m++}if(m===this.options.shareTotal){this.options.render(this,this.options)}};i.prototype.renderer=function(){var n=this.options.total,m=this.options.template;if(this.options.shorterTotal===true){n=this.shorterTotal(n)}if(m!==""){m=m.replace("{total}",n);f(this.element).html(m)}else{f(this.element).html('
'+n+""+(this.options.title!==""?''+this.options.title+"":"")+"
")}};i.prototype.shorterTotal=function(m){if(m>=1000000){m=(m/1000000).toFixed(2)+"M"}else{if(m>=1000){m=(m/1000).toFixed(1)+"k"}}return m};i.prototype.openPopup=function(m){b[m](this.options);if(this.options.enableTracking===true){var n={googlePlus:{site:"Google",action:"+1"},facebook:{site:"facebook",action:"like"},twitter:{site:"twitter",action:"tweet"},digg:{site:"digg",action:"add"},delicious:{site:"delicious",action:"add"},stumbleupon:{site:"stumbleupon",action:"add"},linkedin:{site:"linkedin",action:"share"},pinterest:{site:"pinterest",action:"pin"},tumblr:{site:'tumblr',action:'share'},mail:{site:'mail',action:'share'}};ga("send","social",n[m].site,n[m].action)}};i.prototype.simulateClick=function(){var m=f(this.element).html();f(this.element).html(m.replace(this.options.total,this.options.total+1))};i.prototype.update=function(n,m){if(n!==""){this.options.url=n}if(m!==""){this.options.text=m}};f.fn[c]=function(m){var n=arguments;if(m===a||typeof m==="object"){return this.each(function(){if(!f.data(this,"plugin_"+c)){f.data(this,"plugin_"+c,new i(this,m))}})}else{if(typeof m==="string"&&m[0]!=="_"&&m!=="init"){return this.each(function(){var o=f.data(this,"plugin_"+c);if(o instanceof i&&typeof o[m]==="function"){o[m].apply(o,Array.prototype.slice.call(n,1))}})}}}})(jQuery,window,document); diff --git a/sharrre.php b/sharrre.php index 867024e..f2f5943 100644 --- a/sharrre.php +++ b/sharrre.php @@ -1,62 +1,49 @@ '','count'=>0); - $json['url'] = $_GET['url']; - $url = urlencode($_GET['url']); - $type = urlencode($_GET['type']); - - if(filter_var($_GET['url'], FILTER_VALIDATE_URL)){ - if($type == 'googlePlus'){ //source http://www.helmutgranda.com/2011/11/01/get-a-url-google-count-via-php/ - $contents = parse('https://plusone.google.com/u/0/_/+1/fastbutton?url=' . $url . '&count=true'); - - preg_match( '/window\.__SSR = {c: ([\d]+)/', $contents, $matches ); - - if(isset($matches[0])){ - $json['count'] = (int)str_replace('window.__SSR = {c: ', '', $matches[0]); - } - } - else if($type == 'stumbleupon'){ - $content = parse("http://www.stumbleupon.com/services/1.01/badge.getinfo?url=$url"); - - $result = json_decode($content); - if (isset($result->result->views)) - { - $json['count'] = $result->result->views; - } +/* Based on original Sharrre by Julien Hany + * by Brando Meniconi (b.meniconi@fuoricentrostudio.com) + */ - } - } - echo str_replace('\\/','/',json_encode($json)); - - function parse($encUrl){ - $options = array( - CURLOPT_RETURNTRANSFER => true, // return web page - CURLOPT_HEADER => false, // don't return headers - CURLOPT_FOLLOWLOCATION => true, // follow redirects - CURLOPT_ENCODING => "", // handle all encodings - CURLOPT_USERAGENT => 'sharrre', // who am i - CURLOPT_AUTOREFERER => true, // set referer on redirect - CURLOPT_CONNECTTIMEOUT => 5, // timeout on connect - CURLOPT_TIMEOUT => 10, // timeout on response - CURLOPT_MAXREDIRS => 3, // stop after 10 redirects - CURLOPT_SSL_VERIFYHOST => 0, - CURLOPT_SSL_VERIFYPEER => false, +header('content-type: application/json'); + +$json = array( + 'url'=>filter_input(INPUT_GET, 'url', FILTER_VALIDATE_URL), + 'count'=>0 ); - $ch = curl_init(); - - $options[CURLOPT_URL] = $encUrl; - curl_setopt_array($ch, $options); - - $content = curl_exec($ch); - $err = curl_errno($ch); - $errmsg = curl_error($ch); - - curl_close($ch); - - if ($errmsg != '' || $err != '') { - /*print_r($errmsg); - print_r($errmsg);*/ + +if(empty($json['url'])){ + return json_encode($json); +} + +$context = stream_context_create(array( + 'http'=>array( + //'proxy' => 'tcp://proxy.example.com:5100', // + 'max_redirects' => 5, + 'user_agent' => 'Sharrre', + 'timeout' => 5, + 'verify_peer' => false, + ) +)); + + +switch(filter_input(INPUT_GET, 'type')){ + case 'googlePlus': + $response = file_get_contents('https://plusone.google.com/u/0/_/+1/fastbutton?url=' . urlencode($json['url']) . '&count=true', false, $context); + + $matches = array(); + if(!empty($response) && preg_match( '/window\.__SSR = {c: ([\d]+)/', $response, $matches )){ + $json['count'] = $matches[1]; + } + break; + + case 'stumbleupon': + $response = file_get_contents("http://www.stumbleupon.com/services/1.01/badge.getinfo?url=".urlencode($json['url']), false, $context); + + if (!empty($response) && ($result = json_decode($response)) && isset($result->result->views)) + { + $json['count'] = (int)$result->result->views; } - return $content; - } + + break; + } + + echo json_encode($json); \ No newline at end of file