Pobranie kodu źródłowego ze strony

Pobranie kodu źródłowego ze strony
Dariusz Pod
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10
0

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

Kopiuj

```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 ```

Kopiuj
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?

AK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3561
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?
Dariusz Pod
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10
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.

no_solution_found
  • Rejestracja: dni
  • Ostatnio: dni
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.

Kopiuj
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
Dariusz Pod
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10
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.

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

Chyba masz rację:

Kopiuj
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?

jurek1980
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3581
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

Dariusz Pod
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10
0

Zadziałało mi z tym kodem:

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

jurek1980
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3581
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/

Dariusz Pod
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10
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.

Dariusz Pod
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10
0

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

Anna Lisik
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 125
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.
AK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3561
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ą.

Dariusz Pod
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10
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...

Anna Lisik
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 125
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?

Kopiuj
document.getElementById
Dariusz Pod
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10
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.

Anna Lisik
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 125
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

Dariusz Pod
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10
0
Kopiuj
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...

MJ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 34
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ąć

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.