Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][cURL] Pobranie źródła strony
Forum PHP.pl > Forum > Przedszkole
trollman
Witam.
Mam problem gdyż chciałbym pobrać źródło strony i z niego wyciągnąć odpowiedni fragment kodu javascript.
Napisałem taką funkcję

  1.  
  2. <?php
  3. $cookie_file ="cookie.txt";
  4. //$url ='http://adresstrony.pl';
  5. $ch=curl_init($url);
  6. curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
  7. curl_setopt($ch,CURLOPT_TIMEOUT,50);
  8. curl_setopt($ch,CURLOPT_HEADER,0);
  9. curl_setopt($ch,CURLOPT_REFERER,$url);
  10. curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0');
  11. curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
  12. curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
  13. $soursas=curl_exec($ch);
  14. curl_close($ch);
  15.  
  16. $pattern = '/<script(.*)<\/script>/';
  17. preg_match_all($pattern, $soursas, $matches);
  18. echo '<pre>'; print_r($matches); echo '</pre>';
  19.  
  20. ?>


I nie wiem co robie źle ale ten pattern nie wyciąga ma całego kodu skryptu (ze strony )tylko jego deklaracja takie jak:
[4] => type="text/javascript" src="/js/swfobject.js">
[5] => type="text/javascript" src="/js/colorpicker.js">
[6] => type='text/javascript' src='/js/jquery.cookie.js'>
[7] => type='text/javascript' src='/js/json2.js'>

Jak wcyiągnąć cały kod javacript ze źródła strony?
kreatiff
<script.*?>(.*?)</script> - to złapie wszystko pomiędzy znacznikami <script ...>dowolny kod</script>, ale by dopasowało skrypt wieloliniowy, trzeba zmodyfikować zachowanie silnika, by "." traktował też jako znak nowej linii. Czyli musimy dodać jeszcze modyfikator "s". Dodałbym też "u" na wypadek, gdyby w kodzie skryptu trafiły się znaki w kodowaniu UTF-8.

Możliwe, że DOMDocument będzie tutaj lepszym rozwiązaniem zamiast wyrażeń regularnych.

Acha, tak teraz sobie pomyślałem, że jak chcesz wyciągnąć kod z plików js. to trzeba wyłapać ich nazwy z kodu, który otrzumujesz i pobrać osobno.
trollman
To może inaczej, mam taki kod w pobranym źrdóle

  1. <script type="text/javascript">
  2. var somdfunction = function() {
  3. var a = 783538;
  4. document.getElementById('dlbutton').omg = 783541%78956;
  5. var b = parseInt(document.getElementById('dlbutton').omg) * (783541%3);
  6. var e = function() {if (false) {return a+b+c} else {return (a+3)%b + 3}};
  7. document.getElementById('dlbutton').href = "/d/34751941/"+(b+18)+"/Electro%20House%20Drop%202k14%20by%20Tobii.mp3";
  8. if (document.getElementById('fimage')) {
  9. document.getElementById('fimage').href = "/i/34751941/"+(b+18)+"/Electro%20House%20Drop%202k14%20by%20Tobii.mp3";
  10. }
  11. var result = 0;
  12. }
  13. </script>


I jak z niego wydobyć wartość: 783541%78956
Bo wyrażeniami regularnymi go nie wychwytuje.
IProSoft
Nie sprawdzone ale zarys masz:
  1. preg_match( '@omg = ([0-9\%]*);@iu', $zmienna_z_tekstem , $matches );
  2.  
  3. var_dump($matches );exit;
trollman
faktycznie wyciąga tą wartość, a mógłbyś napisać co robi dokładnie to wyrażenie, bo pierwszy raz widze je tak zawiłe
kreatiff
Tak po mojemu, bo nie znam fachowrgo polskiego nazewnictwa.

'omg = ' - szukaj takiego ciągu znaków
( - rozpocznij łapanie
[0-9\%] - ale tylko wówczas, gdy kolejne znaki to są cyfry lub znak procenta
) - zakończ łapanie
* łap zachłannie (do oporu) wyszczególnione powyżej znaki
; - czyli aż napotkasz średnik

Zawartość "zwróć" do $matches.

Ale to jest proste wyrażenie, może te małpki @ Cię mylą? Ja stosuję hasze #, ale większość chyba jednak slashe /.
Nie robi to żadnej różnicy.
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.