![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 17 Dołączył: 13.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
Potrzebuję funkcji, która wyciągnie mi title danej strony, jeśli z kolei się nie uda to zwróci po prostu false.
Próbowałem najprostszym sposobem - file_get_contents() - za cholerę nie chce działać. Są wyjątki, np. nk.pl przeczyta, ale onet.pl / interia.pl / wp.pl nie potrafi odczytać, zwraca mi false. Czym to jest spowodowane ? Kod wygląda tak:
Ten post edytował Majkelo23 28.05.2012, 16:17:54 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 56 Pomógł: 18 Dołączył: 7.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Mam parę uwag odnośnie regexpa.
w preg_match() jako ograniczniki wzoru zastosuj np. @ (znak małpy), unikniesz backslashowania często występujących znaków. Znak zapytania nie jest potrzebny, sama gwiazdka oznacza, że chcesz w tym miejscu dowolną ilość elementów (łącznie z jego brakiem). ad kodu u mnie wyrzuca warning w przypadku nk. Cytat Warning: file_get_contents(http://nk.pl/) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden in D:\Programms\wamp\skrypty\getUrlTitle.php on line 5. Najprawdopodobniej jest parę rzeczy sprawdzanych (chodzi o nagłówki HTTP, np. przeglądarka). Jeśli chcesz z tego serwisu wydobyć adres skorzystaj np. z curl'a i wyślij fałszywe nagłówki. #edit U mnie w przypadku WP/Interii/Onet, śmiga bez problemu. ew. sprawdź czy nie masz ustawionego w php.ini: allow_url_fopen = Off ale to raczej odpada bo by Ci nic nie zewnętrznego nie czytało. Ten post edytował ethann 28.05.2012, 17:16:42 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 17 Dołączył: 13.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
Efekt: "http://onet.pl" ;/ |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 56 Pomógł: 18 Dołączył: 7.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 17 Dołączył: 13.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
Kod string(14) "http://onet.pl" Dodam, że przy http://nk.pl otrzymuję: Cytat nk.pl - Serwis spoĹecznoĹciowy nk.pl - platforma komunikacji dla wszystkich internautĂłw Czyli ok, krzaki sam poprawię. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 56 Pomógł: 18 Dołączył: 7.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 17 Dołączył: 13.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
Cholera, znalazłem problem. Te wszystkie strony korzystają z 'http://www.'. Jak to zrobić tak uniwersalnie, że w przypadku wymuszonego 'www' skrypt jakoś to przegryzie? Da się to jakoś ugryźć?
EDIT: I...na odwrót. http://www.nk.pl/ tez nie śmiga. Dopiero po usunięciu 'www.' ;/ Ten post edytował Majkelo23 28.05.2012, 17:36:31 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 320 Pomógł: 29 Dołączył: 3.04.2010 Ostrzeżenie: (20%) ![]() ![]() |
Musisz podążać za przekierowaniami, lub napisać funkcję sprawdzającą najpierw http://strona.pl potem http://www.strona.pl.
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 17 Dołączył: 13.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
Własnie po napisaniu pytania, sam wpadłem na to, że muszę w przypadku niepowodzenia sprawdzić link dla "z www." i "bez www.".
Funkcja jest taka:
Ale...nadal nic. Może Wy widzicie jakiegoś byka? EDIT: dla http://onet.pl/ już działa - dopisuje "www.". Jednak w przypadku http://www.nk.pl/ - nie chce wywalać tego "www." ;/ Ten post edytował Majkelo23 28.05.2012, 17:49:41 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 56 Pomógł: 18 Dołączył: 7.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Zależy. możesz to zrobić w prosty sposób samemu wpisując 2 adresy (z WWW oraz bez WWW) np.
Ewentualnie sprawdzić regexp'em czy występuje w linku fragment "www.", jeśli nie to po prostu przygotować 2 zmienne, jedna z wartością normalnego linka, a drugą z takim samym linkiem tylko dopisać do niego "www." zaraz po ukośnikach (http://) i wtedy wykonać np. część zawartą w get_url_title_x (kod który podałem wyżej). |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 17 Dołączył: 13.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
Dla http://onet.pl/ już działa - dopisuje "www.". Jednak w przypadku http://www.nk.pl/ - nie chce wywalać tego "www." ;/
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 56 Pomógł: 18 Dołączył: 7.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
przede wszystkim włącz ostrzeżenia w php.ini, albo dopisz na górze pliku dopisz error_reporting(E_ALL);
I nie wyciszaj tego co krzyczą funkcję póki kod nie będzie działał poprawnie. |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 17 Dołączył: 13.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
Niestety, nic to nie dało.
|
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 479 Pomógł: 97 Dołączył: 6.09.2011 Skąd: php.net :) Ostrzeżenie: (0%) ![]() ![]() |
Gotowa i działająca:
Ten post edytował IProSoft 28.05.2012, 17:56:20 -------------------- Manual prawdę Ci powie.
|
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 17 Dołączył: 13.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
Problem w tym, że mam coś wyłączonego na serwerze, co powoduje, że Twoja funkcja nie działa:
Cytat Warning: curl_setopt_array() [function.curl-setopt-array]: CURLOPT_FOLLOWLOCATION cannot be activated when safe_mode is enabled or an open_basedir is set in /home/ ;/ nie bawie się na darmówkach tylko na normalnym hostingu. Moja funkcja jest nie do poprawy? |
|
|
![]()
Post
#16
|
|
![]() Grupa: Zarejestrowani Postów: 479 Pomógł: 97 Dołączył: 6.09.2011 Skąd: php.net :) Ostrzeżenie: (0%) ![]() ![]() |
Sprawdziłem funkcję z postu: http://forum.php.pl/index.php?s=&showt...st&p=965893 i działa pieknie, dla jakiej strony nie pobiera Ci title?
Usuń wszystkie @ z kodu i daj error_reporting(E_ALL); przed wywołaniem funkcji. -------------------- Manual prawdę Ci powie.
|
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 17 Dołączył: 13.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
Facet na innym forum też twierdził, że mu działa ta funkcja. Mi z kolei ona nie działa. Inny napisał, że "to kwestia requiestów..." cokolwiek to oznacza.
|
|
|
![]()
Post
#18
|
|
![]() Grupa: Zarejestrowani Postów: 479 Pomógł: 97 Dołączył: 6.09.2011 Skąd: php.net :) Ostrzeżenie: (0%) ![]() ![]() |
Niestety nikt bez jakichkolwiek komunikatów/błędów nie będzie mógł raczej znaleźc rozwiązania.
-------------------- Manual prawdę Ci powie.
|
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 17 Dołączył: 13.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
Ta, tylko że ja nie mam żadnych błędów/komunikatów, tyle tylko że nie pobiera mi tego title. Kod, który kazałeś dodać dodałem i napisałem pare postów wcześniej - nic to nie zmieniło.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 10:24 |