02 Mart 2015

Belirttiğiniz URL'nin twitter, linkedin, facebook, gooleplus ve pinterest üzerinde ne kadar paylaşıldığını merak ediyorsanız bu kod tam size göre

using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using System.Web.Script.Serialization;
using Newtonsoft.Json.Linq;

public class SocialCount
{
        public string Url { get; set; }
        private decimal Total { get; set; }

        public SocialCount(string url)
        {
            Url = url;
        }

        public int GetTweets()
        {
            var jsonString = new System.Net.WebClient().DownloadString("http://urls.api.twitter.com/1/urls/count.json?url=" + Url);

            var json = new JavaScriptSerializer().Deserialize>(jsonString);
            var count = Convert.ToInt32(json["count"]);

            Total += count;

            return count;
        }

        public int GetLikes()
        {
            try
            {
                var jsonString = new System.Net.WebClient().DownloadString("http://graph.facebook.com/?ids=" + Url);

                var json = new JavaScriptSerializer().Deserialize>(jsonString);
                int count = json[Url]["shares"];

                Total += count;

                return count;
            }
            catch (Exception ex)
            {
                return 0;
            }            
        }

        public int GetPlusOnes()
        {
            const string googleApiUrl = "https://clients6.google.com/rpc";
            int count = 0;
            var postData = @"[{""method"":""pos.plusones.get"",""id"":""p"",""params"":{""nolog"":true,""id"":""" + Url + @""",""source"":""widget"",""userId"":""@viewer"",""groupId"":""@self""},""jsonrpc"":""2.0"",""key"":""p"",""apiVersion"":""v1""}]";

            try
            {
                var request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(googleApiUrl);
                request.Method = "POST";
                request.ContentType = "application/json-rpc";
                request.ContentLength = postData.Length;

                var writeStream = request.GetRequestStream();
                var encoding = new UTF8Encoding();
                var bytes = encoding.GetBytes(postData);
                writeStream.Write(bytes, 0, bytes.Length);
                writeStream.Close();

                var response = (System.Net.HttpWebResponse)request.GetResponse();
                var responseStream = response.GetResponseStream();
                var readStream = new System.IO.StreamReader(responseStream, Encoding.UTF8);
                var jsonString = readStream.ReadToEnd();

                readStream.Close();
                responseStream.Close();
                response.Close();

                var json = JObject.Parse(jsonString.Replace("[", "").Replace("]", ""));

                count = Convert.ToInt32(json["result"]["metadata"]["globalCounts"]["count"].ToString().Replace(".0", ""));

                Total += count;
            }
            catch (Exception)
            {
                
                throw;
            }            

            return count;
        }

        public int GetLinkedIn()
        {
            var jsonString = new System.Net.WebClient().DownloadString("http://www.linkedin.com/countserv/count/share?url=" + Url + "&format=json");

            var json = new JavaScriptSerializer().Deserialize>(jsonString);
            var count = Convert.ToInt32(json["count"]);

            Total += count;

            return count;
        }

        public int GetPins()
        {
            var jsonString = new System.Net.WebClient().DownloadString("http://api.pinterest.com/v1/urls/count.json?url=" + Url);
            jsonString = Regex.Match(jsonString, @"receiveCount\((.*)\)$").Groups[1].Value;
            
            var json = new JavaScriptSerializer().Deserialize>(jsonString);
            var count = Convert.ToInt32(json["count"]);

            Total += count;

            return count;
        }

        public string GetAll()
        {
            string textTotal;

            if (Total == 0)
            {
                GetTweets();
                GetLikes();
                GetPlusOnes();
                GetPins();
                GetLinkedIn();
            }

            if (Total > 1000000)
            {
                Total = Math.Round(Total / 1000000, 1);

                textTotal = Total + "M";
            }
            else if (Total > 1000)
            {
                Total = Math.Round(Total / 1000, 1);
                textTotal = Total + "B";
            }
            else
            {
                textTotal = Total.ToString();
            }

            return textTotal.Replace(",",".");
        }
    }

Tagged: , , , , , , ,

0 yorum:

Yorum Gönder