Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][HTML][PHP]Pobranie Div-a z innej strony
Forum PHP.pl > Forum > Przedszkole
miszarus
Witam serdecznie,
chciałbym się dowiedzieć w jaki sposób najłatwiej pobrać konkretnego div-a z innej strony. Problem wygląda następująco, że na pewnej stronie po adresem http://strona/tabela umieszczane są tabele (dwa razy w tygodniu). Chciałbym na własnej stronie umieszczać te tabele z automatu. Jest to tabela 7 kolumn 10 wierszy.
Czy da się, aby na mojej stronie był skrypt wyświetlający ten element z automatu? Pobierał nie całą stroną jako iframe tylko konkretnego <diva> questionmark.gif
CuteOne
A nie lepiej pobierać raz w tygodniu całą stronę, przeparsować ją i wyświetlić u siebie?
miszarus
Może być? Pytanie-->Jak to zrobić?
djgarsi
Cytat(miszarus @ 4.08.2012, 17:15:45 ) *
Może być? Pytanie-->Jak to zrobić?


CURL, zainteresuj sie tym.
!*!
Cytat(djgarsi @ 4.08.2012, 17:27:20 ) *
CURL, zainteresuj sie tym.

Albo prościej file_get_contents i preg_match
gorden
Cytat(djgarsi @ 4.08.2012, 17:27:20 ) *
Nie ten dział --> Gotowe rozwiązania.

on nie prosi o gotowe rozwiązanie tylko pyta się jak to zrobić, co może oznaczać prośbę o wytłumaczenie mechaniki skryptu

  1. if( $dzien_tygodnia == 'sroda' || $dzien_tygodnia == 'niedziela' ) //zakladam ze takie dni tygodnia
  2. {
  3. if( $tabelka_aktualna !== true) //gdzieś powinieneś zapisać którego dnia ostatnio tabelka została pobrana, jeśli już powinna się zmienić niech zmienia się na false na początku skryptu
  4. {
  5. $strona = file_get_contents('http://strona/tabelka');
  6. //tutaj wyrażenie regularne które pobiera Twój fragment/część tabelki
  7. $tabelka_aktualna = true;
  8. $tabelka_html = $wyrazenie_regularne[0];
  9. }
  10. }
  11. echo $tabelka_html;
miszarus
Napisałem coś takiego...jednak nie zwraca mi diva...nie daje żadnego efektu.

Kod
<?php
    $url = "http://www.strona/tabela";
    $ch = curl_init(); // inicjalizacja curla
    curl_setopt($ch, CURLOPT_URL,$url); // ustawienie urla
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // zwróć w postaci zmiennej
    curl_setopt($ch, CURLOPT_TIMEOUT, 3); // czas oczekiwania
    $result = curl_exec($ch); // wykonanie skryptu
    curl_close($ch);

preg_match_all('/<ul class="SubMColumn">(.+?)<\/ul>/ism', $result, $wyjscie); //podanie nazwy diva -  "SubMColumn"
        ?>
!*!
Ponieważ
1, wybrałeś gorszy sposób, curl (niepoprawny).
2. źle go zastosowałeś.

  1. $strona = file_get_contents('http://strona/tabela');
  2.  
  3. echo '<pre>';
  4. preg_match('/<div>(.*)<\/div>/s', $strona, $wynik); // (.*) pobiera wszystko bez wyjątku
  5. var_dump($wynik);

http://www.php.net/manual/pl/reference.pcr...n.modifiers.php
JoShiMa
A może skryptozakładka, jeśli to ma być za pomocą JavaScript
miszarus
Cytat(!*! @ 5.08.2012, 10:35:04 ) *
Ponieważ
1, wybrałeś gorszy sposób, curl (niepoprawny).
2. źle go zastosowałeś.

  1. $strona = file_get_contents('http://strona/tabela');
  2.  
  3. echo '<pre>';
  4. preg_match('/<div>(.*)<\/div>/s', $strona, $wynik); // (.*) pobiera wszystko bez wyjątku
  5. var_dump($wynik);

http://www.php.net/manual/pl/reference.pcr...n.modifiers.php


Ale nie działa, gdyż wywala albo jakieś znaki...a gdy wpisuje aby otrzymać konkretnego diva, otrzymuje

array(0) {
}

Chodzi mi o to by móc pobrać np. taką tabelę z kursami jak na http://sgb.pl/kursy_walut i ją wyświetlać na swojej stronie.
Zrobiłem tak:
CODE
<?php
$strona = file_get_contents('http://www.sgb.pl/kursy_walut');
echo '<pre>';
preg_match('/<div>(.*)<\/div>/s', $strona, $wynik); // (.*) pobiera wszystko bez wyjątku
var_dump($wynik);
?>


ale nie dostaje tabelki sad.gif
!*!
Ponieważ to tylko przykład. Musisz wpisać odpowiednie wyrażenie regularne, takie jakie jest na tej stronie którą pobierasz.

  1. preg_match('/<table class="Ctab">(.*)<\/table>/s', $strona, $wynik);

Poza tym, żeby pobrać aktualny kurs walut, to wejdź na stronę NBP i pobierz te dane za pomocą ich API.
miszarus
Działa smile.gif Maestro, a jak edytować to...żeby ładnie wyświetlić?

Np. Włożyć teraz w stronkę na HTML-u?

I jeszcze jedno ważne pytanie. W jaki sposób to aktualizować, aby zmieniało się samo, podczas aktualizacji na ich stronie?
CuteOne
1. Poczytaj o file_get_contents()
2. Poczytaj o cronie
!*!
Cytat(miszarus @ 5.08.2012, 19:25:35 ) *
Działa smile.gif Maestro, a jak edytować to...żeby ładnie wyświetlić?

Np. Włożyć teraz w stronkę na HTML-u?

I jeszcze jedno ważne pytanie. W jaki sposób to aktualizować, aby zmieniało się samo, podczas aktualizacji na ich stronie?


  1. echo $wynik[0];
  2. //lub
  3. file_put_contents('plik.txt', $wynik[0]); // a następnie ten plik odczytujesz jak wyżej.

miszarus
Kurdem, nie mogę sobie poradzić.
Jakiś przykład, jak te dane obrobić? I dlaczego jak definiuje
CODE
preg_match('/<h3 class="color">(.*)<\/table>/s', $strona, $wynik); // (.*) pobiera wszystko bez wyjątku


i tak pobiera mi całą stronę sad.gif

!*!
Niemożliwe. Pokaż całość.
miszarus
http://miszarus.c0.pl/parsowanie.php
!*!
PHP wink.gif
miszarus
CODE
<?php
$strona = file_get_contents('http://www.sgb.pl/kursy_walut');
echo '<pre>';
preg_match('/<h3 class="color">(.*)<\/table>/s', $strona, $wynik); // (.*) pobiera wszystko bez wyjątku
var_dump($wynik);

echo $wynik[0];
//lub
?>


Przecież deklaruje, że chce tylko <h3 class="color"> a wywala mi wszystko! Jak to obrobić? Szukam po podobnych tematach:
http://forum.ks-ekspert.pl/topic/125737-ph...elementu-stony/
http://peb.pl/tworzenie-stron/1256320-curl...nie-tre-ci.html

próbowałem się wzorować na tym

CODE
/Wyciąganie ze źródła potrzebnego kodu za pomocą fukcji explode();
$wynik = explode('<div id="HomeStock"><div></div></div>',$wynik);
$wynik = $wynik[1];
$wynik = explode('<div class="HomeStock"><div></div></div>', $wynik);
$wynik = $wynik[0];
//Rozpoczynanie formatowania
$wynik = preg_replace('/<\/h1>(.*?)<h2>/si', '</h1><h2>', $wynik);
$wynik = preg_replace("/width='(.*?)' height='(.*?)' border='(.*?)'/si", 'alt="" /', $wynik);
$pattern[0] = 'livebox_content';
$pattern[1] = '<h2>TERAZ</h2>';
$replacement[0] = 'weather_box';
$replacement[1] = '';
$wynik = str_replace($pattern, $replacement, $wynik);
//Zwracanie fragmentu po formatowaniu
return($wynik);
}
echo pogoda('id');
?>


ale wszystko nic. Ja chcę tylko jak to się mówi...dokładnie zabrać tą tabelkę i wyświetlać u ciebie lub przełożyć te dane do siebie sad.gif
!*!
Cytat
<h3 class="color">(.*)<\/table>

To nie wygląda na poprawny tag <h2> wink.gif teraz pobierasz wszytko od h2 do końca tabeli.
miszarus
CODE
<?php
$strona = file_get_contents('http://www.sgb.pl/kursy_walut');
echo '<pre>';
preg_match ('/<table class="Ctab">(.*)<\/table>/s', $strona, $wynik); // (.*) pobiera wszystko bez wyjątku
var_dump($wynik);

echo $wynik[0];
//lub
?>


to samo... zobacz sam... http://miszarus.c0.pl/parsowanie.php
!*!
I co jest nie tak? Pierw wyświetlasz całą tablice, a później pozycje 0.
miszarus
CODE
<?php
$strona = file_get_contents('http://www.sgb.pl/kursy_walut');
echo '<pre>';
preg_match ('/<table class="Ctab">(.*)<\/table>/s', $strona, $wynik); // (.*) pobiera wszystko bez wyjątku
//var_dump($wynik);

echo $wynik[0];
//lub
?>


Teraz wyświetlam ładnie wynik. Zostaje tylko Newsletter na dole, ale ciul z tym.
Pytanie jak wczytać te dane do HTML-a i wyświetlić na joomli :/ Kolega zmusza mnie do poszukiwania info samemu smile.gif popieram...ale może jakiś przykład smile.gif
!*!
  1. <div><?php echo $wynik[0];?></div>
To są podstawy wink.gif
miszarus
Hej. Udało mi się ładnie obrobić, ale męczę się jeszcze z jednym.
Podczas pobierania <table class="Ctab"> zaciąga mi na dole jeszcze 'news letter', 'drukuj' i takie tam. Jak to usunąć, bądź ukryć?

Tak wygląda:

http://miszarus.c0.pl/parsowanie.php

Chodzi o to wszystko pod tabelką :/

gorden
podejrzewam, że coś jest źle
miszarus
Ja też tak podejrzewam, ale wygląda jakby było <ok>
wygląda to tak:

CODE
<?php
$strona = file_get_contents('http://www.sgb.pl/kursy_walut');
echo '<pre>';
preg_match ('/<table class="Ctab">(.*)<\/table>/s', $strona, $wynik); // (.*) pobiera wszystko bez wyjątku
//var_dump($wynik);

//echo $wynik[0];
//lub
?>

<center><div><?php echo $wynik[0];?></div></center>
Kimi2007
Zeby nie otwierac tematu podłącze się ;D

Przerobiłem ten kod tak:

  1. <?php
  2. $strona = file_get_contents('http://www.facebook.com/plus/likes');
  3. echo '<pre>';
  4. preg_match('/<span class="timelineLikesBigNumber fsm">(.*)<\/span>/s', $strona, $wynik); // (.*) pobiera wszystko bez wyjątku
  5. var_dump($wynik);
  6.  
  7. echo $wynik[0];
  8. ?>


niestety nie pobiera mi "Ilosci osob które o tym mowią" tylko dostaje:

  1. array(0) {
  2. }


Moje pytanie brzmi co tutaj jest źle, ślęcze nad tym już drugi dzień ohno-smiley.gif
!*!
Nie pobierzesz w ten sposób wyniku z tej strony ponieważ FB blokuje wszytko co nie jest przeglądarką. Musisz pobrać to przez curl i wtedy zastosować preg_match popatrz co zwraca Ci strona.
brzanek
Przepraszam za odkopanie ale jak mogę teraz zapisać te wyniki do bazy danych mysql
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.