Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyniki wyszukiwania google w RSS lub XML
Forum PHP.pl > Inne > Hydepark
craker
Witam,
mam takie pytanie czy możliwe jest otrzymanie wyników wyszukiwania w google w postaci strony xml lub rss tak jak to ma miejsce z wyszukiwarką msn? wpadłem na bardzo fajny pomysł, ale niestety do tego potrzebuje właśnie coś takiego. Czytałem na google i niby piszą, że robiąc swoją strone wystarczy dodać &output=xml lub xml_no_dtd, jednakże gdy tak wpiszesz pojawia się bład 403 na ich stronie, czy jest jakaś inna opcja questionmark.gif

Dzięki za pomoc
sztosz
Wiesz, zastanawiam się po co co XML z wyszukiwarki której nie umiesz obsługiwać? sad.gif
http://www.google.com/search?q=google+output+xml
http://googlesystem.blogspot.com/2007/03/f...gle-search.html
craker
zauważ, że szukałem bo skoro znalazłem że należy stosować parametr output=xmltoznaczy, ze przeglądałem google, ale ok.

Znalazłem teraz na stronie google takie coś, że należy stosować taki oto link:

Kod
http://www.google.com/search?start=0&num=10&q=[CO SZUKAMY]&client=google-csbe&output=xml_no_dtd&cx=00255077836266642015:u-scht7a-8i


jednakże powyższy kod nie działa, bo zwraca pusty dokument xml, np gdy daję http://www.google.com/search?start=0&n...015:u-scht7a-8i
to dokument xml zawiera error 404. czy możesz mi pomóc rozwiązać ten problem questionmark.gif a z tym linkiem do bloga to przeglądałem, ale niestety link do demo codu nie działa od rana
sztosz
  1. <?php
  2. /*
  3. Written and contributed by
  4. Alex Stapleton,
  5. Andy Doctorow,
  6. Tarakan,
  7. Bill Zeller,
  8. Vijay "Cyberax" Bhatter
  9. traB
  10. This code is released into the public domain
  11. */
  12. //header("Content-Type: text/plain; charset=utf-8");
  13. define('GOOGLE_MAGIC', 0xE6359A60);
  14.  
  15. function obtainPR($data)
  16. {
  17.  $ret = array();
  18.  
  19.  $parser = xml_parser_create();
  20.  xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
  21.  xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1);
  22.  xml_parse_into_struct($parser,$data,$values,$tags);
  23.  xml_parser_free($parser);
  24.  
  25.  $hash_stack = array();
  26.  
  27.  foreach ($values as $key => $val)
  28.  {
  29.  switch ($val['type'])
  30.  {
  31.  case 'complete':
  32.  array_push($hash_stack, $val['tag']);
  33.  $type = implode($hash_stack, "][");
  34.  if ($type == "RK")
  35.  {
  36.  $PageRank = $val[value];
  37.  }
  38.  array_pop($hash_stack);
  39.  break;
  40.  }//swhitch
  41.  }//foreach
  42.  
  43.  return $PageRank;
  44. }//obtainPR
  45.  
  46.  
  47. //unsigned shift right
  48. function zeroFill($a, $b)
  49. {
  50. $z = hexdec(80000000);
  51. if ($z & $a)
  52. {
  53. $a = ($a>>1);
  54. $a &= (~$z);
  55. $a |= 0x40000000;
  56. $a = ($a>>($b-1));
  57. }
  58. else
  59. {
  60. $a = ($a>>$b);
  61. }
  62. return $a;
  63. }
  64.  
  65.  
  66. function mix($a,$b,$c) {
  67. $a -= $b; $a -= $c; $a ^= (zeroFill($c,13));
  68. $b -= $c; $b -= $a; $b ^= ($a<<8);
  69. $c -= $a; $c -= $b; $c ^= (zeroFill($b,13));
  70. $a -= $b; $a -= $c; $a ^= (zeroFill($c,12));
  71. $b -= $c; $b -= $a; $b ^= ($a<<16);
  72. $c -= $a; $c -= $b; $c ^= (zeroFill($b,5));
  73. $a -= $b; $a -= $c; $a ^= (zeroFill($c,3));
  74. $b -= $c; $b -= $a; $b ^= ($a<<10);
  75. $c -= $a; $c -= $b; $c ^= (zeroFill($b,15));
  76.  
  77. return array($a,$b,$c);
  78. }
  79.  
  80. function GoogleCH($url, $length=null, $init=GOOGLE_MAGIC) {
  81. if(is_null($length)) {
  82. $length = sizeof($url);
  83. }
  84. $a = $b = 0x9E3779B9;
  85. $c = $init;
  86. $k = 0;
  87. $len = $length;
  88. while($len >= 12) {
  89. $a += ($url[$k+0] +($url[$k+1]<<8) +($url[$k+2]<<16) +($url[$k+3]<<24));
  90. $b += ($url[$k+4] +($url[$k+5]<<8) +($url[$k+6]<<16) +($url[$k+7]<<24));
  91. $c += ($url[$k+8] +($url[$k+9]<<8) +($url[$k+10]<<16)+($url[$k+11]<<24));
  92. $mix = mix($a,$b,$c);
  93. $a = $mix[0]; $b = $mix[1]; $c = $mix[2];
  94. $k += 12;
  95. $len -= 12;
  96. }
  97.  
  98. $c += $length;
  99. switch($len) /* all the case statements fall through */
  100. {
  101. case 11: $c+=($url[$k+10]<<24);
  102. case 10: $c+=($url[$k+9]<<16);
  103. case 9 : $c+=($url[$k+8]<<8);
  104. /* the first byte of c is reserved for the length */
  105. case 8 : $b+=($url[$k+7]<<24);
  106. case 7 : $b+=($url[$k+6]<<16);
  107. case 6 : $b+=($url[$k+5]<<8);
  108. case 5 : $b+=($url[$k+4]);
  109. case 4 : $a+=($url[$k+3]<<24);
  110. case 3 : $a+=($url[$k+2]<<16);
  111. case 2 : $a+=($url[$k+1]<<8);
  112. case 1 : $a+=($url[$k+0]);
  113.  /* case 0: nothing left to add */
  114. }
  115. $mix = mix($a,$b,$c);
  116. /*-------------------------------------------- report the result */
  117. return $mix[2];
  118. }
  119.  
  120. //converts a string into an array of integers containing the numeric value of the 
    char
  121. function strord($string) {
  122. for($i=0;$i<strlen($string);$i++) {
  123. $result[$i] = ord($string{$i});
  124. }
  125. return $result;
  126. }
  127.  
  128.  
  129. // converts an array of 32 bit integers into an array with 8 bit values. Equivalen
    t to (BYTE *)arr32
  130.  
  131. function c32to8bit($arr32) {
  132. for($i=0;$i<count($arr32);$i++) {
  133. for ($bitOrder=$i*4;$bitOrder<=$i*4+3;$bitOrder++) {
  134. $arr8[$bitOrder]=$arr32[$i]&255;
  135. $arr32[$i]=zeroFill($arr32[$i], 8);
  136. }
  137. }
  138. return $arr8;
  139. }
  140.  
  141.  
  142. // <a href=\"http://www.example.com/\" target=\"_blank\">http://www.example.com/</a> - Checksum: 6540747202
  143.  
  144. print("<b>URL .... $url</b>n");
  145. $url = 'info:' . $url;
  146. $ch = GoogleCH(strord($url));
  147. $url_to_parse = sprintf ("http://toolbarqueries.google.com/search?client=navclient-auto&ch=6%u&ie=UTF-8&oe=UTF-8&q=%s", $ch, $url);
  148. $value = obtainPR(file_get_contents($url_to_parse));
  149. printf("<li> <u>Checksum <2.0.114:</u> ..... 6%u ...... <A href=$url_to_parse>link</A> .... PR = $valuen",$ch);
  150.  
  151. $ch=sprintf("%u", $ch);
  152. // new since Toolbar 2.0.114
  153.  
  154. $ch = ((($ch/7) << 2) | (((int)fmod($ch,13))&7));
  155.  
  156. $prbuf = array();
  157. $prbuf[0] = $ch;
  158. for($i = 1; $i < 20; $i++) {
  159. $prbuf[$i] = $prbuf[$i-1]-9;
  160. }
  161. $ch = GoogleCH(c32to8bit($prbuf), 80);
  162. $url_to_parse = sprintf ("http://toolbarqueries.google.com/search?client=navclient-auto&ch=6%u&ie=UTF-8&oe=UTF-8&q=%s", $ch, $url);
  163. $value = obtainPR(file_get_contents($url_to_parse));
  164. //
  165. printf("<li> <u>Checksum >=2.0.114:</u> ..... 6%u ...... <A href=$url_to_parse>link</A> .... PR = $valuen",$ch);
  166.  
  167. ?>


Powyżej jest kod do obliczania checksumy.

http://www.google.com/search?q=php&output=xml wypluwa 403, bo XML'a google serwuje chyba teraz tylko podmiotom które mają umowę z google na XML'a. wszelkie inne sposoby są niezgodne z TOS google.

Czemu strona http://www.google-script.com/build-your-ow...le-without-apis nie działa nie wiem.

Tak więc aby dostać XML'a trzeba w URL'u wstawić: [...]&client=navclient-auto&[CHEKSUM][...]. Ale nie wiem czy to dalej działa. Może jak z tym się zapoznasz to coś wykombinujesz. Zawsze możesz przecież sparsować wyniki do XML'a. Pytani: po co Ci ten XML?
craker
po prostu mam w planach napisać pewną aplikację i chce osiągnąć efekt taki jak jest np. z wyszukiwarką MSN, gdzie wystarczy dać parametr format=rss i wynik mamy wypluwany jako RSS. poprostu chcę zrobić taką jakby wyszukiwarkę, która będzie prezentować wyniki, więc wydaje mi się że to jest najlepsza metoda, chyba, że masz lepszy pomysł na parsowanie wyników google ? możesz mi pomóc trochę questionmark.gif smile.gif
sztosz
Nie ma po co parsować smile.gif zapoznaj się z tym: http://code.google.com/apis/ajaxsearch/samples.html link umknął mi z wcześniejszego posta. A co do parsowania wyników do XML'a to raczej nie pomogę. Znam teorię, bo muszę, ale praktyki żadnej nie mam, no ale przede wszystkim nie za bardzo mam czas winksmiley.jpg
craker
dzięki, ale z tym też będzie problem, bo z tego co widze, to trzeba uzyskaćkod od google rejestrując się i to żaden problem, ale ja chce udostępniaćmoje narzędzie ogólnie ludziom, a jak wiadomo nie każdemu będzie się chciało rejestrować na takiej stronie, żeby uzyskać kod
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.