Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Multiwyszukiwarka
Forum PHP.pl > Forum > PHP
zimack
Witam, mam pytanie, mam na zaliczenie do zrobienia multiwyszukiwarke. Ma ona działac na zasadzie:

1. Uzytkownik wpisuje hasło do wyszukiwania.
2. Przesylane jest ono do 3 wyszukiwarek np. yahoo, google, msn.
3. Wyszukiwarki zwracaja wyniki zapytania.
4. Moja multiwyszukiwarka ma za zadanie posortowac je ( najbardziej celne na poczatek ).
5. Wyswietlic posortowane.


Mam pytanie odnosnie tej Muliwyszukiwarki, tzn. jakimi zagadnieniami sie zainteresowac, jakich funkcji najlepiej uzywac, za co sie nie zabierac?
Czy temat jest trudny do realizacji?

Za kazde informacje bardzo dziekuje, pozdrawiam
TranceAddict
Cytat
1. Uzytkownik wpisuje hasło do wyszukiwania.
2. Przesylane jest ono do 3 wyszukiwarek np. yahoo, google, msn.
3. Wyszukiwarki zwracaja wyniki zapytania.
4. Moja multiwyszukiwarka ma za zadanie posortowac je ( najbardziej celne na poczatek ).
5. Wyswietlic posortowane.


1. Zwykły form z inputem winksmiley.jpg
2. Zrob 3 radiobox'y z wyborem lub przeszukuj wszystkie 3 od razu.
3. -
4. i 5. Zrobią to za Ciebie wyszukiwarki z których będziesz korzystał. Ew. możesz zastosować jakieś dodatkowe parametry wyszukiwania, które pozwolą na bardziej precyzyjny wynik. Możesz też zliczać ilość powtórek zapytania w wynikach z wszystkich 3 wyszukiwarek.

Z czego możesz skorzystać do pobrania wyników? - file_get_contents / cURL

Jak to powinno wyglądać? - piszesz sobie 3 funkcje każda dla innej wyszukiwarki, wywołujesz tą którą wybrał użytkownik - chociaż w sumie wystarczy jedna funkcja - tylko wystarczy do niej przekazać odpowiednie parametry np. $wyszukiwarka, $szukany_tekst i wtedy dzięki instrukcji if albo switch w srodku funkcji wykonujesz odpowiednie zapytanie.

Przyda się jeszcze - preg_match_all, str_replace, htmlentities, url_encode.

Tak poza tym to jeżeli Twoje zapytania będą zawierać frazy wyszukiwania zaawansowanego to po paru zapytaniach dostaniesz bana od google winksmiley.jpg To tak ogólnie może Ci sie przyda. Pozdrawiam
zimack
Cytat(TranceAddict @ 10.01.2009, 12:29:40 ) *
4. i 5. Zrobią to za Ciebie wyszukiwarki z których będziesz korzystał. Ew. możesz zastosować jakieś dodatkowe parametry wyszukiwania, które pozwolą na bardziej precyzyjny wynik. Możesz też zliczać ilość powtórek zapytania w wynikach z wszystkich 3 wyszukiwarek.



Gościu chciał zeby wyswietlało tylko 10 "najcelniejszych" wyników, zeby nie zagłebiac sie w to tak bardzo. Ma to wygladac tak, ze zadajesz pytanie, w tle jest sobie to szukane na 3 wyszukiwarkach i wyswietlane sa juz te najcelniejsze wyniki (10). Problem jest tego type, ze np. wpiszesz słowo "telefon", to w 1 wyszukiwarce bedzie jakis tam wynik na 1 miejscu, w 2 wyszukiwarce na 8, a w 3 na 4. I problem w tym jak to teraz złozyc, zeby te 10 bylo jak najbardziej trafnych, albo chociaz, zeby to jakis sens miało smile.gif.


Cytat
Tak poza tym to jeżeli Twoje zapytania będą zawierać frazy wyszukiwania zaawansowanego to po paru zapytaniach dostaniesz bana od google winksmiley.jpg To tak ogólnie może Ci sie przyda. Pozdrawiam


Co do wyszukiwania zaawansowanego to raczej nie bedzie z tym problemu. Proste zapytania, bez uzywania zaawansowanego wyszukiwania.



Jeszcze jedna sprawa, nie wiem czy dzisiaj mam lipny dzien czy co, ale nie potrafie zalapac o co chodzi w preg_match_all, a konkretniej w parametrach tej funkcji. Moze mi ktos to na "chłopski rozum" wyjasnic?

Pozdrawiam i dzieki za pomoc smile.gif
TranceAddict
Cytat
Jeszcze jedna sprawa, nie wiem czy dzisiaj mam lipny dzien czy co, ale nie potrafie zalapac o co chodzi w preg_match_all, a konkretniej w parametrach tej funkcji. Moze mi ktos to na "chłopski rozum" wyjasnic?


preg_match_all - potrzebne będzie do wyciągnięcia wyników wyszukiwania. Składnia wygląda następująco:

  1. <?php
  2. preg_match_all('tutaj_wzorce_wyrazen_regularnych', $tu_zawartosc_strony, $otrzymany_wynik);
  3. ?>


Cytat
Gościu chciał zeby wyswietlało tylko 10 "najcelniejszych" wyników, zeby nie zagłebiac sie w to tak bardzo. Ma to wygladac tak, ze zadajesz pytanie, w tle jest sobie to szukane na 3 wyszukiwarkach i wyswietlane sa juz te najcelniejsze wyniki (10). Problem jest tego type, ze np. wpiszesz słowo "telefon", to w 1 wyszukiwarce bedzie jakis tam wynik na 1 miejscu, w 2 wyszukiwarce na 8, a w 3 na 4. I problem w tym jak to teraz złozyc, zeby te 10 bylo jak najbardziej trafnych, albo chociaz, zeby to jakis sens miało smile.gif.


Popatrz zwróć uwagę, że wyszukiwarki zazwyczaj zwracają najcelniejsze wyniki od razu na samej górze. Formułując zapytanie nie jesteś przecież w stanie określić z której strony w google czy tam yahoo wynik będzie najcelniejszy. Zakładając wpisujesz frazę "budowanie domu" więc jeżeli masz mieć zwracane 10 wyników o największej celności to bierzesz pierwsze 3 z yahoo, 3 z msn i 4 z google. Celność możesz określić np. po powtórzeniu wyrazu "dom" lub "budowanie" w tytule lub opisie wyniku.
zimack
Cytat
Popatrz zwróć uwagę, że wyszukiwarki zazwyczaj zwracają najcelniejsze wyniki od razu na samej górze. Formułując zapytanie nie jesteś przecież w stanie określić z której strony w google czy tam yahoo wynik będzie najcelniejszy. Zakładając wpisujesz frazę "budowanie domu" więc jeżeli masz mieć zwracane 10 wyników o największej celności to bierzesz pierwsze 3 z yahoo, 3 z msn i 4 z google. Celność możesz określić np. po powtórzeniu wyrazu "dom" lub "budowanie" w tytule lub opisie wyniku.



Czyli rozumiem, ze zrobic tak, ze w tych 10 wynikach bedzie tak jak napisales, kilka z tej wyszukiwarki, kilka tamtej itd. A jesli sie powtórza, to wziasc nastepny np.?
TranceAddict
Cytat
Czyli rozumiem, ze zrobic tak, ze w tych 10 wynikach bedzie tak jak napisales, kilka z tej wyszukiwarki, kilka tamtej itd. A jesli sie powtórza, to wziasc nastepny np.?


no dokładnie bo innego sposobu na wyodrębnienie najcelniejszych wyników raczej nie widze, jak coś wymyśle to napisze, ale pierwsza myśl zawsze najlepsza tongue.gif
pinochet
file_get_contents jest tu bezużyteczny.
Musisz zastosować cURL będą Ci też potrzebne flagi CURLOPT_REFERER, CURLOPT_USERAGENT, przy ilości już około 1000(ta wartość jest wmiare bezpieczna na Google) zapytań na godzinę zabawa z flagami CURL juz nic nie daje. Przy większej ilości zapytań jedyną słuszną metodą jest zrobienie całości po stronie użytkownika(czytaj AJAX) - no chyba że chcesz się tylko pobawić.
Pozatym hehe jak piszesz wyszukiwarke to samemu wypadałoby algorytm wymyślić w sensie scalania wyników z wyszukiwarek.
ja bym zrobił np tak:
1 pozycja - 10 pkt
2 pozycja - 9 ....
+ 3 pkt jak strona jest z google
+ 2 jak z msna
+ 1 jak z yahoo
przykładowo strona jest na 3 w google 1 msn i 4 yahoo - ma 11 + 12 + 8 = 31 pkt tak obliczasz każdą stronę. Oczywiście wyniki się nie pokrywają 1:1 w G/M/Y potem sortujesz w/g punktów i wybierasz pierwsze 10 biggrin.gif

edit: niedoczytałem że to na zaliczenie ;]
zimack
Cytat(pinochet @ 10.01.2009, 22:28:50 ) *
file_get_contents jest tu bezużyteczny.
Musisz zastosować cURL będą Ci też potrzebne flagi CURLOPT_REFERER, CURLOPT_USERAGENT, przy ilości już około 1000(ta wartość jest wmiare bezpieczna na Google) zapytań na godzinę zabawa z flagami CURL juz nic nie daje. Przy większej ilości zapytań jedyną słuszną metodą jest zrobienie całości po stronie użytkownika(czytaj AJAX) - no chyba że chcesz się tylko pobawić.
Pozatym hehe jak piszesz wyszukiwarke to samemu wypadałoby algorytm wymyślić w sensie scalania wyników z wyszukiwarek.
ja bym zrobił np tak:
1 pozycja - 10 pkt
2 pozycja - 9 ....
+ 3 pkt jak strona jest z google
+ 2 jak z msna
+ 1 jak z yahoo
przykładowo strona jest na 3 w google 1 msn i 4 yahoo - ma 11 + 12 + 8 = 31 pkt tak obliczasz każdą stronę. Oczywiście wyniki się nie pokrywają 1:1 w G/M/Y potem sortujesz w/g punktów i wybierasz pierwsze 10 biggrin.gif

edit: niedoczytałem że to na zaliczenie ;]



Powiem Ci, ze podoba mi sie bardzo ten pomysł i chyba cos takiego zastosuje smile.gif, chyba ze do poniedziałku cos innego wymysle, ale przedstawie facetowi na zajeciach ten pomysł wlasnie smile.gif.

Cytat
edit: niedoczytałem że to na zaliczenie ;]



Jak mam to rozumiec smile.gif? Pozdrawiam
pinochet
Po pierwsze nie cytuj całego posta :] jeśli nie jest to potrzebne.
co do edita... potraktowałem temat troche poważniej - pisząc na zaliczenie(czytaj własny użytek) nie musisz się raczej obawiać o bany na googlu.
zimack
Witam ponownie, po malej przerwie. Co do algorytmu scalania to juz z gosciem na zajeciach ugadalem sie i pasuje mu. Tylko teraz mam problem odnosnie tych 3 wyszukiwarek ( google, msn, yahoo ), a dokladniej odnosnie ich API. Zarejestrowalem sie dzisiaj na MSN, dostałem Api Key, jakies przyklady tam byly to chcialem potestowac, wklejam swoj numer, i za kazdym razem, albo 0 wyników, albo jakis bład. No to znalazlem na necie jakas wyszukiwarke, co miala swoj Api Key z MSN, wkleiłem i działa super, za kazdym razem. Nie wiem co jest grane :/.

Druga sprawa, MSN uzywa SOAP, Yahoo DOM bodajże, a Google juz nie SOAP tylko AJAX i nie wiem czy da sie to pogodzic?

Czy jest sens robienia tego poprzez API tych wyszukiwarek?

Czy moze lepiej uzywac Curl, albo file_get_contents? Pozniej puscic przez preg_match_all ?

Już kurcze nie mam pomysłow co z tym zrobic, zeby było ok, to ma byc prosta multiwyszukiwarka, a schody na samym poczatku, albo schodki, zalezy jak dla kogo tongue.gif

Pozdrawiam i dzieki za odpowiedzi... smile.gif
pinochet
Z twojego postu nie wynika czy piszesz scalanie server czy klient side ... :|
Zakładam jednak że sklient server więc tak czy siak będziesz musiał używać CURL-a a on dopiero API więc może tu leży twój problem ;-)

Niestety nie znam się na API wyszukiwarek ... używam obecnie jednego skryptu z Yahoo api i dobrze działa to tak:
  1. <?php
  2. $ch = curl_init();
  3.    curl_setopt($ch, CURLOPT_URL, 'http://api.search.yahoo.com/ContentAnalysisService/V1/termExtraction');
  4.    curl_setopt($ch, CURLOPT_POST, 1);
  5.    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  6.    curl_setopt( $ch, CURLOPT_POSTFIELDS, 'appid='.urlencode($appid).'&context='.urlencode($text) );
  7.    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  8.    $c=curl_exec($ch);
  9. ?>


edit: Server = twój skrypt
klient = przeglądarka internetowa użytkownika
zimack
Cytat
Z twojego postu nie wynika czy piszesz scalanie server czy klient side ... :|


Server chodzi Ci, o to czy sortowane ma byc np. juz z Yahoo?

Cytat
Zakładam jednak że klient więc tak czy siak będziesz musiał używać CURL-a a on dopiero API więc może tu leży twój problem ;-)



Nie rozumiem zbytnio tego co napisales :/. Chodzi Ci o to, ze Curl bedzie uzywał Api danej wyszukiwarki?


Po odpaleniu Twojego skryptu dostaje coś takiego:

Warning: curl_setopt() [function.curl-setopt]: You must pass either an object or an array with the CURLOPT_HTTPHEADER, CURLOPT_QUOTE, CURLOPT_HTTP200ALIASES and CURLOPT_POSTQUOTE arguments in C:\Users........ on line 7



Rozumiem, ze w 'appid=' mam podac Api Key z Yahoo?
pinochet
Tak. Chodzi o to że CURL używa API. Potem twój skrypt odbiera dane - nie ważne czy to będzie CVS, XML, HTML czy cokolwiek innego i to przetwarza ...
scala to i wysyła do użytkownika gotową stronę wyników.

apropos warningu oczywiście musisz ustawić wszystkie nagłówki - $headers i $appid ewentualnie pokaż co daje curl_error

Co do headers ja się lubie podszywać za FF więc wrzucam tam wszystko co zobacze w LiveHTTP headers, appid to identyfikator Yahoo $text to tekst któremu chcemy ustalić keywords.
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.