首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在google中通过查询获取网站排名

如何在google中通过查询获取网站排名
EN

Stack Overflow用户
提问于 2014-02-03 09:38:24
回答 1查看 2.2K关注 0票数 0

我有一个ASP.NET MVC 4项目,我需要在那里实现下一个未来:

  1. 我有网址
  2. 搜索字符串

我需要基于这两个选项在谷歌响应网站排名,谁知道如何使用c#和asp.net mvc。我是这个圈子里的新人。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-03 10:08:55

查看完整的源代码这里乔纳森·伍德可以获得完整的代码,我对它进行了测试,它正在按预期的方式工作。您可以将网站url及其查询字符串组合成一个字符串,然后将该字符串传递给GetPAgeRank(string )方法。或者,如果您只想要网站运行,则忽略querystring,只发送- http://www.stackoverflow.com之类的网站地址。

代码语言:javascript
复制
using System;
using System.IO;
using System.Net;
using System.Text;

public class GooglePageRank
{
    /// <summary>
    /// Returns the PageRank of the given URL. Return values are 0 through 10 or
    /// -1 (N/A), which indicates there was an error or the URL is not in the
    /// Google index.
    /// </summary>
    /// <param name="url">URL to test</param>
    /// <returns></returns>
    public static int GetPageRank(string url)
    {
        int rank = -1;

        try
        {
            // Form complete URL
            url = String.Format("http://toolbarqueries.google.com/tbr" +
                "?client=navclient-auto&features=Rank&ch={0}&q=info:{1}",
                ComputeHash(url), UrlEncode(url));

            // Download page
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            StreamReader stream = new StreamReader(request.GetResponse().GetResponseStream());
            string response = stream.ReadToEnd();

            // Parse page rank value
            string[] arr = response.Split(':');
            if (arr.Length == 3)
                rank = int.Parse(arr[2]);
        }
        catch (Exception)
        {
            // Do nothing but return -1;
        }
        return rank;
    }

    /// <summary>
    /// URL-encodes the given URL. Handy when HttpUtility is not available
    /// </summary>
    /// <param name="url">URL to encode</param>
    /// <returns></returns>
    private static string UrlEncode(string url)
    {
        StringBuilder builder = new StringBuilder();

        foreach (char c in url)
        {
            if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9'))
                builder.Append(c);
            else if (c == ' ')
                builder.Append('+');
            else if ("()*-_.!".IndexOf(c) >= 0)
                builder.Append(c);
            else
                builder.AppendFormat("%{0:X2}", (byte)c);
        }
        return builder.ToString();
    }

    /// <summary>
    /// Computes a hash value required by Google
    /// </summary>
    private static string ComputeHash(string url)
    {
        UInt32 a, b;
        UInt32 c = 0xE6359A60;
        int k = 0;
        int len;

        // Modify URL
        url = string.Format("info:{0}", url);

        a = b = 0x9E3779B9;
        len = url.Length;

        while (len >= 12)
        {
            a += (UInt32)(url[k + 0] + (url[k + 1] << 8) + (url[k + 2] << 16) + (url[k + 3] << 24));
            b += (UInt32)(url[k + 4] + (url[k + 5] << 8) + (url[k + 6] << 16) + (url[k + 7] << 24));
            c += (UInt32)(url[k + 8] + (url[k + 9] << 8) + (url[k + 10] << 16) + (url[k + 11] << 24));
            Mix(ref a, ref b, ref c);
            k += 12;
            len -= 12;
        }

        c += (UInt32)url.Length;
        switch (len)
        {
            case 11:
                c += (UInt32)(url[k + 10] << 24);
                goto case 10;
            case 10:
                c += (UInt32)(url[k + 9] << 16);
                goto case 9;
            case 9:
                c += (UInt32)(url[k + 8] << 8);
                goto case 8;
            case 8:
                b += (UInt32)(url[k + 7] << 24);
                goto case 7;
            case 7:
                b += (UInt32)(url[k + 6] << 16);
                goto case 6;
            case 6:
                b += (UInt32)(url[k + 5] << 8);
                goto case 5;
            case 5:
                b += (UInt32)(url[k + 4]);
                goto case 4;
            case 4:
                a += (UInt32)(url[k + 3] << 24);
                goto case 3;
            case 3:
                a += (UInt32)(url[k + 2] << 16);
                goto case 2;
            case 2:
                a += (UInt32)(url[k + 1] << 8);
                goto case 1;
            case 1:
                a += (UInt32)(url[k + 0]);
                break;
            default:
                break;
        }
        Mix(ref a, ref b, ref c);
        return string.Format("6{0}", c);
    }

    /// <summary>
    /// ComputeHash() helper method
    /// </summary>
    private static void Mix(ref UInt32 a, ref UInt32 b, ref UInt32 c)
    {
        a -= b; a -= c; a ^= c >> 13;
        b -= c; b -= a; b ^= a << 8;
        c -= a; c -= b; c ^= b >> 13;
        a -= b; a -= c; a ^= c >> 12;
        b -= c; b -= a; b ^= a << 16;
        c -= a; c -= b; c ^= b >> 5;
        a -= b; a -= c; a ^= c >> 3;
        b -= c; b -= a; b ^= a << 10;
        c -= a; c -= b; c ^= b >> 15;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21523832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档