Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Działanie porównywarek cen
Forum PHP.pl > Forum > PHP
zurek
Ostatnio bardzo popularne są wszelkiego typu porównywarki cen typu ceneo czy skąpiec. Chciałbym zrobić coś podobnego, z tym że w wiele mniejszym zakresie i w dla innej specjalizacji. Mam pytanie: jak zintegrować sklepy internetowe innych firm ze skryptami PHP?
zimi
z tego co wiem porównywarki cen dogadują się ze sklepami że te wyślą im odpowiednio zrobiony XML z którego wyciągają sobie potem dane i zapisują do bazy... tu nie ma wielkiej filozofii...
jeśli byś się nie dogadał i nie masz XML to masz już problem
bo musiałbyś przeszukiwać stronę sklepów, wiedzieć pod jakimi adresami szukać itp.
a wszelkie zmiany w grafie bądź innych rzeczach powodują że masz robotę od nowa...
a zatem musisz się dogadać aby sklepy z których będziesz pobierał informacje generowały XML dla Twojego skryptu
obsługa XML w PHP nie jest już zbyt trudna... są metody DOM-owe... poszukaj w manualu
zurek
Dzięki smile.gif A wyszukiwarki w takich porównywarkach wyszukują tylko według rekordów w bazie danych, tzn., że jak wpisze "AMD Athlon 3500+" to będzie szukał takiej nazwy na podstawie np. kolumny nazwa w bazie danych? Może działa to w jakiś bardziej skomplikowany sposób
zimi
nie ma powodu by działało to na bardziej skomplikowanych zasadach... chyba że chcesz to jeszcze podzielić: producent, model, seria, klasa etc.
cała idea polega na tym że przepisujesz dane które dostałeś z xml do bazy, a w bazie wyszukujesz... tyle...
Cysiaczek
Musisz mieć tak zaprojektowany system, aby obsługiwał różne typy rzeczy - od komputerów po ziemniaki. To dużo pracy i chyba przerasta możliwości jednego człowieka. Trzeba to potem nadzorować, dbać o klientów etc.

Pozdrawiam.
zurek
Nie myślałem raczej o czymś tak dużym. Porównywarka będzie dotyczyła jednej, konkretnej kategorii produktów.

Mam jeszcze jedno pytanie związane z wyszukiwaniem prosuktów. Przecież jak użytkownik wpisze np. "AMD Athlon 64 3000+ AM2", a w bazie daych są tylko załużmy "AMD Athlon 64". Zapytanie do bazy danych musi być zbyt precyzujne sad.gif Przy bardziej skomplikowanych nazwach takie coś wymięka. To musi działać w jakiś inny sposób, jaki?
Cotter
Zapraszam tutaj (rozwiązuje twój problem dotyczący podobnych wyrażeń):
http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

Temat wyszukiwania i indeksowania informacji jest bardzo obszerny i możnaby mówić o nim przez pół roku, jak nie więcej. Jeżeli chcesz zgłębić ten temat to zachęcam do postudiowania szeroko dostępnej literatury
zurek
Integracja sklepów internetowych z porównywarkami cen odbywa się z DOM XML (czy coś w tym stylu). Długo szukałem o tym w Internecie, ale nic sensownego nie znalazłem poza wersją angielską Manuala, z której nic mimo tego nie rozumiem. Czy ktoś mógłby mi to dogłębniej wytłumaczyć, lub dać jakiś przykład skryptu do przeanalizowania?

Acha, jeszcze jedno. Jakie dane powinny być przekazane w tym pliku XML, jak to się w ogóle rozgrywa? Są jakieś moduły w tych sklepach internetowych do tworzenia takich plików? Widziałem demo jednego takiego sklepu, ale jest tylko jakieś pole na identyfikator Skąpca (czy coś takiego).
zimi
zobacz sobie kurs DOM: http://htmlhelp.shl.pl/dom/obiekty/index.php
a potem spróbuj zakumać jego implementację w PHP
zurek
Chodzi o jakieś połączenie PHP z JavaScript? Z tego co tam czytałem te wszystkie polecenia są do JS. Z samym DOM nie będzie problemu, bo przypomniałem sobie, że mam książkę o JS i tam jest to właśnie opisane. Nie wiem jednak jak to wszystko połączyć z PHP.

Nie śmiejcie się, jeżeli moja teza na temat JS+PHP jest głupia, bo nie jestem ekspertem w tej dziedzinie, a chciałbym się czegoś nauczyć.
Cotter
Powiem ci szczerze, że pytania zadawane przez ciebie świadczą o tym, iż nie masz pojęcia co chcesz osiągnąć oraz jak to zrobić. Proponuję zacząć od pogłębienia wiedzy na ten temat. Najpierw trzeba umieć solidnie pisać strony czyli znać dobrze przynajmniej: html, php oraz javascript. W następnej kolejności proponuję ci przeczytanie jakiś książek o programowaniu obiektowym oraz planowaniu i zarządzaniu projektami informatycznymi. Kiedy przez to przebrniesz, proponuję zobaczyć różne rozwiązania dotyczące komunikacji pomiędzy programami sieciowymi. Potem możemy wracać do dyskusji.

Proszę nie obrażaj się - takie jest moje wrażenie i szczerze ci to mówię.
zurek
Cytat(Cotter @ 9.01.2008, 23:05:33 ) *
Powiem ci szczerze, że pytania zadawane przez ciebie świadczą o tym, iż nie masz pojęcia co chcesz osiągnąć oraz jak to zrobić. Proponuję zacząć od pogłębienia wiedzy na ten temat. Najpierw trzeba umieć solidnie pisać strony czyli znać dobrze przynajmniej: html, php oraz javascript. W następnej kolejności proponuję ci przeczytanie jakiś książek o programowaniu obiektowym oraz planowaniu i zarządzaniu projektami informatycznymi. Kiedy przez to przebrniesz, proponuję zobaczyć różne rozwiązania dotyczące komunikacji pomiędzy programami sieciowymi. Potem możemy wracać do dyskusji.

Proszę nie obrażaj się - takie jest moje wrażenie i szczerze ci to mówię.


Nie mogę ci przyznać racji w kwestji PHP, że jestem w tym zupełnie zielony. Jeżeli sam już zrobiłem kilka porządnych CMS'ów, systemy rejestracji i logowania to jakąś wiedzę na ten temat mam (może nie tak rozległą, ale wystarczającą). Nie podjąłbym się takiej sprawy jak porównywarka cen, gdybym nie miał o tym zielonego pojęcia. Można jednak wywnioskować z powyższych moich wypowiedzi, że jakieś braki tam są. Trochę przesadziłeś z HTML'em, bo gdybym go nie znał, to nie widziałbym o PHP, JS itp..

Trochę słów krytyki to dobra sprawa;)

A powracając do sprawy porównywarki, proszę o dalsze odpowiedzi i dziękuję za dotychczas udzielone:)
zimi
no to jak znasz DOM i w JS umiesz wybrać z drzewa dokumentu HTML (czy też XML) interesujące Ciebie węzły
to zobacz do manuala PHP w dziale z DOM i szukaj metod których użyłbyś działając z JS
różnica między nazwami z DOM-u zaimplementowanego w JS i PHP jest taka, że duże litery zamieniają się w podkreślniki i małe litery
czyli jeśli metoda w JS nazywała się getElementById to w PHP nazywa się get_element_by_id
zurek
Jeszcze jedno pytanie dotyczące porównywarek wstydnis.gif Czy ktoś może wie jak wyglądają takie przykładowe pliku XML i jakie dane powinny zawierać? Skąpiec np. wymaga:

Cytat
Każdy produkt musi posiadać swój identyfikator

Do każdego produktu musi prowadzić URL różniący się tylko identyfikatorem produktu

Do każdej kategorii produktów musi prowadzić URL różniący się tylko identyfikatorem kategorii

Na stronie kategorii produkty powinny być prezentowane w sposób umożliwiający odczytanie dla każdego z nich: ceny, opisu i identyfikatora produktu


Poza tym mam taki skrypt:

  1. <?php
  2. // The file test.xml contains an XML document with a root element
  3. // and at least an element /[root]/title.
  4.  
  5. if (file_exists('example.xml')) {
  6. $xml = simplexml_load_file('example.xml');
  7.  
  8. var_dump($xml);
  9.  
  10.  
  11. } else {
  12. exit('Failed to open example.xml.');
  13. }
  14. ?>


Tylko on mi wypisuje to jakoś inaczej:

Cytat
object(SimpleXMLElement)#1 (2) { ["@attributes"]=> array(1) { ["version"]=> string(3) "2.0" } ["channel"]=> object(SimpleXMLElement)#2 (9) { ["title"]=> ...


Wiem, że jakoś się da wyłowić te dane i wklepać do bazy danych, ale jak?

Z góry dzięki za wierną pomoc zimi'emu, Cotter'owi i cysiaczk'owi smile.gif
Cotter
Przykładowe pobieranie danych od sklepu:

Sklep ma napisany modulik, który generuje w formie pliku XML informacje o sprzedawanych produktach. Plik XML jest dostępny pod umówionym adresem np: http://sklep.pl/porownywarka.xml. Z drugiej strony twój serwis posiada robota (program na przykład napisany w Javie) chodzącego po sklepach, z którymi masz umowę i regularnie odczytuje informacje pobrane z plików xml. Dane są przetwarzane przez robota i aktualizowane w twojej bazie danych. Z bazy danych do twojego serwisu jest droga prosta, bo wystarczy je zczytywać i wyświetlać użytkownikom. To jakie dane są ci potrzebne zależy od twoich wymagań i funkcjonalności jaką chcesz zawrzeć. Na pewno będziesz potrzebował informacje takie jak: cena, nazwa, link do strony z produktem (w sklepie). Oczywiście będzie pewnie dużo więcej informacji potrzebnych.

Przykładowy XML mógłby zawierać takie elementy (pewnie będzie ich więcej):
Kod
<produkty>
    <produkt id="1">
        <nazwa>Koszulka</nazwa>
        <url>http://sklep.pl/produkt.php?id=1</url>
        <cena>15.00</cena>
    </produkt>
    <produkt id="2">
        ...
    </produkt>
    ...
</produkty>


Jeżeli chodzi o przetwarzanie plików XML to trzeba to robić jak powiedział zimi: Szukaj pod xml i php.
zurek
Problem w tym, że nie mam takiego robota, napisanego w Javie i nie mam pojęcia jak go napisać. Dzięki Cotter za wytłumaczenie mi jak to mniej więcej działa. Nie wiecie jak powinien wyglądać taki program (robot)?

Mam taki przykładowy link do takiego dema sklepu internetowego, do strony gdzie są dane dla Skąpca. Jak "wyłowić" te dane?
zimi
z każdym topic-iem coraz bardziej zgadzam się z tezą że nie masz pojęcia o czym piszesz
Cytat
Z samym DOM nie będzie problemu

piszesz że znasz DOM, więc istotę jego działania również

jak nie znajdziesz w manualu funkcji/klas odpowiadających za wybieranie węzłów o określonych identyfikatorach, pobieranie nazwy węzła, jego zawartości, kolekcji jego dzieci, kolejnego potomka, etc. (a więc nazwy które powinny być Ci znane bo to nazwy DOM-owe które na dodatek wszystkie znajdują się w dziale: XXX. DOM Functions), to moim zdaniem powinno być Ci co najwyżej wstyd że marnujesz czyjś czas na czytanie tych bezproduktywnych postów

przeczytaj ww rozdział manuala, wygeneruj (lub napisz bo nie musi on być duży) bądź znajdź plik xml struktury wspomnianej przez @Cotter bo taki schemat jest chyba najlepszy dla tego typu działań i przećwicz wybieranie elementów
zurek
Dobrze, przyznam, że byłem trochę leniwy i zbyt bardzo wykorzystywałem czas użytkowników. Teraz mam już gotowy skrypt JS, który wyławia te dane, ale nie wiem jak wprowadzić te dane do bazy danych.

Poza tym co zrobić żeby skrypt odwiedzał te przygotowane przez sklepy strony?
zimi
skrypt JS jest Ci co najwyżej potrzebny po to żeby przepisać go na PHP
zobacz jakich metod użyłeś i przeczytaj wszystko co z nimi związane w manualu w rodziale XXX
przepisz kod na PHP, tam problemów z wprowadzeniem do bazy raczej nie będziesz miał
do cyklicznego odwiedzania adresów używaj CRON-a
do łączenia się z adresami CURL-a bądź funkcji do operacji na plikach przy odpowiednich ustawieniach serwera
file_get_contents" title="Zobacz w manualu PHP" target="_manual
zurek
Jak mam ten skrypt, to on mi wczytuje tylko dane ze znaczników ułożonych w pionie:

  1. <catitem>
  2. <catid>8872</catid>
  3. <catname>Chemutwardzalne</catname>
  4. </catitem>
  5. <catitem>
  6. <catid>9107</catid>
  7. <catname>Płynne</catname>
  8. </catitem><catitem>
  9. <catid>10443</catid>
  10. <catname>3M Espe</catname>
  11. </catitem>
  12. <catitem>
  13. <catid>10448</catid>
  14. <catname>Coltene</catname>
  15. </catitem>


Ale nie działa w poziomych:

  1. <catitem><catid>8872</catid><catname>Chemutwardzalne</catname></catitem>


A poziomo jest ułożone w pliku integracyjnym ze sklepem wstydnis.gif Skrypt:

Kod
<script type"text/javascript>

xmlDoc=loadXMLDoc("stoma.xml");var oldNode=xmlDoc.getElementsByTagName
('catitem')[0];

var newNode=oldNode.cloneNode(true);
xmlDoc.documentElement.appendChild(newNode);

var y=xmlDoc.getElementsByTagName("catname");
for (i=0;i<y.length;i++)
{
document.write(y[i].childNodes[0].nodeValue);
document.write("<br />");
}

</script>
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.