Wyszukiwarka google

0

Witam. Chcę napisac prostą wyszukiwarkę na bazie google.
Oto mój kod:
<?php
$fraza = $_POST["search"];
echo'<form action="?q='.$fraza.'&amp;search=Search" method="POST">
<input type="text" name="search" style="width: 250px;">
<input type="submit" value="Search">

</form>'; if($_GET['stan'] == "q='.$fraza.'&search=Search") {

$ch = curl_init('http://www.google.pl/search?hl=pl&q=site%3Azippyshare.com+'.$fraza.'&btnG=Szukaj&lr=');
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PROXY, "proxy:port");
curl_setopt($ch, CURLOPT_PROXYPORT, 80);

$curl_exec = curl_exec($ch);
preg_match('/

<a href="(.+?)" class=l/is', $curl_exec, $matches);
curl_close($ch);
$site = $matches[1];
echo $site;
}
?>
Niestety "coś" nie idzie w tym kodzie. Od razu mówię że proxy (które podaje w kodzie) jest dobre.
Czy ktoś byłby w stanie mi pomóc w znalezieniu usterki??</p>
0

A jakimś błędem sypie?

0

Fail. Google AJAX Search API nie boli. Za curla cie zbanują na google.

0

To całe API w ajaxie to badziewie. Zero kontroli nad kodem i wyglądem.

0
Demonical Monk napisał(a)

Fail. Google AJAX Search API nie boli. Za curla cie zbanują na google.
Dlaczego? Przecież google to udostępnia - w dokumentacji jest opisane co i jak.

Google wymaga podania poprawnego CURLOPT_REFERER - może to jest u Ciebie problemem

Przy stronce którą robię chciałem zrobić wyszukiwanie wywoływane i obrabiane z php - połączyłem się poprawnie dwa razy, a potem dostaję komunikat, że brak jest połączenia.

Skrypt umieszczony na serwerze działa, ale mam problemy na kompie, na lokalnym serwerze - nie działa ani z nazwą domeny, ani z nazwą hosta kompa...
Trochę wkurzające, chociaż rzeczywiście obsługa tego przez curla daje dużo większe możliwości manewru niż ajax-owe podejście...

Demonical Monk, to w stopce to reklama czy przestroga?

0

Czyli twierdzisz ze moj kod jest dobry (po podaniu refa)?

0

zobacz: http://code.google.com/intl/pl-PL/apis/ajaxsearch/documentation/

na dole strony masz przykład w php, jako strona wywoływana jest:
http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=Paris%20Hilton&key=INSERT-YOUR-KEY

zdaje się, że musisz podać Api key, chociaż bez niego też działa

0

O stary.:) dzieki za przypomnienie mi ze trzeba czytac całą dokumentację.:) rano wymodze cos na bazie dokumentacji.:) jak cos to sie pochwale błędami/wyszukiwarką.:)

0

Przecież on używał zwykłego zapytania na chama, miałem na myśli że za takie praktyki go zbanują, za to można użyć Google Ajax Search Api - i wcale to nie jest tak że nie masz kontroli. W czym byś tego nie zaimplementował będzie ładnie.

0

Toteż został odesłany do dokumentacji. Na początku pobieżnie przejrzałem kod, nie zwróciłem uwagi na adres.

W czym byś tego nie zaimplementował będzie ładnie
Będzie ładnie. Ale to inna sprawa, że skoro jest możliwość pobrania wyników poprzez curl i ich obrobienie w php, to czemu nie.

To tak tylko jako przykład: bawiłem się przy stronie w tłumaczenie jej przez google api. Poprzez ajax mam wyświetlaną stronę i dopiero tłumaczoną (każda strona to tłumaczenie kilku pojedynczych kawałków), każde wyświetlenie strony powoduje odpytanie kilka razy google o tłumaczenie - jednak chwilę to trwa (widać proces tłumaczenia poszczególnych fragmentów).
Przy php miałbym możliwość przetłumaczenia przed wyświetleniem strony, a co za tym idzie cache'owanie przetłumaczonej strony, tak, żeby nie odpytywać za każdym razem google.

Wiem, mogę przetłumaczone przez ajax teksty przekazać do skryptu i zrobić to samo, ale to już jest kombinowanie. Z poziomu php robię to bezpośrednio.

arasek, tu masz prosty przykład jak "mieć kontrolę" nad wyglądem przy ajax-ie.
http://internetmaker.pl/artykul/4553,2,efektowna_wyszukiwarka_google_na_twojej_stronie_google_ajax_search_api_w_praktyce

a tu masz przykłady jak mieć kontrolę nad działaniem:
http://code.google.com/apis/ajax/playground/?exp=search#the_hello_world_of_general_search

0
madmike napisał(a)

W czym byś tego nie zaimplementował będzie ładnie
Będzie ładnie. Ale to inna sprawa, że skoro jest możliwość pobrania wyników poprzez curl i ich obrobienie w php, to czemu nie.</quote>
Po pierwsze: Po co się [CIACH!], jak można użyć API i mieć sformatowane dane?
Po drugie: Strona podziała ci ~5 minut, a potem dostaniesz bana od google za pobieranie wyników z normalnego searchu i tyle będzie z wyszukwiania.

Jeśli jest api, można je zaimplementować w JS albo PHP to trzeba z niego korzystać.

0
Demonical Monk napisał(a)

Po drugie: Strona podziała ci ~5 minut, a potem dostaniesz bana od google za pobieranie wyników z normalnego searchu i tyle będzie z wyszukwiania.
Zakładam, że teraz skorzysta prawidłowo... I pod tym kątem piszę o swobodzie wyboru... :)

0
madmike napisał(a)
Demonical Monk napisał(a)

Po drugie: Strona podziała ci ~5 minut, a potem dostaniesz bana od google za pobieranie wyników z normalnego searchu i tyle będzie z wyszukwiania.
Zakładam, że teraz skorzysta prawidłowo... I pod tym kątem piszę o swobodzie wyboru... :)

Uwierz że na normalnym searchu prędzej czy później się wyłożysz. Nie masz sensu kombinować, api albo nic.

0

Co to znaczy na normalnym? Jeśli z http://www.google.pl/search? , to dostał odpowiedź, jaki adres ma użyć.

Skoro api umożliwia korzystanie z php i curl'a - więc dlaczego tego nie używać?

$url = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&"
    . "q=Paris%20Hilton&key=INSERT-YOUR-KEY&userip=USERS-IP-ADDRESS";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, /* Enter the URL of your site here */);
$body = curl_exec($ch);
curl_close($ch);
0

Api umożlwiia korzystanie z CURLa, przykład kodu który podałeś jest dobry, jak pojedziesz po http://www.google.pl/search to prędzej czy później cię zbanują..

0

Więc tak. Skorzystałem z dokumentacji i dałem kod:

$fraza = $_POST["q"];
echo'<form action="" method="POST">
<input type="text" name="q" style="width: 250px;">
<input type="submit" value="Search">
</form>';

$url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q='.$fraza.'&key=ABQIAAAAK-FeGdoEAk6f0UUl89CJDBSeT-UVQsl6w28bUK87TZEADjUMcBT5yBaIStR0S9eNr71JtlFs3eq3pA';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, "http://www.4clubbing.eu");
$body = curl_exec($ch);
curl_close($ch);

$json = json_decode($body);

Niestety nie działa.:(

0

A key masz własny czy zerżnięty?

0

Własny, rejestrowany.

0

To debuguj.

0

Ale co czytać? Przeciez jest zrobione wg dokumentacji.

0

Poszukaj w google co znaczy debugowanie...

0

Ok. Doedukowałem sie.:) Teraz powiesz co źle zrobiłem?:)

0

Sam do tego dojdź, po to właśnie jest debugowanie.

0

Musisz sam dojść...

  1. daj np. przed zamknięciem połącznia:
echo curl_error($ch) . " " . curl_errno($ch);
curl_close($ch);
  • zobaczysz czy się łączy, a jeśli nie to jaki błąd wyrzuca
  1. Jeśli nie ma błędu daj np. na końcu
print_r($body)
  • zobaczysz jakie dane i w jakiej postaci otrzymujesz
  1. Kombinuj - bez tego ani rusz... ;)
0

Hm. Chyba błędów nie ma bo wyświetliło 0, i po tym {"responseData": {"results" .... wyniki ..... "responseDetails": null, "responseStatus": 200}

Wrrrr. :-[ sam nie wiem już o co w tym chodzi. zrobiłem wg dokumentacji. podałem dobre api key. i nadal nie bangla.:(

0

co nie "bangla" - z tego co napisałeś to wynika, że działa. Dostajesz dane w json - dekoduj to i obrób tak jak chcesz.

$json = json_decode($body);

to rozkodowuje json do tablicy (zajrzyj do dokumentacji php). Jak dasz sobie

print_r($json);

wypisze całą strukturę tablicy z danymi.

Na stronie, którą wcześniej Ci podałem masz przykład rozkodowania - trzy ostatnie linijki - dopasuj do swoich potrzeb, ew. zmodyfikuj po zobaczeniu jaką strukturę ma rozkodowana tablica:

<?php
$url =
    "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=phpdocumentator";
 $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_REFERER, "http://gajdaw.pl");
  $body = curl_exec($ch);
  curl_close($ch);
  $json = json_decode($body);
  echo $json->responseData->results[0]->url;
  echo $json->responseData->results[0]->title;
  echo $json->responseData->results[0]->content;
?>

Czytaj dokumentację... Kombinuj... Używaj google do szukania przykładów...

0

No dobra.:) Obrobiłem wyświetlanie wyniku.:) Tylko że $json->responseData->results[0]->url; wyświetla mi jeden wynik (logiczne), a ja bym chciał wszystkie.:P

0

a wiesz co to są pętle? Może jakiś kurs php?

Mała podpowiedź ;)

$json->responseData->results[0]->url
$json->responseData->results[1]->url
$json->responseData->results[2]->url
$json->responseData->results[3]->url
...

prawdopodobnie jeśli dasz sobie

echo count($json->responseData->results);

to będziesz wiedział ile takich linijek masz wypisać :)

0

No właśnie się zastanawiałem nad pętlą for ale czy idzie jakoś dostać max tych result'ów bo jakoś ta pętle przecież trzeba zatrzymac??.:P

0

He.:) właśnie o to mi sie rozchodziło.:P

1 użytkowników online, w tym zalogowanych: 0, gości: 1