Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobieranie treści z innych stron
Forum PHP.pl > Forum > PHP
RubiX
Witam
Mam taki dziwny problem i nie wiem czy jest on możliwy do zrealizowania.
Otóż otwieram sklep internetowy i chce (w panelu administratora) mieć tak jakby statystyki porównawcze tzn
Np dodaje u mnie produkt (np. szafka drewniana calvados, cena 250 zł) i czy jest taka możliwość abym pobierał z innych stron sklepów internetowych (nazwe sklepu [to sam wpisze w bazę] i cene tego samego artykułu) oczywiście musiał bym podczas dodawania dodać adres url do tego produktu w innym sklepie ale czy jest taka możliwość aby skrypt pobierał mi cenę z innej strony www ?
Mógł bym dzięki temu na bieżąco sprawdzać ceny konkurencji (oraz ceny u mojego dostawcy czy się nie zmienia, ponieważ też ma sklep internetowy)
Czy coś takiego jest możliwe do zrealizowania ?
Pozdrawiam
zegarek84
tak jest możliwe - jednak do każdej strony trzeba by indywidualnie podejść....
Maciekbjw
No pewnie, w informatyce wszystko jest możliwe winksmiley.jpg

Tyle że jak kolega wyżej napisał, musisz podejść indywidualnie do każdego sklepu.

Poszukaj na forum było o pobieraniu treści z innych stron.

Użyj funkcji file_get_contents oraz preg_match lub preg_match_all


Powodzenia tongue.gif
RubiX
Nalazłem w necie taki kod:

  1. <?php
  2.  //wybór symbolu akcji
  3.  $symbol='AMZN';
  4.  echo "<h1>Kurs akcji o symbolu $symbol</h1>";
  5.  
  6.  //Połączenie z URL-em i odczytanie informacji
  7.  $url="http://www.amex.com/equities/listCmp/EqLCDetQuote.jsp?Product_Symbol=$symbol";
  8.  
  9.  if(!($zawartosc = file_get_contents($url)))
  10.  {
  11.    echo 'Otwarcie URL niemożliwe';
  12.    exit;
  13.  }
  14.  
  15.  //odnalezienie i wyświetlenie właściwej części strony
  16.  $wzor = '($[0-9 ]+.[0-9]+)';
  17.  
  18.  if(eregi($wzor, $zawartosc, $kurs))
  19.  {
  20.    echo "<p>Ostatni kurs akcji $symbol: ";
  21.    echo $kurs[1];
  22.    echo '</p>';
  23.  }
  24.  else
  25.  {
  26.    echo '<p>Kurs niedostępny</p>';
  27.  };
  28.  
  29.  //powiadomienie o źródle
  30.  echo '<p>'
  31.       .'Ta informacja została uzyskana z <br />'
  32.       ."<a href=\"$url\">$url</a><br />"
  33.       .'w dniu '.(date('l jS F Y g:i a T')).'</p>';
  34.  
  35. ?>


No i jakoś to dizała niemam pojęcia jak ale działa i np jak teraz przekształcić to aby pobierał mi cene z tej strony:
http://www.powerbike.pl/index.php?str=621
czyli 299 zł ?

Zrobiłem takie coś:

  1. <?php
  2.  
  3.  //Połączenie z URL-em i odczytanie informacji
  4.  $url="http://www.powerbike.pl/index.php?str=621";
  5.  
  6.  if(!($zawartosc = file_get_contents($url)))
  7.  {
  8.    echo 'Otwarcie URL niemożliwe';
  9.    exit;
  10.  }
  11.  
  12.  //odnalezienie i wyświetlenie właściwej części strony
  13.  $wzor = '(Cena: [0-9]+ zł)';
  14.  
  15.  if(eregi($wzor, $zawartosc, $kurs))
  16.  {
  17.    echo "<p>Pobrana cena: ";
  18.    echo $kurs[1];
  19.    echo '</p>';
  20.  }
  21.  else
  22.  {
  23.    echo '<p>Cena niedostępna</p>';
  24.  };
  25.  
  26.  
  27. ?>

Niestety nie działa sad.gif

Ok przeanalizowałem dokładnie tą funkcje trochę poeksperymentowałem i zrozumiałem.
Po wczytaniu pliku zrozumiałem że </strong> za ceną jest w kodzie i str_replace to usunąłem i teraz już ładnie śmiga.
A co do tych konfiguracji to wystarczy że będę miał do 3 stron tylko linki będę musiał zmieniać smile.gif
salamandra
Hmmm... a teraz moje pytanie.... czy ktos moglby mi wytlumaczyc jak dziala odnalezienie i wyświetlenie właściwej części strony ?

dokladnie to chodzi o to:
Kod
$wzor = '($[0-9 ]+.[0-9]+)';

if(eregi($wzor, $zawartosc, $kurs))

{

echo "<p>Pobrana cena: ";

echo $kurs[1];


czytalam manuala do eregi i mam wrazenie, ze zawartosc i wzor powinny byc na odwrot. Zgodnie z tym:
http://pl2.php.net/manual/pl/function.eregi.php
to pattern to zawartosc a wzor to input. Hmmm... albo czegos do konca nie rozumiem.

Ok, anyway... ale chodzi tez o to jak w danej stronie wyszukac odpowiedni tekst, bo tego nie rozumiem. OOO.... wezmy dla przykladu manuala:
http://pl2.php.net/manual/pl/function.eregi.php
jak z niego pobrac "Last updated: Fri, 20 Mar 2009" ?
sowiq
Cytat(salamandra @ 30.04.2009, 09:47:59 ) *
pattern to zawartosc a wzor to input.
int preg_match ( string pattern, string subject [, array matches [, int flags [, int offset]]]). Dla ereg (przestarzała i wolniejsza funkcja!) kolejność argumentów jest taka sama.
Pattern to wyrażenie regularne, subject to ciąg wejściowy (w którym szukasz).

Cytat(salamandra @ 30.04.2009, 09:47:59 ) *
Ok, anyway... ale chodzi tez o to jak w danej stronie wyszukac odpowiedni tekst
Poczytaj o wyrażeniach regularnych. Jest tego w necie trochę.
salamandra
Hmmm.... z tego co sie doczytalam i chce odczytac liczbe np: 199,99 to:
Kod
[0-9]+,[0-9][0-9]
a ni cholery nie chce zadzialac. Czy moze zamiasst znaku
Kod
,
musze wstawic
Kod
[+-]
ale tak tez nie dziala.
sowiq
To, co chcesz odczytać daj w nawiasy, czyli:
Kod
([0-9]+),([0-9])([0-9])
salamandra
Działa smile.gif Domo arigato gozaimasu winksmiley.jpg
Dingo
Witam,
Sprawdzałem ten skrypt i działa wyśmienicie. Jednak nie umiem pobierać innych wartości niż liczby. Jak to zrobić?

Bo normalnie jest
  1. <?php
  2. //odnalezienie i wyświetlenie właściwej części strony
  3. $wzor = '885 ([0-9]+)';
  4. ?>

No i zczytuje liczbę 12 po 885. A jak zrobić aby po nakimś tekscie zczytywało teskt?

No i jeszcze pytanie niżej.

A tak na marginesie. Ten skrypt muszę wykożystać do pobrania ze strony ostatnich cyfr z linku który jest na podanej stronie.
Jak takie coś zrobić?
Wystarczy wyświetlanie, sam przerobię dalej :].
erix
Cytat
No i zczytuje liczbę 12 po 885. A jak zrobić aby po nakimś tekscie zczytywało teskt?

To zwykłe wyrażenie regularne. Zamiast (0-9) dajesz np. (a-zA-Z).

Cytat
Jak takie coś zrobić?

Wyciągasz wcześniej kawałek przez preg_match" title="Zobacz w manualu PHP" target="_manual.

Po najprostszej linii oporu można przez np. phpQuery.

Sayonara. winksmiley.jpg
Dingo
Hmm.
Sprawdziłem tą fuknkcję. Spoko, ale jak zrobić to, aby pobierało stronę:
Cytat

Oczywiści zmienną napiszę, nie problem. Przykład:
http://allegro.pl/show_user.php?search=sm_maja
A następnie z odnośnika "o mnie" kopiuje cyfry po "?uid="
http://allegro.pl/my_page.php?uid=7122570
i zapisuje jako zmienną :] (resztę sobię dorobię sam (kopiowanie do bazy danych pod wskazany login)).

Jak takie coś zrobić.

A i jeszcze jedno:
http://pl.php.net/preg_match
  1. <?php
  2. // get host name from URL
  3. preg_match('@^(?:http://)?([^/]+)@i',
  4.    "http://www.php.net/index.html", $matches);
  5. $host = $matches[1];
  6.  
  7. // get last two segments of host name
  8. preg_match('/[^.]+.[^.]+$/', $host, $matches);
  9. echo "domain name is: {$matches[0]}\n";
  10. ?>

  1. <?php
  2. '@^(?:http://)?([^/]+)@i'
  3. ?>

O co w tym biega?
erix
Eeee, ale przecież jest API Allegro...
Dingo
To powiesz coś więcej jak uzyskać ten 'kod' mając zapisany w bazie danych login do allegro?

@Down
Szukałem, ale myślałem, że to nie to bo 1 wynik to była bibioteka do gier tongue.gif.

Poszperam dzięki :].
erix
http://pl.lmgtfy.com/?q=api+allegro
Dingo
Witam,
Przepraszam, że odświeżam tak stary temat jednak mam pytanie :].

Próbuję pobrać dane ze strony http://www.gametracker.com/server/83.143.1...k_gracza.'/
Będzie to zintegrowane z metodą post (później).
Na razie jest takie coś:
  1. <?php
  2. $nick_gracza='Kubex';
  3.        //Połączenie z URL-em i odczytanie informacji
  4.        $url='http://www.gametracker.com/server/83.143.134.178:27035/player/'.$nick_gracza.'/';
  5.  
  6.        if(!($zawartosc = file_get_contents($url)))
  7.        {
  8.        echo 'Błąd strony www.gametracker.com';
  9.        exit;
  10.        }
  11.  
  12.        //odnalezienie i wyświetlenie właściwej części strony
  13.        $wzor = '([0-1].[0-9])';
  14.        //Lub (a-zA-Z)
  15.  
  16.        if(eregi($wzor, $zawartosc, $wynik))
  17.        {
  18.        echo '<p>Score per Minute: ';
  19.        echo $wynik[0];
  20.        echo '</p>';
  21.        }
  22.        else
  23.        {
  24.        echo '<p>Nieudało się zczytać ilości fragów na sekundę!</p>';
  25.        };
  26. ?>


I chcę, aby sczytywało "Score per Minute: 0.6" jak to zapisać w zmiennej $wzor questionmark.gif
Wicepsik
  1. <?php
  2. $nick_gracza='Kubex';
  3.        //Połączenie z URL-em i odczytanie informacji
  4.        $url='http://www.gametracker.com/server/83.143.134.178:27035/player/'.$nick_gracza.'/';
  5.  
  6.        if(!($zawartosc = file_get_contents($url)))
  7.        {
  8.        echo 'Błąd strony www.gametracker.com';
  9.        exit;
  10.        }
  11.  
  12.        //odnalezienie i wyświetlenie właściwej części strony
  13.        $preg = '([0-1].[0-9])';
  14.        //Lub (a-zA-Z)
  15.  
  16.        if(eregi($preg, $zawartosc, $wynik))
  17.        {
  18.        $wzor = $wynik[0]; // zmienna wzor to wynik
  19.        echo '<p>Score per Minute: ';
  20.        echo $wynik[0];
  21.        echo '</p>';
  22.        }
  23.        else
  24.        {
  25.        echo '<p>Nieudało się zczytać ilości fragów na sekundę!</p>';
  26.        };
  27. ?>
Dingo
No właśnie nie! Wyświetla 1.0!!
A powinno być 0.6
Już próbowałem wszystkiego -.-

Zobacz ten kod (wyświetl sobie)
  1. <?php
  2. $nick_gracza='Kubex';
  3.       //Połączenie z URL-em i odczytanie informacji
  4.       $url='http://www.gametracker.com/server/83.143.134.178:27035/player/'.$nick_gracza.'/';
  5.  
  6.       if(!($zawartosc = file_get_contents($url)))
  7.       {
  8.       echo 'Błąd strony www.gametracker.com';
  9.       exit;
  10.       }
  11.  
  12.       //odnalezienie i wyświetlenie właściwej części strony
  13.       $preg = '([0-1].[0-9])';
  14.       //Lub (a-zA-Z)
  15.  
  16.       if(eregi($preg, $zawartosc, $wynik))
  17.       {
  18.       $wzor = $wynik[0]; // zmienna wzor to wynik
  19.       echo '<p>Score per Minute: ';
  20.       echo ''.$wynik[0].'<br>';
  21.       echo ''.$wynik[1].'<br>';
  22.       echo ''.$wynik[2].'<br>';
  23.       echo ''.$wynik[3].'<br>';
  24.       echo ''.$wynik[4].'<br>';
  25.       echo ''.$wynik[5].'<br>';
  26.       echo ''.$wynik[6].'<br>';
  27.       echo ''.$wynik[7].'<br>';
  28.       echo ''.$wynik[8].'<br>';
  29.       echo ''.$wynik[9].'<br>';
  30.       echo ''.$wynik[10].'<br>';
  31.       echo '</p>';
  32.       }
  33.       else
  34.       {
  35.       echo '<p>Nieudało się zczytać ilości fragów na sekundę!</p>';
  36.       };
  37. ?>


$wynik[0] = 1.0
$wynik[1] = 1.0
Dalej wyników nie ma sad.gif.


@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Może ktoś pomoże zapisać mi, aby ściągało tym sposobem?
  1. <?php
  2. $nick_gracza='ReSe';
  3. $ch = curl_init("http://www.gametracker.com/server/83.143.134.178:27035/player/".$nick_gracza."/");
  4. curl_setopt($ch, CURLOPT_USERAGENT, "Internet Explorer");
  5.  
  6.  
  7. curl_exec($ch);
  8. curl_close($ch);
  9.  
  10. $str = ob_get_contents();
  11.  
  12. preg_match('/<body>(.*?)</body>/is', $str, $byname);
  13. preg_match_all('/<span class=\"item_color_title\">.*?</span>(.*?)<br/>/is',$byname[0], $data_z);
  14.  
  15. $data = array();
  16. for($i = 0; $i < count ($data_z[1]); $i++)
  17. {
  18.   $zmiana = $data_z[1][$i];
  19.   $data []= array($zmiana);
  20. }
  21. foreach ($data as $pokaz)
  22. {
  23.   echo iconv("ISO-8859-2","UTF-8", $pokaz[0]);
  24. }
  25. ?>


Kod HTML:
  1. <span class="item_color_title">
  2. Score per Minute:
  3. </span>
  4. 0.6
  5. <br/>









@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Witam,
Poradziałem sobię tym :]
  1. <?php
  2.  
  3.    $zawartosc_zdalnej_strony = file_get_contents('http://www.gametracker.com/server/83.143.134.178:27035/player/Kubex/');
  4.    
  5.    $poczatek = strpos($zawartosc_zdalnej_strony, 'Minute:') + 7;
  6.    $koniec = strpos($zawartosc_zdalnej_strony, 'Rank');
  7.    $szukany_fragment = substr($zawartosc_zdalnej_strony, $poczatek, $koniec-$poczatek);    
  8.    
  9.    echo "$szukany_fragment";
  10.  
  11. ?>


Niezmodyfikowane:
  1. <?php
  2.  
  3.    $zawartosc_zdalnej_strony = file_get_contents('http://www.biblia.pl/SB/KL/2008/06/20080626.htm#GORA');
  4.    
  5.    $poczatek = strpos($zawartosc_zdalnej_strony, 'PIERWSZE CZYTANIE') + 1;
  6.    $koniec = strpos($zawartosc_zdalnej_strony, 'Oto słowo Boże');
  7.    $szukany_fragment = substr($zawartosc_zdalnej_strony, $poczatek, $koniec-$poczatek+1);    
  8.    
  9.    echo "$szukany_fragment";
  10.  
  11. ?>






















888888888888888888888888888888888888888888888888888888888888888
Witam,
Nadal mam problem.
Przy użyciu tego skryptu (powyżej) ładnie mi wyświetla to co chce, jednak w kodzie strony są niepotrzebne mi znaczki HTML. Jak ich się pozbyć, aby taki wynik wpisać do bazy danych (MySQL)?

Cytat
</span>
0.6
<br/>
<span class="item_color_title">

Dokładnie coś takiego jest.

Próbowałem tak, ale to nie pomaga:
  1. <?php
  2. $trans = array("
  3.            </span>" => "");
  4.        echo strtr($szukany_fragment, $trans);
  5. ?>


Rozwiązałem w pewnym sensie :].
  1. <?php
  2. $szukany_fragment = strip_tags($szukany_fragment);  
  3.        $szukany_fragment = str_replace('    ', '', $szukany_fragment);
  4. ?>
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.