Google PageRank Check программная реализация проверки на C#

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Net.Sockets;
  5. using System.IO;
  6. namespace CheckPageRank
  7. {
  8. /// <summary>
  9. /// Программная реализация проверки Google PageRank
  10. /// Использовать CheckPageRank.exe yoururl
  11. /// </summary>
  12. class Program
  13. {
  14. static Int64 StrToNum(string Str, Int64 Check, Int64 Magic)
  15. {
  16. Int64 Int32Unit = 4294967296;
  17. int _length = Str.Length;
  18. for (int i = 0; i < _length; i++)
  19. {
  20. Check *= Magic;
  21. if (Check >= Int32Unit)
  22. {
  23. Check = Check - Int32Unit * (Int64)(Check / Int32Unit);
  24. Check = (Check < -2147483648) ? (Check + Int32Unit) : Check;
  25. }
  26. Check += (int)Str[i];
  27. }
  28. return Check;
  29. }
  30. static Int32 HashURL(string url)
  31. {
  32. Int32 Check1 = (Int32)StrToNum(url, 0x1505, 0x21);
  33. Int32 Check2 = (Int32)StrToNum(url, 0x0, 0x1003F);
  34. Check1 >>= 2;
  35. Check1 = ((Check1 >> 4) & 0x3FFFFC0 ) | (Check1 & 0x3F);
  36. Check1 = ((Check1 >> 4) & 0x3FFC00 ) | (Check1 & 0x3FF);
  37. Check1 = ((Check1 >> 4) & 0x3C000 ) | (Check1 & 0x3FFF);
  38. Int32 T1 = ((((Check1 & 0x3C0) << 4) | (Check1 & 0x3C)) <<2 ) | (Check2 & 0xF0F );
  39. Int32 T2 = (Int32)((((Check1 & 0xFFFFC000) << 4) | (Check1 & 0x3C00)) << 0xA) | (Check2 & 0xF0F0000);
  40. return (Int32)(T1 | T2);
  41. }
  42. static string CheckHash(Int64 Hashnum)
  43. {
  44. int CheckByte = 0;
  45. int Flag = 0;
  46. string HashStr = ((UInt32)Hashnum).ToString();
  47. int _length = HashStr.Length;
  48. for (int i = _length - 1; i >= 0; i--)
  49. {
  50. int Re = HashStr[i] - '0';
  51. if (1 == (Flag % 2))
  52. {
  53. Re += Re;
  54. Re = (int)(Re / 10) + (Re % 10);
  55. }
  56. CheckByte += Re;
  57. Flag++;
  58. }
  59. CheckByte %= 10;
  60. if (0 != CheckByte)
  61. {
  62. CheckByte = 10 - CheckByte;
  63. if (1 == (Flag % 2) )
  64. {
  65. if (1 == (CheckByte % 2))
  66. {
  67. CheckByte += 9;
  68. }
  69. CheckByte >>= 1;
  70. }
  71. }
  72. return "7" + CheckByte + HashStr;
  73. }
  74. static string getch(string url)
  75. {
  76. return CheckHash(HashURL(url));
  77. }
  78. static void Main(string[] args)
  79. {
  80. string url = "google.com";
  81. if (args.Length > 0)
  82. {
  83. url = args[0];
  84. }
  85. //Int64 check1 = StrToNum(url, 0x1505, 0x21);
  86. //Console.WriteLine(check1);
  87. //Int64 check2 = StrToNum(url, 0x0, 0x1003F);
  88. //Console.WriteLine(check2);
  89. //Int64 hashUrl = HashURL(url);
  90. //Console.WriteLine(hashUrl);
  91. //Console.WriteLine(getch(url));
  92. Socket _socListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
  93. try
  94. {
  95. string googlehost = "toolbarqueries.google.com";
  96. string googleua = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.6) Gecko/20060728 Firefox/1.5";
  97. _socListener.Connect(googlehost, 80);
  98. if (_socListener.Connected)
  99. {
  100. string headers = string.Empty;
  101. string ch = getch(url);
  102. headers += "GET /search?client=navclient-auto&ch=" +
  103. ch + "&features=Rank&q=info:" + url + " HTTP/1.1\r\n";
  104. //Console.WriteLine(headers);
  105. headers += "Host: " + googlehost + "\r\n";
  106. headers += "User-Agent: " + googleua + "\r\n";
  107. headers += "Connection: Close\r\n\r\n";
  108. _socListener.Send(Encoding.UTF8.GetBytes(headers));
  109. int total = 0;
  110. const int bufferSize = 10240;
  111. byte[] buffer = new byte[bufferSize];
  112. using (MemoryStream ms = new MemoryStream())
  113. {
  114. while (true)
  115. {
  116. int receive = _socListener.Receive(buffer, bufferSize, SocketFlags.None);
  117. if (receive > 0)
  118. {
  119. total += receive;
  120. ms.Write(buffer, 0, receive);
  121. }
  122. else
  123. {
  124. break;
  125. }
  126. }
  127. string s = Encoding.UTF8.GetString(ms.GetBuffer());
  128. int pos = s.IndexOf("Rank_");
  129. if (pos != -1)
  130. {
  131. string pr = s.Substring(pos + 9).Trim();
  132. Console.WriteLine(pr);
  133. }
  134. else
  135. {
  136. Console.WriteLine("Error");
  137. }
  138. }
  139. }
  140. }
  141. catch (Exception exc)
  142. {
  143. }
  144. finally
  145. {
  146. _socListener.Close();
  147. }
  148. }
  149. }
  150. }

* This source code was highlighted with Source Code Highlighter.

Интересная статья? Поделитесь ею пожалуйста с другими:

Опубликовать в Twitter Написать в Facebook Поделиться ВКонтакте В Google Buzz Записать себе в LiveJournal Показать В Моем Мире В дневник на LI.RU Поделиться ссылкой в Моем Круге

Приглашаю присоединиться ко мне:

Follow Me Я в FaceBook Я ВКонтакте или подпишитесь на обновления блога по RSS

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

*


Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>