Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] preg match all - maly problem.
garfieldmaxx
post
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 18.07.2010

Ostrzeżenie: (0%)
-----


Od razu uprzedzam, ze problem moze byc dla was trywialny. Na swoje usprawiedliwienie mam to ze nigdy nie uczylem sie zadnego jezyka programowania, a ten skrypt PHP probuje pisac uczac sie tylko tego co mi potrzebne zeby dzialal. biggrin.gif

Otoz chce zczytac pewne dane ze strony www. Z pomoca osob z IRCa doszedlem do momemtu w ktorym sukcesywnie udalo mi sie dobrac to wspomnianej juz strony za pomoca CURL. Wiem tez ze musze uzyc preg match all, aby przechwycic interesujace mnie dane.

Problem w tym, ze pomimo moich wysilkow strona jest zawsze pusta. Podejrzewam, ze moje zapytanie jest bledne, i dlatego skrypt niczego nie zwraca.. ocencie sami. Wyrazenie regularne sa dla mnie trudnym orzechem do rozgryzienia, wiec jesli ktos poswieci troche czasu na wytlumaczenie mi tego zagadnienia, bede bardzo wdzieczny smile.gif



Strona jest bardzo dluga, a mnie interesuja tylko te dane:

  1. <td class="jm_salary">
  2. <strong>7</strong><sup>.48 <strong>CAD</strong></sup>
  3. </td>

Z powyzszego kawalka kodu chcialbym wydostac 7.48 CAD.



Z gory dziekuje za wszelka udzielona mi pomoc smile.gif



  1.  
  2. <?php
  3. curl_login('http://www.erepublik.com/en/login','_token=-------------------------------------------------','','off');
  4.  
  5. $linkrt = curl_grab_page('http://economy.erepublik.com/en/market/job/23/all/1/0/desc','','off');
  6.  
  7. preg_match_all('#<td class="jm_salary">
  8. <strong>.</strong><sup>.* <strong>CAD</strong></sup>
  9. </td>#',
  10. $linkrt,
  11. $out, PREG_PATTERN_ORDER);
  12.  
  13. echo $out[0][0];
  14. echo $out[1][0];
  15. echo $out[2][0];
  16. echo $out[3][0];
  17. echo $out[4][0];
  18. echo $out[4][0];
  19. echo $out[5][0];
  20. echo $out[6][0];
  21. echo $out[7][0];
  22.  
  23.  
  24.  
  25.  
  26. //to jest ta nieistotna, dzialajaca czesc skryptu CURL
  27.  
  28. function curl_login($url,$data,$proxy,$proxystatus){
  29. $fp = fopen("cookie.txt", "w");
  30. fclose($fp);
  31. $login = curl_init();
  32. curl_setopt($login, CURLOPT_COOKIEJAR, "cookie.txt");
  33. curl_setopt($login, CURLOPT_COOKIEFILE, "cookie.txt");
  34. curl_setopt($login, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
  35. curl_setopt($login, CURLOPT_TIMEOUT, 40);
  36. curl_setopt($login, CURLOPT_RETURNTRANSFER, TRUE);
  37. if ($proxystatus == 'on') {
  38. curl_setopt($login, CURLOPT_SSL_VERIFYHOST, FALSE);
  39. curl_setopt($login, CURLOPT_HTTPPROXYTUNNEL, TRUE);
  40. curl_setopt($login, CURLOPT_PROXY, $proxy);
  41. }
  42. curl_setopt($login, CURLOPT_URL, $url);
  43. curl_setopt($login, CURLOPT_HEADER, TRUE);
  44. curl_setopt($login, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
  45. curl_setopt($login, CURLOPT_FOLLOWLOCATION, TRUE);
  46. curl_setopt($login, CURLOPT_POST, TRUE);
  47. curl_setopt($login, CURLOPT_POSTFIELDS, $data);
  48. ob_start(); // prevent any output
  49. return curl_exec ($login); // execute the curl command
  50. ob_end_clean(); // stop preventing output
  51. curl_close ($login);
  52. unset($login);
  53. }
  54.  
  55. function curl_grab_page($site,$proxy,$proxystatus){
  56. $ch = curl_init();
  57. curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
  58. if ($proxystatus == 'on') {
  59. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
  60. curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, TRUE);
  61. curl_setopt($ch, CURLOPT_PROXY, $proxy);
  62. }
  63. curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
  64. curl_setopt($ch, CURLOPT_URL, $site);
  65. ob_start(); // prevent any output
  66. return curl_exec ($ch); // execute the curl command
  67. ob_end_clean(); // stop preventing output
  68. curl_close ($ch);
  69. }
  70.  
  71. ?>

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
Neo
post
Post #2





Grupa: Zarejestrowani
Postów: 43
Pomógł: 9
Dołączył: 8.08.2009
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


  1. #<td class="jm_salary">
  2. <strong>(\d+)</strong><sup>\.(\d+)<strong>CAD</strong></sup>
  3. </td>#s


Ten post edytował Neo 18.07.2010, 18:48:15
Go to the top of the page
+Quote Post
garfieldmaxx
post
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 18.07.2010

Ostrzeżenie: (0%)
-----


Cytat(Neo @ 18.07.2010, 19:48:04 ) *
  1. #<td class="jm_salary">
  2. <strong>(\d+)</strong><sup>\.(\d+)<strong>CAD</strong></sup>
  3. </td>#s



Niestety bez skutku, nadal nie dziala.
Go to the top of the page
+Quote Post
kipero
post
Post #4





Grupa: Zarejestrowani
Postów: 233
Pomógł: 50
Dołączył: 28.10.2006
Skąd: Radom

Ostrzeżenie: (0%)
-----


A jaka jest zawartość zmiennej $linkrt?


--------------------
Go to the top of the page
+Quote Post
garfieldmaxx
post
Post #5





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 18.07.2010

Ostrzeżenie: (0%)
-----


Cytat(kipero @ 18.07.2010, 20:24:26 ) *
A jaka jest zawartość zmiennej $linkrt?


Kod byl zbyt wielki zeby umiescic go tutaj, umiescilem go na zewnetrznej stronie, wiec jesli ktos ma chwilke zajrzec to bede wdzieczny.

Zawartosc zmiennej $linkrt
Go to the top of the page
+Quote Post
kapuch
post
Post #6





Grupa: Zarejestrowani
Postów: 389
Pomógł: 69
Dołączył: 26.04.2010
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Kod
#<strong>(.+?)<\/strong><sup>(.+?)<strong>(.+?)<\/strong><\/sup>#is

Sproboj to, wlasciwie jest to troche zmodyfikowany przyklad kolegi Neo
Ale musi dzialac.

Ten post edytował kapuch 18.07.2010, 21:05:45


--------------------
Nie chce "Pomógł", aktualna ilość (69) w pełni mnie satysfakcjonuje :)
Go to the top of the page
+Quote Post
garfieldmaxx
post
Post #7





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 18.07.2010

Ostrzeżenie: (0%)
-----


Dzieki za wasze zaangazowanie smile.gif

Niestety zaden z podanych przez was kodow nie zadzialal.
Postanowilem jednak przeprowadzic maly test, utworzylem drugi plik z takim oto kodem (zawarlem w nim tylko ta czesc z ktorej wyciagam dane) i wszystkie wasze propozycje zadzialaly!

  1. <?php
  2.  
  3. $linkrt='
  4.  
  5. <td class="jm_salary">
  6. <strong>0</strong><sup>.48 <strong>CAD</strong></sup>
  7. </td>
  8. <td class="jm_salary">
  9. <strong>2</strong><sup>.48 <strong>CAD</strong></sup>
  10. </td>
  11. <td class="jm_salary">
  12. <strong>1</strong><sup>.48 <strong>CAD</strong></sup>
  13. </td><strong>
  14. <td class="jm_salary">
  15. <strong>4</strong><sup>.48 <strong>CAD</strong></sup>
  16. </td>
  17. <td class="jm_salary">
  18. <strong>7</strong><sup>.48 <strong>CAD</strong></sup>
  19. </td>
  20. ';
  21.  
  22.  
  23. echo $linkrt;
  24.  
  25.  
  26. #<strong>(.+?)<\/strong><sup>(.+?)<strong>(.+?)<\/strong><\/sup>#is
  27. ',
  28.  
  29.  
  30.  
  31. $linkrt,
  32. $out, PREG_PATTERN_ORDER);
  33.  
  34. echo $out[0][0]. "<br>";
  35. echo $out[0][1]. "<br>";
  36. echo $out[0][2]. "<br>";
  37. echo $out[0][3]. "<br>";
  38. echo $out[0][4]. "<br>";
  39.  
  40. ?>


Cos mi tutaj nie gralo, bo jednak gdy laduje cala strone zaden kod nie dziala. Postanowilem metoda prob i bledow znalezc ten fragment kodu, ktory powoduje ze wszystko sie sypie. Ponizszy kod, w ktorym dodalem czesc skryptow osadzonych na stronie z ktorej pobieram te dane, powoduje, ze nawet funkcja echo umieszczona zaraz pod juz sie nie uruchamia. Nie mam zielonego pojecia co o tym myslec :/

  1. <?php
  2.  
  3. $linkrt='
  4. <script type="text/javascript" charset="utf-8">
  5. var hostname = 'www.erepublik.com';
  6. var domainname = 'erepublik.com';
  7. var economyhostname = 'economy.erepublik.com';
  8. </script>
  9.  
  10. <script type="text/javascript" src="http://www.erepublik.com/js/global.js"></script>
  11. <script type="text/javascript" src="http://www.erepublik.com/js/sifr.enable.js"></script>
  12. <script type="text/javascript" charset="utf-8">
  13. window.confirmation = {
  14. ok: 'ok',
  15. yes: 'yes',
  16. no: 'no'
  17. };
  18. </script>
  19. <script type="text/javascript" charset="utf-8">
  20. if (top.location != location) {
  21. top.location.href = document.location.href ;
  22. }
  23. </script>
  24.  
  25. <td class="jm_salary">
  26. <strong>0</strong><sup>.48 <strong>CAD</strong></sup>
  27. </td>
  28. <td class="jm_salary">
  29. <strong>2</strong><sup>.48 <strong>CAD</strong></sup>
  30. </td>
  31. <td class="jm_salary">
  32. <strong>1</strong><sup>.48 <strong>CAD</strong></sup>
  33. </td><strong>
  34. <td class="jm_salary">
  35. <strong>4</strong><sup>.48 <strong>CAD</strong></sup>
  36. </td>
  37. <td class="jm_salary">
  38. <strong>7</strong><sup>.48 <strong>CAD</strong></sup>
  39. </td>
  40. ';
  41.  
  42.  
  43. echo $linkrt;
  44.  
  45.  
  46. #<strong>(.+?)<\/strong><sup>(.+?)<strong>(.+?)<\/strong><\/sup>#is
  47. ',
  48.  
  49.  
  50.  
  51. $linkrt,
  52. $out, PREG_PATTERN_ORDER);
  53.  
  54. echo $out[0][0]. "<br>";
  55. echo $out[0][1]. "<br>";
  56. echo $out[0][2]. "<br>";
  57. echo $out[0][3]. "<br>";
  58. echo $out[0][4]. "<br>";
  59.  
  60. ?>
Go to the top of the page
+Quote Post
kapuch
post
Post #8





Grupa: Zarejestrowani
Postów: 389
Pomógł: 69
Dołączył: 26.04.2010
Skąd: Łódź

Ostrzeżenie: (0%)
-----


dlatego ze Twoja zmienna $link wyglada tak:
  1. $linkrt='
  2. <script type="text/javascript" charset="utf-8">
  3. var hostname = '// tu juz zmienna sie konczy, az dziwne, ze nie sypnelo ci bledami.

Wiesz o co mi chodzi?
Tresc zmiennej chciales umiescic pomiedzy apostrofami, ale nie zauwazyles ze w tresci tez sa apostrofy winksmiley.jpg
Zastap w tresci wszystkie ( ' ) na ( \' ).

Ten post edytował kapuch 18.07.2010, 21:46:18


--------------------
Nie chce "Pomógł", aktualna ilość (69) w pełni mnie satysfakcjonuje :)
Go to the top of the page
+Quote Post
garfieldmaxx
post
Post #9





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 18.07.2010

Ostrzeżenie: (0%)
-----


Cytat(kapuch @ 18.07.2010, 22:44:09 ) *
dlatego ze Twoja zmienna $link wyglada tak:
  1. $linkrt='
  2. <script type="text/javascript" charset="utf-8">
  3. var hostname = '// tu juz zmienna sie konczy, az dziwne, ze nie sypnelo ci bledami.

Wiesz o co mi chodzi?
Tresc zmiennej chciales umiescic pomiedzy apostrofami, ale nie zauwazyles ze w tresci tez sa apostrofy winksmiley.jpg
Zastap w tresci wszystkie ( ' ) na ( \' ).



Nie zauwazylem, a co tu duzo mowic - uznalem, ze tak moze byc sad.gif

Poszukalem w Google i znalazlem polecenie addslashes().
Problem w tym, ze addslashes() nie dziala bo skrypt sypie sie juz przy zmiennej. Czy jest jakis sposob, zeby zapisac ta zmienna ze strona tak aby skrypt PHP wykonywal sie dalej, zebym mogl automatycznie dodac '\' ?
Go to the top of the page
+Quote Post
kapuch
post
Post #10





Grupa: Zarejestrowani
Postów: 389
Pomógł: 69
Dołączył: 26.04.2010
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Ale ze strony to pobierzesz bez problemu, mi chodzilo o reczne przypisywanie tresci do zmiennej.


--------------------
Nie chce "Pomógł", aktualna ilość (69) w pełni mnie satysfakcjonuje :)
Go to the top of the page
+Quote Post
garfieldmaxx
post
Post #11





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 18.07.2010

Ostrzeżenie: (0%)
-----


Dziekuje wszystkim za pomoc, problem zostal rozwiazany i wszystko pieknie dziala smile.gif
Go to the top of the page
+Quote Post
chemikdeb
post
Post #12





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 6.05.2010

Ostrzeżenie: (0%)
-----


napisz jak rozwiazles problem a nie tylko szukasz
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 20:17