Grzegorz M.

Grzegorz M. www.avatec.pl

Temat: Reg exp - czyli wyciąganie summary z rss :-)

Krótko i na temat:

a) jak ktoś może zaproponować gotową klasę pobierającą rss/atom do tablic;
b) rozwiązanie problemu z reg exp:

Na podstawie kanału onetowego, chcę wyciągnąć zawartość summary:

<entry>
<title>Bonawentura.org - Festiwal Podróży i Przygody</title>
<link href="http://przewodnik.onet.pl/globtroter/imprezy/bonawenturaorg-festiwal-podrozy-i-przygody,1,4080296,artykul.html" rel="alternate" ></link>
<id>urn:uuid:3ca24bdd-c145-585b-6fb7-2ba01b191fa2</id>
<updated>2011-03-26T08:30:00Z</updated>
<summary type="html" ><![CDATA[<img hspace="5" src="http://m.onet.pl/_m/0686f28d3419b0e4c9a5cbf6d9d0f97e,3,1.jpg" align="left" />W dniach 26-27 marca 2011 r. w kinie Sokół w Starym Sączu odbędzie się pierwsza edycja Festiwalu Podróży i Przygody Bonawentura.org. Zapowiada się prawdziwe święto wszelkiej maści włóczykijów, niepoprawnych marzycieli i ludzi ciekawych świata.]]></summary>
</entry>
<entry>
<title>Podlaskie spotkania z podróżami</title>
<link href="http://przewodnik.onet.pl/globtroter/imprezy/podlaskie-spotkania-z-podrozami,1,4159675,artykul.html" rel="alternate" ></link>
<id>urn:uuid:4af154e0-31e2-c078-9539-025210294417</id>
<updated>2011-03-18T08:30:00Z</updated>
<summary type="html" ><![CDATA[<img hspace="5" src="http://m.onet.pl/_m/705eeb4081aa5ef936e126b461a3988b,3,1.jpg" align="left" />W dniach 18-20.03.2011 w ramach IV Podlaskich Targów Turystycznych w Białymstoku odbędą się „Podlaskie spotkania z podróżami”.]]></summary>
</entry>

próbuję poprzez

preg_match_all('/\/>([^*]+)\.\]\]>/', '{{your data}}', $arr, PREG_PATTERN_ORDER);

otrzymuję:


Array
(
[0] => Array
(
[0] => />W dniach 26-27 marca 2011 r. w kinie Sokół w Starym Sączu odbędzie się pierwsza edycja Festiwalu Podróży i Przygody Bonawentura.org. Zapowiada się prawdziwe święto wszelkiej maści włóczykijów, niepoprawnych marzycieli i ludzi ciekawych świata.]]></summary>
</entry>
<entry>
<title>Podlaskie spotkania z podróżami</title>
<link href="http://przewodnik.onet.pl/globtroter/imprezy/podlaskie-spotkania-z-podrozami,1,4159675,artykul.html" rel="alternate" ></link>
<id>urn:uuid:4af154e0-31e2-c078-9539-025210294417</id>
<updated>2011-03-18T08:30:00Z</updated>
<summary type="html" ><![CDATA[<img hspace="5" src="http://m.onet.pl/_m/705eeb4081aa5ef936e126b461a3988b,3,1.jpg" align="left" />W dniach 18-20.03.2011 w ramach IV Podlaskich Targów Turystycznych w Białymstoku odbędą się „Podlaskie spotkania z podróżami”.]]>
)

[1] => Array
(
[0] => W dniach 26-27 marca 2011 r. w kinie Sokół w Starym Sączu odbędzie się pierwsza edycja Festiwalu Podróży i Przygody Bonawentura.org. Zapowiada się prawdziwe święto wszelkiej maści włóczykijów, niepoprawnych marzycieli i ludzi ciekawych świata.]]></summary>
</entry>
<entry>
<title>Podlaskie spotkania z podróżami</title>
<link href="http://przewodnik.onet.pl/globtroter/imprezy/podlaskie-spotkania-z-podrozami,1,4159675,artykul.html" rel="alternate" ></link>
<id>urn:uuid:4af154e0-31e2-c078-9539-025210294417</id>
<updated>2011-03-18T08:30:00Z</updated>
<summary type="html" ><![CDATA[<img hspace="5" src="http://m.onet.pl/_m/705eeb4081aa5ef936e126b461a3988b,3,1.jpg" align="left" />W dniach 18-20.03.2011 w ramach IV Podlaskich Targów Turystycznych w Białymstoku odbędą się „Podlaskie spotkania z podróżami”
)

)


a chciałbym pobrać zawartość od /> do ]]> - jak widać wyżej, na znaku ]]> się nie zatrzymuje w pierwszym wystąpieniu

Kto pomoże ?
Wojciech Soczyński

Wojciech Soczyński Programista
eksplorator -
blog.wsoczynski.pl

Temat: Reg exp - czyli wyciąganie summary z rss :-)

Może użyj DOMDocument i potem XPath albo traversacja drzewa, ewentualnie SimpleXML, na jedno wyjdzie...Wojciech Soczyński edytował(a) ten post dnia 15.02.11 o godzinie 15:36

konto usunięte

Temat: Reg exp - czyli wyciąganie summary z rss :-)

SimpleXMLElement tutaj też może pomóc

konto usunięte

Temat: Reg exp - czyli wyciąganie summary z rss :-)

SimpleXML twoim przyjacielem

konto usunięte

Temat: Reg exp - czyli wyciąganie summary z rss :-)

Podczepiając się pod temat:
Dobry wujek SimpleXML. :)
Wojciech K.

Wojciech K. realizator pomysłów
własnych

Temat: Reg exp - czyli wyciąganie summary z rss :-)

zakładam, że używasz regexpa, bo nie masz dostępu do stosownych rozszerzeń w PHP (jak wspomniany SimpleXML), lub nie możesz ich doinstalować....
Grzegorz M.:
[0] => Array
[0] => />W dniach 26-27 marca 2011 r. w kinie Sokół [1] => Array
[0] => W dniach 26-27 marca 2011 r. w kinie Sokół w

po pierwsze: dla Ciebie istotne są pola od 1 wzwyż. $arr[0] omiń - wyniki zaczynają się od $arr[1] wzwyż.

po drugie - wzorzec jest tak zrobiony, że nic dziwnego, że łapie jak największy fragment pasujący do niego...

masz dwa wyjścia - możesz po nawiasie () dać dodatkowy warunek co do długości dopasowanego stringu - jeśli wiesz, że nagłówki mają zawsze np. nie więcej niż 300 znaków, możesz dać: ([^*]+){1,300} - wtedy masz pewność, że nie zostanie "zagarnięty" następny rekord
drugie wyjście - wewnątrz nawiasu () możesz umieścić warunek wykluczający pojawienie się znaków ]] w dopasowanym stringu (lub dowolnego innego charakterystycznego ciągu znaków, który występuje w przestrzeni pomiędzy kolejnymi informacjami)
Piotrek Kaźmierczak

Piotrek Kaźmierczak sky is the limit...

Temat: Reg exp - czyli wyciąganie summary z rss :-)

proponuje

preg_match_all('/<summary type="html"\s*>\s*<!\[CDATA\[(.*?)\]\]>\s*<\/summary> /', $wejscie, $wyjscie, PREG_SET_ORDER);

wówczas w $wyjscie[n][1] powinno być to co Cie interesuje
(\s* dodane dla pewności jakby się pojawiły kiedyś jakieś spacje tam)

konto usunięte

Temat: Reg exp - czyli wyciąganie summary z rss :-)

Grzegorz M.:
Krótko i na temat:

a) jak ktoś może zaproponować gotową klasę pobierającą rss/atom do tablic;
b) rozwiązanie problemu z reg exp:

Na podstawie kanału onetowego, chcę wyciągnąć zawartość summary:

<entry>
<title>Bonawentura.org - Festiwal Podróży i Przygody</title>
<link
> href="http://przewodnik.onet.pl/globtroter/imprezy/bonawenturaorg-festiwal-podrozy-i-przygody,1,4080296,artykul.html"
rel="alternate" ></link>
<id>urn:uuid:3ca24bdd-c145-585b-6fb7-2ba01b191fa2</id>
<updated>2011-03-26T08:30:00Z</updated>
<summary type="html" ><![CDATA[<img hspace="5"
> src="http://m.onet.pl/_m/0686f28d3419b0e4c9a5cbf6d9d0f97e,3,1.jpg"
align="left" />W dniach 26-27 marca 2011 r. w kinie Sokół w Starym Sączu odbędzie się pierwsza edycja Festiwalu Podróży i Przygody Bonawentura.org. Zapowiada się prawdziwe święto wszelkiej maści włóczykijów, niepoprawnych marzycieli i ludzi ciekawych świata.]]></summary>
</entry>
<entry>
<title>Podlaskie spotkania z podróżami</title>
<link
> href="http://przewodnik.onet.pl/globtroter/imprezy/podlaskie-spotkania-z-podrozami,1,4159675,artykul.html"
rel="alternate" ></link>
<id>urn:uuid:4af154e0-31e2-c078-9539-025210294417</id>
<updated>2011-03-18T08:30:00Z</updated>
<summary type="html" ><![CDATA[<img hspace="5"
> src="http://m.onet.pl/_m/705eeb4081aa5ef936e126b461a3988b,3,1.jpg"
align="left" />W dniach 18-20.03.2011 w ramach IV Podlaskich Targów Turystycznych w Białymstoku odbędą się „Podlaskie spotkania z podróżami”.]]></summary>
</entry>

próbuję poprzez

preg_match_all('/\/>([^*]+)\.\]\]>/', '{{your data}}', $arr, PREG_PATTERN_ORDER);

otrzymuję:

Array
(
[0] => Array
(
[0] => />W dniach 26-27 marca 2011 r. w kinie Sokół w Starym Sączu odbędzie się pierwsza edycja Festiwalu Podróży i Przygody Bonawentura.org. Zapowiada się prawdziwe święto wszelkiej maści włóczykijów, niepoprawnych marzycieli i ludzi ciekawych świata.]]></summary>
</entry>
<entry>
<title>Podlaskie spotkania z podróżami</title>
<link
> href="http://przewodnik.onet.pl/globtroter/imprezy/podlaskie-spotkania-z-podrozami,1,4159675,artykul.html"
rel="alternate" ></link>
<id>urn:uuid:4af154e0-31e2-c078-9539-025210294417</id>
<updated>2011-03-18T08:30:00Z</updated>
<summary type="html" ><![CDATA[<img hspace="5"
> src="http://m.onet.pl/_m/705eeb4081aa5ef936e126b461a3988b,3,1.jpg"
align="left" />W dniach 18-20.03.2011 w ramach IV Podlaskich Targów Turystycznych w Białymstoku odbędą się „Podlaskie spotkania z podróżami”.]]>
)

[1] => Array
(
[0] => W dniach 26-27 marca 2011 r. w kinie Sokół w Starym Sączu odbędzie się pierwsza edycja Festiwalu Podróży i Przygody Bonawentura.org. Zapowiada się prawdziwe święto wszelkiej maści włóczykijów, niepoprawnych marzycieli i ludzi ciekawych świata.]]></summary>
</entry>
<entry>
<title>Podlaskie spotkania z podróżami</title>
<link
> href="http://przewodnik.onet.pl/globtroter/imprezy/podlaskie-spotkania-z-podrozami,1,4159675,artykul.html"
rel="alternate" ></link>
<id>urn:uuid:4af154e0-31e2-c078-9539-025210294417</id>
<updated>2011-03-18T08:30:00Z</updated>
<summary type="html" ><![CDATA[<img hspace="5"
> src="http://m.onet.pl/_m/705eeb4081aa5ef936e126b461a3988b,3,1.jpg"
align="left" />W dniach 18-20.03.2011 w ramach IV Podlaskich Targów Turystycznych w Białymstoku odbędą się „Podlaskie spotkania z podróżami”
)

)

a chciałbym pobrać zawartość od /> do ]]> - jak widać wyżej, na znaku ]]> się nie zatrzymuje w pierwszym wystąpieniu

Kto pomoże ?


preg_match("/<summary (.*?)>(.*?)<\/summary>/", $text, $out);

echo $out[2];

;)
Grzegorz M.

Grzegorz M. www.avatec.pl

Temat: Reg exp - czyli wyciąganie summary z rss :-)

zastosowałem sie do rady piotra i otrzymałem wyniki, które mnie interesowały !! Wielkie dzięki - co do simplexml - czy obecnie wszystkie serwery to oferują ? bo przyznam szczerze, że nigdy nie korzystałem z tego. Wiele gotowych klas testowałem, jednak onet dziwnie serwuje swoje rsski, i tylko rayfeedreader był w stanie z testowanych odczytać wybrane przezemnie rsski - problem pojawiał się tylko, gdyż rsskę wrzucał do stringu, a ja chciałem do tablicy, aby móc w jakiś sposób prosty ograniczyć pobieraną ilość.
Wojciech Soczyński

Wojciech Soczyński Programista
eksplorator -
blog.wsoczynski.pl

Temat: Reg exp - czyli wyciąganie summary z rss :-)

Z tego co mi się zdaję, zarówno SimpleXML jak i DOMDocument są domyślnie włączone w każdej dystrybucji PHP.
Piotrek Kaźmierczak

Piotrek Kaźmierczak sky is the limit...

Temat: Reg exp - czyli wyciąganie summary z rss :-)

jeszcze pamiętaj jak stosujesz wyrażenia regularne dla jakiegoś takiego pliku, nieraz warto zastosować:

$wyjscie= preg_replace("/\r/", " ", $wyjscie);
$wyjscie= preg_replace("/\n/", " ", $wyjscie);


bo z tego co się orientuję (.*?) nie obejmuje właśnie znaków nowej linii i mogą później pojawić się problemy.

Pzdr
Piotrek Kaźmierczak

Piotrek Kaźmierczak sky is the limit...

Temat: Reg exp - czyli wyciąganie summary z rss :-)

Zrobię małego off-topa może, pisałem na forum prawa komputerowego i zero odzewu...

Orientujecie się jak to jest jeśli strona nie udostępnia kanału RSS, a pobierasz jakieś informacje z tej strony (tak jak w rozważanym przykładzie, lub jakieś newsy, oferty pracy, aukcje, etc) i umieszczasz je na swojej stronie (z zachowaniem informacji - odnośnika - do źródła).
Chodzi mi od strony prawnej jak to wygląda? Trzeba mieć zgodę jakaś or sth?
Czy można tak robić bez konsultacji żadnej (w końcu robisz darmową reklamę itp)
Wojciech Soczyński

Wojciech Soczyński Programista
eksplorator -
blog.wsoczynski.pl

Temat: Reg exp - czyli wyciąganie summary z rss :-)

Jest chyba jakiś przepis na to, ale generalnie na re-publikacje (czyli dosłowne umieszczenie czegoś) trzeba mieć zgodę. Natomiast jeżeli używasz informacji z jakiegoś zewnętrznego źródła np. w artykule, cytujesz etc to link wystarczy.

konto usunięte

Temat: Reg exp - czyli wyciąganie summary z rss :-)

o_O

konto usunięte

Temat: Reg exp - czyli wyciąganie summary z rss :-)

Piotrek Kaźmierczak:
jeszcze pamiętaj jak stosujesz wyrażenia regularne dla jakiegoś takiego pliku, nieraz warto zastosować:

$wyjscie= preg_replace("/\r/", " ", $wyjscie);
$wyjscie= preg_replace("/\n/", " ", $wyjscie);


bo z tego co się orientuję (.*?) nie obejmuje właśnie znaków nowej linii i mogą później pojawić się problemy.

To akurat nie jest problem.

Opcje /m i /s twoim przyjacielem:

http://www.php.net/manual/en/reference.pcre.pattern.mo...
Robert P.

Robert P. Senior PHP Developer

Temat: Reg exp - czyli wyciąganie summary z rss :-)

Po co się bawić z preg-ami?

użyj simple xml jak wcześniej już pisali.. Simple XML jest powszechne w PHP5

Możesz też użyć klasy Zend-a

http://framework.zend.com/manual/en/zend.feed.consumin...

co do rega*

to możesz użyć preg_match_all i zrobić coś ala

/<summary>.*?<\/summary>/ i potem usunąć cdate z tego albo napisać wyrażenie dla cdaty bardziej dokładne

coś w stylu tego <summary.*?CDATA\[(.*?)\]\]><\/summary> oczywiście z modifikatorem ignorującym nowe linie. Jednakże, mimo wszystko uważam, że simple xml będzie tutaj najlepszym rozwiązaniem :)Robert Podwika edytował(a) ten post dnia 15.03.11 o godzinie 00:02
Tobiasz Glazar

Tobiasz Glazar Front-End Developer

Temat: Reg exp - czyli wyciąganie summary z rss :-)

Grzegorz M.:
Krótko i na temat:

a) jak ktoś może zaproponować gotową klasę pobierającą rss/atom do tablic;

Do obiektów:
http://simplepie.org/



Wyślij zaproszenie do