Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Pobieranie danych ze strony
Forum PHP.pl > Forum > Przedszkole
Dizzy
No więc zrobiłem pobieranie danych ze strony, Oto mój skrypt:
  1. <?php
  2.    // getdata.php
  3.    // by ufo ;)
  4.    // get Tibia character info from tibia.com
  5.    //
  6.    // usage:
  7.    // call this script from some webbrowser giving character name as a GET parameter
  8.    //
  9.    // example:
  10.    // getdata.php?char=Bubble
  11.    // getdata.php?char=Eternal Oblivion
  12.    
  13.    $character = urlencode($_GET[char]);
  14.    
  15.    // patterns
  16.    $name = "|Name:</TD><TD>([^<]+)?</TD>|i";
  17.    $sex = "|Sex:</TD><TD>([^<]+)?</TD>|i";
  18.    $profession = "|Profession:</TD><TD>([^<]+)?</TD>|i";
  19.    $level = "|Level:</TD><TD>([^<]+)?</TD>|i";
  20.    $world = "|World:</TD><TD>([^<]+)?</TD>|i";
  21.    $residence = "|Residence:</TD><TD>([^<]+)?</TD>|i";
  22.    $house = "|House:</TD><TD>([^<]+)?</TD>|i";
  23.    $guild = "|Guild[^<]*?</TD><TD>([^<]+)?<A[^>]*?>([^<]+)?</A></TD>|i";
  24.    $account = "|Account[^<]*?</TD><TD>([^<]+)?</TD>|i";
  25.    
  26.    // get page source
  27.    $page = file_get_contents("http://www.tibia.com/community/?subtopic=characters&name=$character");
  28.    
  29.    // Formatowanie
  30.    
  31.    $dom = "|House:</TD><TD>([^<]+)?</TD>|i";
  32.    $dom = explode(" ");
  33.    // look for matches
  34.    preg_match($name, $page, $name);
  35.    preg_match($sex, $page, $sex);
  36.    preg_match($profession, $page, $profession);
  37.    preg_match($level, $page, $level);
  38.    preg_match($world, $page, $world);
  39.    preg_match($residence, $page, $residence);
  40.    preg_match($house, $page, $house);
  41.    preg_match($guild, $page, $guild);
  42.    preg_match($account, $page, $account);
  43.    
  44.    // show captured data
  45.    echo "Character name: [". $name[1] ."]<br>";
  46.    echo "Sex: [". $sex[1] ."]<br>";
  47.    echo "Profession: [". $profession[1] ."]<br>";
  48.    echo "Level: [". $level[1] ."]<br>";
  49.    echo "World: [". $world[1] ."]<br>";
  50.    echo "Residence: [". $residence[1] ."]<br>";
  51.    echo "House: [". ($house[1] == '' ? 'None' : $house[1]) ."]<br>";
  52.    echo "Guild membership: [". ($guild[1] . $guild[2] == '' ? 'None' : $guild[1] . $guild[2]) ."]<br>";
  53.    echo "Account Status: [". $account[1] ."]<br>";
  54.    
  55.    $site="http://erig.net/house/$world[1]/$dom[1]";
  56.    $tekst=file_get_contents($site);
  57.  
  58.    preg_match ('|<IMG SRC="http://static.tibia.com/images/houses/(.*)" WIDTH=150 HEIGHT=150>|U', $tekst, $token);
  59.    echo'<IMG SRC="http://static.tibia.com/images/houses/'.$token[1].'" WIDTH=150 HEIGHT=150>';
  60.        
  61. ?>
  62.  
  63.  
  64. <a href="#" onmouseover="return escape('<img src=http://static.tibia.com/images/houses/house_50201.jpg width=192 height=192>')">Castle Street 1 </a>
  65. <script language="JavaScript" type="text/javascript" src="wz_tooltip.js"></script>


I chce by pobierało adres obrazka domQu lecz niestety niewiem jak zrobic by pobierało adres obrazka tzn:
<img src=http://static.tibia.com/images/houses/house_50201.jpg width=192 height=192>')">
Obrazek ma pobierac z :
http://erig.net/house/Empera/CastleStreet1
Lecz niestety po wejsciu na tą strone przekiorywuje na inną :-/
wookieb
No włąsnie. File_get_contents tego nei zalatwi. Musisz użyc curla z opcja
CURLOPT_FOLLOWLOCATION
http://pl.php.net/manual/pl/function.curl-setopt.php
Spowoduje to, że jeżeli bedzize jakieś przekierowanie to odczyta strone z przekierowania.
Tutoriali do curla jest sporo. Chociażby na php.pl i nat ym forum też



// BTW nei zauwazylem ze masz juz podobny temat
Dizzy
Tylko jak to zastosować... :-/
wookieb
No i zastosować curla TAK jak się go stosuje. W linku który ci podałem masz w c... przykładów
zapomniales jeszcze poprawic
Kod
preg_match ('|<IMG SRC="http://static.tibia.com/images/houses/(.*?)" WIDTH=150 HEIGHT=150>|U', $tekst, $token);
Dizzy
Może napisał byc tu któryś z przykładów który będę mógł zastosować ?
wookieb
Nie. Bo nie zepsuło mi się kopiowanie i nie moge ci wkleić kodów z http://pl.php.net/manual/pl/function.curl-setopt.php
Wiec może przeczytasz tą stronę i chociaż SPRÓBUJESZ coś zrobic?
Dizzy
Słabo znam angielski niestety ...
wookieb
Cytat
Tutoriali do curla jest sporo. Chociażby na php.pl i na tym forum też


A php.pl jest po polsku
Dizzy
Nic z tego nie rozumiem O_o.
(Chodzi o CURL)
wookieb
Wiec przykro mi. Masz pecha. Albo się wysilisz i przeczytasz http://wortal.php.pl/phppl/wortal/artykuly...pierwszy_skrypt ALBO przejrzysz to forum. Rusz dupe.

Poza tym piszesz ze słabo znasz angielski. A komentarze do twojego skryptu (szczegolnie te u góry) to tez pewnie "zrobiłeś" sam?
Dizzy
Czy to mi pomoze?
  1. <?php
  2. $ch = curl_init('http://localhost/curl/site.php');
  3. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  4. echo curl_exec($ch);
  5. curl_close($ch);
  6. ?>
wookieb
A spróbowałeś to odpalić??
A wiesz co jest w linku? http://localhost/curl/site.php
I błagam cie... Nie pisz, ze TY zrobiłeś skrypt z pierwszego postu

I jeszcze jedna prośba. Wykaż się naprawdę odrobiną samodzielności. Naprawdę nie sprawia mi przyjemności atakowanie cie, że jesteś leniem, ze podszywasz się pod czyjąś pracę i w ogóle. O wiele lepiej pomaga się osobie która NAPRAWDĘ coś zrobi w temacie a nie wklei byle coś i żebra "zróbcie mi" posługując się dennymi wymówkami typu "nie znam angielskiego", "nie rozumiem" tym bardziej, że jest na ten temat w cholere tutoriali.
Dizzy
wookieb, wiem co jest w linku ;] ...
No skrypt nie ja zrobiłem ale zmodyfikowałem w dużym stopniu...

Zadając to pytanie chciałem się dowiedzieć czy jest dobra struktura skryptu ;s
wookieb
Zależy jak patrzeć. Doszedłes w końcu jak działa curl? Odpaliłeś parę przykładów z linków, które ci podałem?
Dizzy
Takkk tongue.gif
Tylko teraz muszę zrobić:
  1. <?php
  2. $site="http://erig.net/house/$world[1]/$dom[1]";
  3.    $tekst=file_get_contents($site);
  4.  
  5.    $ch = curl_init('$site');
  6.          curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  7.    echo curl_exec($ch);
  8.         curl_close($ch);
  9.        
  10.  
  11.    preg_match ('|<IMG SRC="http://static.tibia.com/images/houses/(.*?)" WIDTH=150 HEIGHT=150>|U', $tekst, $token);
  12.    echo'<IMG SRC="http://static.tibia.com/images/houses/'.$token[1].'" WIDTH=150 HEIGHT=150>';
  13. ?>

Musi pobierac '.$token[1].' (Adres obrazka)
wookieb
Po co ci?
  1. <?php
  2. $tekst=file_get_contents($site);
  3. ?>


  1. <?php
  2. $ch = curl_init('$site');
  3. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  4. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  5. $tekst=curl_exec($ch);
  6. curl_close($ch);
  7. ?>
Dizzy
Teraz jeszcze tylko aby pobierało adres obrazka... ;/
wookieb
A to zobacz sobie co masz w $tekst i jak to sie przerzuca na twoje wyrażenie regularne.
Dizzy
No tak ale adres wygląda w ten sposób:
http://static.tibia.com/images/houses/house_50201.jpg

A więc :
<IMG SRC="http://static.tibia.com/images/houses/'.$token[1].'" WIDTH=150 HEIGHT=150>

I $token musi zostac pobrany ... ;/
wookieb
Ale CZY(?!) sprawdziłeś co jest w $tekst?
Echem, var_dumpem czy tez inna funkcja?
Dizzy
curl_exec($ch)
wookieb
Nie no stary musze to w końcu powiedziec. Jesteś tak niesamowicie niekumaty, że ty nawet nie rozumiesz co się do ciebie mówi
PO curl_exec
Kod
var_dump($tekst);


I pokaż teraz cały swoj kod...
Dizzy
No jest niestety: "bool(false)"
wookieb
Jeszcze to popraw...
Kod
$ch = curl_init($site);

U mnei też była literówka.
Dizzy
string(85) " Invalid house id. "
wookieb
Pokaż zmienna $site.
Podpowiem ...\
Kod
var_dump($site);
Dizzy
string(30) "http://erig.net/house/Empera/H

Źle pobiera $house :/

[Fortune Wing 3 (Yalahar) is paid until Feb 16 2009]
wookieb
Kod
$site="http://erig.net/house/$world[1]/".$house[1];
Dizzy
Kod teraz wygląda tak:
  1. <?php
  2.    // getdata.php
  3.    // by ufo ;)
  4.    // get Tibia character info from tibia.com
  5.    //
  6.    // usage:
  7.    // call this script from some webbrowser giving character name as a GET parameter
  8.    //
  9.    // example:
  10.    // getdata.php?char=Bubble
  11.    // getdata.php?char=Eternal Oblivion
  12.    
  13.    $character = urlencode($_GET[char]);
  14.    
  15.    // patterns
  16.    $name = "|Name:</TD><TD>([^<]+)?</TD>|i";
  17.    $sex = "|Sex:</TD><TD>([^<]+)?</TD>|i";
  18.    $profession = "|Profession:</TD><TD>([^<]+)?</TD>|i";
  19.    $level = "|Level:</TD><TD>([^<]+)?</TD>|i";
  20.    $world = "|World:</TD><TD>([^<]+)?</TD>|i";
  21.    $residence = "|Residence:</TD><TD>([^<]+)?</TD>|i";
  22.    $house = "|House:</TD><TD>([^<]+)?</TD>|i";
  23.    $guild = "|Guild[^<]*?</TD><TD>([^<]+)?<A[^>]*?>([^<]+)?</A></TD>|i";
  24.    $account = "|Account[^<]*?</TD><TD>([^<]+)?</TD>|i";
  25.    
  26.    // get page source
  27.    $page = file_get_contents("http://www.tibia.com/community/?subtopic=characters&name=$character");
  28.    
  29.    // Formatowanie
  30.    
  31.    $dom = "|House:</TD><TD>([^<]+)?<A[^>]*?>([^<]+)?</A></TD>|i";
  32.    // look for matches
  33.    preg_match($name, $page, $name);
  34.    preg_match($sex, $page, $sex);
  35.    preg_match($profession, $page, $profession);
  36.    preg_match($level, $page, $level);
  37.    preg_match($world, $page, $world);
  38.    preg_match($residence, $page, $residence);
  39.    preg_match($house, $page, $house);
  40.    preg_match($guild, $page, $guild);
  41.    preg_match($account, $page, $account);
  42.    
  43.    // show captured data
  44.    echo "Character name: [". $name[1] ."]<br>";
  45.    echo "Sex: [". $sex[1] ."]<br>";
  46.    echo "Profession: [". $profession[1] ."]<br>";
  47.    echo "Level: [". $level[1] ."]<br>";
  48.    echo "World: [". $world[1] ."]<br>";
  49.    echo "Residence: [". $residence[1] ."]<br>";
  50.    echo "House: [". ($house[1] == '' ? 'None' : $house[1]) ."]<br>";
  51.    echo "Guild membership: [". ($guild[1] . $guild[2] == '' ? 'None' : $guild[1] . $guild[2]) ."]<br>";
  52.    echo "Account Status: [". $account[1] ."]<br>";
  53.    
  54.    $site="http://erig.net/house/$world[1]/".$house[1];
  55.  
  56.    $ch = curl_init($site);
  57.    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  58.    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  59.    $tekst=curl_exec($ch);
  60.    var_dump($tekst);
  61.    var_dump($site);
  62.    curl_close($ch);
  63.        
  64.    $token = "<img=([^<]+)?>|i";
  65.  
  66.    preg_match ('|<IMG SRC="http://static.tibia.com/images/houses/(.*?)" WIDTH=150 HEIGHT=150>|U', $tekst, $token);
  67.    echo'<IMG SRC="http://static.tibia.com/images/houses/'.$token[1].'" WIDTH=150 HEIGHT=150>';
  68.        print_r($token)
  69. ?>
  70.  
  71.  
  72. <a href="#" onmouseover="return escape('<img src=http://static.tibia.com/images/houses/house_50201.jpg width=192 height=192>')">Castle Street 1 </a>
  73. <script language="JavaScript" type="text/javascript" src="wz_tooltip.js"></script>
wookieb
  1. <?php
  2. preg_match('/(.*?)(/', $house[1], $dom);
  3.    
  4.   $site="http://erig.net/house/$world[1]/".str_replace(' ', '', $dom[1]);
  5.    
  6.   $ch = curl_init($site);
  7.   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  8.   $tekst=curl_exec($ch);
  9.    
  10.    if(preg_match_all('/<input type="hidden" name="(.*?)" value="(.*?)" />/', $tekst, $postData, PREG_SET_ORDER))
  11.    {
  12.        $post=array();
  13.        
  14.        foreach($postData as $dt)
  15.        {
  16.            $post[$dt[1]]=$dt[2];
  17.        }
  18.        
  19.        $site='http://www.tibia.com/community/?subtopic=houses&page=view';
  20.        
  21.        $ch = curl_init($site);
  22.        curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
  23.        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  24.        $tekst=curl_exec($ch);
  25.        
  26.        preg_match ('|<IMG SRC="http://static.tibia.com/images/houses/(.*?)" WIDTH=150 HEIGHT=150>|U', $tekst, $token);
  27.        echo'<IMG SRC="http://static.tibia.com/images/houses/'.$token[1].'" WIDTH=150 HEIGHT=150>';
  28.        
  29.    }
  30.    else
  31.    {
  32.        echo 'BEZDOMNY';
  33.    }
  34. ?>
Dizzy
Ooo działa, wielkie dzięki za pomoc. smile.gif
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.