1

ウェブページの URL を取得し、+1 のカウントを返すメソッドが必要です。私はグーグルを検索し、これを見つけただけで、方法は次のとおりです。

int GetPlusOnes(string url) 
{

     string googleApiUrl = "https://clients6.google.com/rpc"; //?key=AIzaSyCKSbrvQasunBoV16zDH9R33D88CeLr9gQ";

     string 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""}]";

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

     System.IO.Stream writeStream = request.GetRequestStream();
     UTF8Encoding encoding = new UTF8Encoding();
     byte[] bytes = encoding.GetBytes(postData);
     writeStream.Write(bytes, 0, bytes.Length);
     writeStream.Close();

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

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

    var json = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize(jsonString);
    int count = Int32.Parse(json[0]["result"]["metadata"]["globalCounts"]["count"].ToString().Replace(".0", ""));

    return count;
}

しかし、エラーがあります

var json = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize(jsonString);

Deserializeメソッドは 2 つの引数を取得し、2 番目の引数がわからないためです。2番目の引数が何であるかを知っている人、または正常に機能する別の方法を知っている人はいますか?

私も試した更新

    public static Regex REGEX_GETURLCOUNT =
    new Regex(@"<div[^>]+id=""aggregateCount""[^>]+>(\d*)</div>");

    public int GetPlusOnes(string url)
    {
        string fetchUrl =
            "https://plusone.google.com/u/0/_/+1/fastbutton?url=" +
            HttpUtility.UrlEncode(url) + "&count=true";
        WebClient wc=new WebClient();
        string response = wc.DownloadString(fetchUrl);

        Match match = REGEX_GETURLCOUNT.Match(response);
        if (match.Success)
        {
            return int.Parse(match.Groups[1].Value);
        }
        return 0;
    }

match.Successでもいつもですfalse

4

1 に答える 1

3

最近このようなことをしなければならなかった、私は使用しました:

 public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            int test = GetPlusOnes("http://www.allfancydress.com/"); //Returns 11 plus ones
            Response.Write("Plus ones: " + test.ToString());
        }

        public static Regex REGEX_GETURLCOUNT =
         new Regex(@"<div[^>]+id=""aggregateCount""[^>]+>(\d*)</div>");

        public static int GetPlusOnes(string url)
        {
            string fetchUrl =
                "https://plusone.google.com/u/0/_/+1/fastbutton?url=" +
                HttpUtility.UrlEncode(url) + "&count=true";
            HttpWebRequest request =
                (HttpWebRequest)WebRequest.Create(fetchUrl);
            string response = new StreamReader(request.GetResponse()
                .GetResponseStream()).ReadToEnd();
            Match match = REGEX_GETURLCOUNT.Match(response);
            if (match.Success)
            {
                return int.Parse(match.Groups[1].Value);
            }
            return 0;
        }

    }

お役に立てれば

*私のカスタムプロキシクラスを編集しました。これを切り取って貼り付けるだけで、うまくいきます。

于 2012-05-25T09:20:27.737 に答える