【问题标题】:How to get url Google Page rank with c#如何使用 c# 获取 url 谷歌页面排名
【发布时间】:2012-01-17 21:06:20
【问题描述】:

我正在使用下面的代码,但它给出了超时错误。虽然我的 IP 没有被阻止,但我可以通过 firefox 插件 searchstatus 进行检查。我正在使用的下面的代码似乎已经过时并且不体面。所以我的问题是如何使用 c# 4.0 获得 url 页面排名

        private const UInt32 GOOGLE_MAGIC = 0xE6359A60;

    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;
    }

    public static string GoogleCH(string url)
    {
        url = string.Format("info:{0}", url);

        int length = url.Length;

        UInt32 a, b;
        UInt32 c = GOOGLE_MAGIC;

        int k = 0;
        int len = length;

        a = b = 0x9E3779B9;

        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)length;
        switch (len)  /* all the case statements fall through */
        {
            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;
            /* the first byte of c is reserved for the length */
            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;
            /* case 0: nothing left to add */
        }

        _mix(ref a, ref b, ref c);

        return string.Format("6{0}", c);
    }

    public string getGooglePR(string url)
    {
        Uri myUri = new Uri(url);
        string srUrl = myUri.AbsoluteUri.ToString();
        string checksum = GoogleCH(srUrl);
        string query = string.Format("http://toolbarqueries.google.com/tbr?client=navclient-auto&features=Rank&ch={0}&features=Rank&q=info:{1}", checksum, srUrl);

        try
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(query);
            string response = new StreamReader(request.GetResponse().GetResponseStream()).ReadToEnd();
            if (response.Length == 0)
                return "01";
            else
                return int.Parse(Regex.Match(response, "Rank_1:[0-9]:([0-9]+)").Groups[1].Value).ToString() + "0";
        }
        catch (Exception E)
        {
            return E.Message.ToString();
        }
    }

c# 4.0

注意:当url中有特殊字符时会出现问题,如&

【问题讨论】:

  • 您可以考虑运行 fiddler 以查看 firefox 发送的确切查询
  • Chris Lively 感谢您的回答,但我发现了错误。错误是散列函数。当 url 中有特殊字符(如 &)时,它会失败。那么我该如何解决哈希问题

标签: c# url get pagerank


【解决方案1】:

只检查特定网站的主机而不是完整的网址

网站url主机有&吗?

【讨论】:

  • 这会有什么帮助。这里的目标是获得完整的 url pagerank
  • 你好,我运行了你发布的代码,但它抛出了一个错误。算术错误。当我检查时,上面的代码没有得到 PR,而是在搜索框中返回了一个带有 info:domain 的网页作为查询和一个结果。代码还能用吗,也许我可以帮你调试一下
猜你喜欢
  • 1970-01-01
  • 2011-03-27
  • 1970-01-01
  • 2014-12-03
  • 2012-02-09
  • 2011-06-18
  • 1970-01-01
  • 2023-02-09
  • 1970-01-01
相关资源
最近更新 更多