Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak za pomocą JavaScript pobrać dane z strony regexpem?
Forum PHP.pl > Forum > PHP
Saki
Witam, mam pytanie jak za pomocą JavaScript czy jQuery pobrać stronę, wydostać z niej odpowiedni fragment i wysłać postem do pliku php.
Wszystko ma działać tylko z JS, zero php/curl.

Dość kilka miesięcy się nad tym trudzę, dziś postanowiłem zapytać was o pomoc.
Przedstawiłem to na php jak to ma działać z js

  1. function get_data($url) {
  2. $ch = curl_init($url);
  3. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  4. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
  5. $data = curl_exec($ch);
  6. curl_close($ch);
  7. return $data;
  8. }
  9.  
  10. $data = get_data('http://example.tld');
  11.  
  12. preg_match_all("#example(.*)string;#", $data, $out); // wyciąganie z strony danych
  13.  
  14. //print_r($out);
  15.  
  16. zmienna $out leci jquery i wysyła do z.php postem
  17.  
  18. $.ajax({
  19. type: "POST",
  20. url: "z.php",
  21. data: 'tresc='+out,
  22. success: function(msg){
  23. $('#loading').hide();
  24. beforeSend: function() { $('#loading').show(); }
  25. });
Sephirus
Nie lubię podcinać skrzydeł... ale AJAXem nie załadujesz na stronę "a" strony "b" - innymi słowy problem crossdomain... A inaczej raczej ogólnie strony przez JS nie załadujesz... Więc chyba jednak przydałby się PHP...

Same regexpy w JS nie są trudniejsze od PHP - poszukaj czegoś o obiekcie RegExp w JS i starczy.
tolomei
Witam.

Takie coś jest możliwe, gdy skrypt JS pobierający dane ze strony A uruchomimy z konsoli w przeglądarce. Wtedy można użyć jQuery.ajax() aby wysłać GET-em pobrane dane na nasz serwer B.

Pozdrawiam.
Saki
Cytat(tolomei @ 7.02.2013, 19:59:06 ) *
Witam.

Takie coś jest możliwe, gdy skrypt JS pobierający dane ze strony A uruchomimy z konsoli w przeglądarce. Wtedy można użyć jQuery.ajax() aby wysłać GET-em pobrane dane na nasz serwer B.

Pozdrawiam.


A mógłbyś mi pokazać jakiś przykład tego wykonania?
tolomei
Przykład...
To zależy od strony, z której chcesz coś pobrać.

Powiedzmy, że masz stronę, na której istnieje lista linków na przykład. Pozycji jest 1000.

Html na którym mi zależy wygląda tak:
  1. <ul id="link-list">
  2. <li><a href="http://www.example.com/1">Link 1</a></li>
  3. <li><a href="http://www.example.com/2">Link 2</a></li>
  4. <li><a href="http://www.example.com/3">Link 3</a></li>
  5. <li><a href="http://www.example.com/4">Link 4</a></li>
  6. ...
  7. </ul>


Skrypt do konsoli wyglądałby tak mniej więcej:
[JAVASCRIPT] pobierz, plaintext
  1. /**
  2.  * zakładam, że strona, z której pobieram dane ma załączone jQuery
  3.  * jeśli nie to załączam tutaj
  4.  */
  5. (function() {
  6. var a = $('#link-list a'),
  7. aAmount = a.length,
  8. counter = 0,
  9. downloadNext = function() {
  10. var currentLink = a.eq(counter),
  11. href = currentLink.attr('href'),
  12. name = currentLink.html();
  13.  
  14. $.ajax({
  15. url: 'http://www.mywebsite.pl/index.php',
  16. type: 'get',
  17. data: {linkHref: href, linkName: name},
  18. cache: false,
  19. dataType: 'json',
  20. success: function(data) {
  21. if(data.result == 'ok') {
  22. counter++;
  23. if(counter != aAmount) {
  24. downloadNext();
  25. }
  26. }
  27. }
  28. });
  29. };
  30.  
  31. downloadNext();
  32. }());
[JAVASCRIPT] pobierz, plaintext


index.php:
  1. <?php
  2. $href = isset($_GET['linkHref']) ? $_GET['linkHref'] : null;
  3. $name = isset($_GET['linkName']) ? $_GET['linkName'] : null;
  4.  
  5. if(!in_array(null, array($href, $name))) {
  6.  
  7. // połączenie z bazą danych
  8.  
  9. $query = $db->exec("INSERT INTO LINKS SET HREF = '".addslashes($href)."', NAME = '".addslashes($name)."'");
  10.  
  11. if($query !== false) {
  12. echo '{ "result": "ok" }';
  13. die;
  14. }
  15.  
  16. }
  17.  
  18. echo '{ "result": "fail" }';


Nie testowałem tego nigdzie.
Myślę, że powinno działać.

Pozdrawiam.
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.