Pobranie kodu źródłowego ze strony

0

Mam jakis problem z pobraniem kodu zrodlowego strony. Zwraca mi blad.


```Fatal error: Uncaught Error: Call to a member function find() on boolean in /home/parafi30/domains/parafiapiotraipawlazlotow.org/public_html/szukanie.php:61 Stack trace: #0 {main} thrown in /home/parafi30/domains/parafiapiotraipawlazlotow.org/public_html/szukanie.php on line 61 ```

include('simple_html_dom.php');
 
$html = file_get_html('http://parafiapiotraipawlazlotow.org/');
 
//to fetch all hyperlinks from a webpage
$links = array();
foreach($html->find('a') as $a) {
 $links[] = $a->href;
}
print_r($links);
 
//to fetch all images from a webpage
$images = array();
foreach($html->find('img') as $img) {
 $images[] = $img->src;
}
print_r($images);
 
//to find h1 headers from a webpage
$headlines = array();
foreach($html->find('h1') as $header) {
 $headlines[] = $header->plaintext;
}
print_r($headlines);

Probowalem juz tez z "file_get_contents", ale wtedy zwraca puste okno, czyli nic.

Mozecie cos poradzic?

0
  1. Jeśli ktoś pobiera KOD ŹRÓDŁOWY jakiejś strony, to już jest bardzo źle
  2. Czytanie wyjątku wskazuje na metodę find z booleanem
  3. Ty jesteś autorem?
0

Ale o co Tobie chodzi? Autorem strony owszem. Potrzebuję pobrać kod, bo chcę z niego wydobyć identyfikator video (strona fb) żeby go potem umieścić na tej stronie. Nie ma innej prostszej metody żeby zdobyć ten identyfikator jak z kodu.

0

czyli zapewne file_get_html zwróciło Ci false. Dodaj sprawdzenie.
Wiele zależy gdzie to uruchamiasz, ale możliwe iż na serwerze masz wyłączone pobieranie czegoś z internetu z poziomu tej funkcji.

Jak file_get_contents zwraca puste okno to może to kwestia np błędu w składni albo coś podobnego? Włącz sobie może wyświetlanie błędów.

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
0
no_solution_found napisał(a):

czyli zapewne file_get_html zwróciło Ci false. Dodaj sprawdzenie.
Wiele zależy gdzie to uruchamiasz, ale możliwe iż na serwerze masz wyłączone pobieranie czegoś z internetu z poziomu tej funkcji.

Jak file_get_contents zwraca puste okno to może to kwestia np błędu w składni albo coś podobnego? Włącz sobie może wyświetlanie błędów.

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

Chyba masz rację:

Warning: file_get_contents(): http:// wrapper is disabled in the server configuration by allow_url_fopen=0 in /home/parafi30/domains/parafiapiotraipawlazlotow.org/public_html/szukanie.php on line 12 Warning: file_get_contents(http://parafiapiotraipawlazlotow.org/index.php): failed to open stream: no suitable wrapper could be found in /home/parafi30/domains/parafiapiotraipawlazlotow.org/public_html/szukanie.php on line 12 nie znaleziono 

Jest zatem jakaś inna metoda na pobranie i zapisanie źródła strony do zmiennej?

1

Najpierw zobacz czy masz dostęp do PHP.ini . Może masz jakiś panel zarządzania. Jesli nie masz dostępu do ustawień w PHP.ini to zobacz wyświetlając phpinfo() czy masz włączoną obsługę CURL

0

Zadziałało mi z tym kodem:

header('Content-Type: text/html');
 
  
$url = "https://www.parafiapiotraipawlazlotow.org";
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1');
  

$contents = curl_exec($ch);
if (curl_errno($ch)) {
  echo curl_error($ch);
  echo "\n<br />";
  $contents = '';
} else {
	echo "OK";
  curl_close($ch);
}
echo strlen($contents);

if (!is_string($contents) || !strlen($contents)) {
echo "Failed to get contents.";
$contents = '';
}
echo htmlspecialchars($contents);

Problem jest tego typu, że jako URL ma być strona facebook, z której chce pobrać dany identyfikator. Niestety dla fb string przyjmuje wartość 0.

0

Do rzeczy. Co i skąd chcesz pobierać?
Jak z faceboka to raczej użyj ich API
https://developers.facebook.com/docs/graph-api/reference/video/

0
jurek1980 napisał(a):

Do rzeczy. Co i skąd chcesz pobierać?
Jak z faceboka to raczej użyj ich API
https://developers.facebook.com/docs/graph-api/reference/video/

Identyfikator video transmisji na żywo. W źródle strony widnieje on pod atrybutem reorderid="2859697447445076" i własnie ten numer chce pobrac ze strony, ktorej dokladny adres znam.

0

Wystarczyłby mi chociaz link do transmisji, ale podobno FB wyłączyć pobieranie tej opcji dla PHP nawet poprzez ich API?

0

Z pobieraniem kodu źródłowego strony to radziłabym uważać. Z dwóch powodów:

  1. Jeśli trafisz na admina nadgorliwca/debila to dopluje się że ukradłeś mu jego własność. Jaka to kradzież skoro nawet producenci przeglądarek pozwalają podejrzeć (a niektórzy nawet zapisać) kod źródłowy?
  2. Jeśli kod strony będzie obfuscowany to pobranie nie zdeobfuscuje go.
0
Anna Lisik napisał(a):

Z pobieraniem kodu źródłowego strony to radziłabym uważać. Z dwóch powodów:

  1. Jeśli trafisz na admina nadgorliwca/debila to dopluje się że ukradłeś mu jego własność. Jaka to kradzież skoro nawet producenci przeglądarek pozwalają podejrzeć (a niektórzy nawet zapisać) kod źródłowy?
  2. Jeśli kod strony będzie obfuscowany to pobranie nie zdeobfuscuje go.

Zaczynam rozumieć to tak, że kolega nie wie, o co pyta. Chyba pobiera wyprodukowaną zawartość strony (=wynikową), w przeglądarce dającą się podejrzeć jako "Źródło". Inaczej to się kupy nie trzyma.
Żadne "źródło strony" nie zawiera konkretnych danych (jak ID filmu), tylko pętle które to wyprodukują.

0
AnyKtokolwiek napisał(a):

Zaczynam rozumieć to tak, że kolega nie wie, o co pyta. Chyba pobiera wyprodukowaną zawartość strony (=wynikową), w przeglądarce dającą się podejrzeć jako "Źródło". Inaczej to się kupy nie trzyma.
Żadne "źródło strony" nie zawiera konkretnych danych (jak ID filmu), tylko pętle które to wyprodukują.

Tak, własnie o to mi chodzi. Zle sie wyrazilem. Wlasnie w tej wynikowej zawartosci strony jest to ID, ktore chce pobrac...

0
Dariusz Pod napisał(a):
AnyKtokolwiek napisał(a):

Zaczynam rozumieć to tak, że kolega nie wie, o co pyta. Chyba pobiera wyprodukowaną zawartość strony (=wynikową), w przeglądarce dającą się podejrzeć jako "Źródło". Inaczej to się kupy nie trzyma.
Żadne "źródło strony" nie zawiera konkretnych danych (jak ID filmu), tylko pętle które to wyprodukują.

Tak, własnie o to mi chodzi. Zle sie wyrazilem. Wlasnie w tej wynikowej zawartosci strony jest to ID, ktore chce pobrac...

To może JavaScriptem?

document.getElementById
0

Szczerze mowiac, to wolalbym PHPem, bo w tym czuje sie bardziej oblatany... Chce tylko pobrac ten identyfikator jako string, z reszta juz sobie poradze.

0
Dariusz Pod napisał(a):

Szczerze mowiac, to wolalbym PHPem, bo w tym czuje sie bardziej oblatany... Chce tylko pobrac ten identyfikator jako string, z reszta juz sobie poradze.

Zatem zainteresuj się czymś co się nazywa DOM

0
header('Content-Type: text/html');

$url = "https://www.parafiapiotraipawlazlotow.org";
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1');

$contents = curl_exec($ch);
if (curl_errno($ch)) {
  echo curl_error($ch);
  echo "\n<br />";
  $contents = '';
} else {
    echo "OK";
  curl_close($ch);
}
echo strlen($contents);

if (!is_string($contents) || !strlen($contents)) {
echo "Failed to get contents.";
$contents = '';
}
echo htmlspecialchars($contents);

Zadziałało mi z tym, ale to nie dla działa na facebook...

1

Wydaje mi się że nawet jeżeli ci się uda pobrać źródło to nie wyciągniesz z niego tego co chcesz bo to renderuje js w przeglądarce.
Jesli koniecznie chcesz robić to w ten sposób to jest dostępny bridge php - puppeteer i może tak dało by radę ogarnąć pobranie wyrenderowanego nie korzystałem nigdy więc nie mam 100% pewności.
Inna opcja to api Facebooka jest dość spoko i mają sdk dla php ale może być problem jeśli ta transmisja jest prowadzona przez jakis podmiot dla którego nie posiadasz uprawnień/tokenu.
No i zawsze można przejrzeć w przeglądarce co leci w Network gdy ładowany jest element zawierający to id może tam by się udało podpiąć

1 użytkowników online, w tym zalogowanych: 0, gości: 1