Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [inne][PHP]Pobieranie linii po znalezionym słowie na stronie
Marek607
post 14.06.2014, 10:07:05
Post #1





Grupa: Zarejestrowani
Postów: 42
Pomógł: 3
Dołączył: 4.03.2010

Ostrzeżenie: (0%)
-----


Witajcie,

Napisałem sobie prosty skrypt który szuka danego słowa na stronie:

  1. <?php
  2. $data = file_get_contents('http://www.energa-operator.pl/centrum_informacji/planowane_wylaczenia.xml?id=1000');
  3. $regex = '/Naruszewo/';
  4.  
  5. if (preg_match($regex, $data)) {
  6. echo "Nie będzie prądu ;)";
  7. } else {
  8. echo "Jest ok, prad będzie cały czas ;)";
  9. }
  10. ?>


W jaki sposób mogę po znalezieniu tego słowa pobrać linijkę przed tym slowem, linijke z tym słowem i lonijke po tym słowie?
Nie mam zbytnio pojęcia jak się do tego zabrać - myślałem o pobraniu całej strony, ponumerowaniu linijek i wtey znalezienie numeru linii i na tej podstawie pobranie przed i po - dobrze myśle?

Dzięki za porady/wskazówki.

Go to the top of the page
+Quote Post
kreatiff
post 14.06.2014, 10:59:52
Post #2





Grupa: Zarejestrowani
Postów: 324
Pomógł: 105
Dołączył: 7.08.2012

Ostrzeżenie: (0%)
-----


Linijkę czego? Kodu? Tekstu? Sprecyzuj, a najlepiej podaj fragment tekstu/kodu z zaznaczeniem co chcesz dokładnie z niego wyciągnąć oprócz nazwy miejscowości.
Zapewne nieco bardziej rozbudowane wyrażenie regularne sobie z tym poradzi.

Zauważ też, że obecne poszukiwanie ciągu "Naruszewo" jest nieefektywne. Jeśli przeszukujemy tekst pod kątem jakiegoś ciągu (czy występuje, czy nie), wystarczy użyć strpos. Wiadomo, przy przeszukaniu raz na minutę nie robi to żadnej różnicy, ale skoro istnieją funkcje do tego stworzone, to warto z nich korzystać.

Ten post edytował kreatiff 14.06.2014, 11:04:47
Go to the top of the page
+Quote Post
Marek607
post 14.06.2014, 11:23:10
Post #3





Grupa: Zarejestrowani
Postów: 42
Pomógł: 3
Dołączył: 4.03.2010

Ostrzeżenie: (0%)
-----


Linijki tekstu
W przypadku "Naruszewo" chciałbym by pobrało:

Kod
Gmina Naruszewo
Drochowo ze stacji trafo S7-187
W dniu 17.06.2014r. w godz. 08:00 - 17:00


Czyli 1 linijke przed ( akurat tutaj pusta) i 2 linijki po linii z tym słowem.

O strpos poczytam, dzięki.

Go to the top of the page
+Quote Post
ziolo
post 14.06.2014, 12:19:09
Post #4





Grupa: Zarejestrowani
Postów: 82
Pomógł: 20
Dołączył: 17.01.2009
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Polecam bibliotekę phpQuery(https://code.google.com/p/phpquery/)

  1. include 'phpQuery-onefile.php';
  2. phpQuery::newDocumentFileHTML('http://www.energa-operator.pl/centrum_informacji/planowane_wylaczenia.xml?id=1000');
  3. $elem = pq('.dlAreas:contains("Naruszewo")');
  4. echo $elem->html().'<br/>';
  5. echo $elem->next()->html().'<br/>';
  6. echo $elem->next()->next()->html().'<br/>';
Go to the top of the page
+Quote Post
kreatiff
post 14.06.2014, 19:43:27
Post #5





Grupa: Zarejestrowani
Postów: 324
Pomógł: 105
Dołączył: 7.08.2012

Ostrzeżenie: (0%)
-----


Marek, tam nie ma żadnej pustej linii nad nazwą miejscowości. Cała treść to paragrafy, z nadanymi stylami.
Nas interesuje jedynie kod (to jego pakujesz do zmiennej), a nie tylko widoczna treść strony.

Masz tak na szybko z pominięciem bibliotek zewnętrznych:
  1. preg_match('#Naruszewo</p><p .*?>(.*?)</p><p .*?>(.*?)</p>#su', $data, $match);
  2. echo'<pre>',var_dump($match),'</pre>';
  3. // $match[1] zawiera Drochowo...
  4. // $match[2] zawiera W dniu..., wystarczy jeszcze dodać trim, ale białe znaki do wyrażenia regularnego


Ten post edytował kreatiff 14.06.2014, 19:44:20
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 12.07.2025 - 22:49