Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Złączenie wszystkiego w jedną całość
Forum PHP.pl > Forum > PHP
daggerinho
No więc zaczynamy. Tworzę serwis o śmiesznej grze - Tibia, ale, że to jest jedyna gra w jaką czasami pogrywam to padło właśnie na nią. Więc na początek chce zrobić takią podstronę, skrpt, który po wpisaniu swojego nicku będzie pobierał ze strony tibia.com informacje na temat postaci o tym nicku i wyświetlał je u mnie na stronie.

Z pobieraniem informacji miałem dylemat czy użyć cURL'a czy normlanego non-wrapperowego sposobu. Padło na ten drugi.
  1. <?php
  2. $postac = $_POST['postac'];
  3. ...
  4. ?>


Oczywiście jest to połączone z formularzem html'a. Jedyny problem jest taki, że pobiera on mi cały layout strony, i podpina go pod ten plik, w którym mam powyższy skrypt PHP. Teraz utknąłem bo nie wiem jak rozwiązać pewną rzecz, a mianowicie:
Gdy skrypt już pobierze tą stronę, to następny skrypt ma za zadanie wybrać z tej strony każdą informację o postaci osobno za pomocą wyrażeń regularnych (preg_match itd). No tylko, że każda postać ma inną nazwe, poziom itd. czyli każda postać będzie miała inny html. I teraz nie wiem jak to rozwiązać żeby było najlepiej i najprościej. Niestety chyba w zmiennej nie jestem w stanie zamknąć takiej ilosci html-a... zawsze wyskakuje jakiś błąd parsera... Proszę o pomoc.
Pozdrawiam.
darko
Cytat
Z pobieraniem informacji miałem dylemat czy użyć cURL'a czy normlanego non-wrapperowego sposobu. Padło na ten drugi.

normlany non-wrapperowy sposób - jak widać - też korzysta z curla.

Cytat
za pomocą wyrażeń regularnych (preg_match itd).

przynajmniej wiesz, gdzie szukać

Cytat
No tylko, że każda postać ma inną nazwe, poziom itd. czyli każda postać będzie miała inny html.

Czy aby na pewno ?

Problem nie sprowadza się do "zamknięcia jakiejś ilości htmla w zmiennej", ale do napisania odpowiedniego wyrażenia regularnego. Na podstawie danych, które podajesz nie da się takowego utworzyć. Opisz dokładniej swój problem.
jareeny
Hmm. Tak po patrzeniu na losową stronę gracza:
http://www.tibia.com/community/?subtopic=c...ikapo+Eleandril

Spoglądając w źrodło, wydaje mi się, że musisz za pomocą wyrażenia wyciągnąc wszystko spomiędzy <tbody></tbody> i potem dalej parsować tak, żeby uzyskać wszystkie informacje
Wicepsik
Nie lepiej zwykły file_get_contents ?

Dam Ci podpowiedz.

  1. $postac = 'Pikapo Eleandril';
  2. $page = file_get_contents('http://www.tibia.com/community/?subtopic=characters&name='.$postac);
  3. preg_match("#<TD WIDTH=20%>Name:</TD><TD>([a-zA-Z ']+)</TD>#", $page, $nick);
  4.  
daggerinho
@Wicepsik

No tak, Twoj sposób jest całkiem dobry ale pozostaje jedna kwestia. Funkcja, którą podałeś zwraca Array () no czyli nic, bo w subject nie ma nicku postaci, a jak wiadomo każda postać ma inny nick czyli należałoby zamknąć ten kod html w jakiejś zmiennej albo coś... nie wiem właśnie jak zrobić, żeby subject sam sie dobierał w zależności od kodu html każdego z osobna gracza...
Oczywiście mój problem może być banalny, i za to przepraszam ale ja sobie z tym poradzic nie mogę :|.
jareeny
Ale HTML "opakowujący" ten nick i inne rzeczy nie zmienia się i możesz to wszystko wyciągnać wyrażeniem, więc ja nie wiem o co chodzi... no chyba właśnie po to są wyrażenia regularne, albo jestem źle poinformowany :/
daggerinho
Jarenny, ale ten preg_match nic nie wyciąga bo po instrukcji print_r($nick) na ekran printuje się Array(0) i tyle, a nie Pikapo Eleandril:|

  1. <?php
  2. $postac = 'Pikapo Eleandril';
  3. $page = file_get_contents('http://www.tibia.com/community/?subtopic=characters&name='.$postac);
  4. preg_match("#<TD WIDTH=20%>Name:</TD><TD>([a-zA-Z ']+)</TD>#", $page, $nick);
  5. ?>



@Edit...
Okej, powyższy skrypt był poprawny jednak nie działał on z powodu spacji, w jedno członowych nickach wszystko działa.
Dziękuje za pomoc.
Wicepsik
U mnie działa.
emtiej
  1. <?PHP
  2.  
  3. $postac = 'Guaio';
  4.  
  5. $page = file_get_contents('http://www.tibia.com/community/?subtopic=characters&name='.$postac);
  6.  
  7. $info = preg_match("#<TD WIDTH=20%>Name:</TD><TD>([a-zA-Z ']+)</TD>#", $page, $nick);
  8.  
  9. print_r($nick);
  10.  
  11. ?>


Wynik to:

Kod
Array (     [0] => Name:Guaio     [1] => Guaio )

Czyli działa. Rozwiązanie proste i skuteczne. smile.gif

Ja dodałbym jeszcze jakąś instrukcję warunkową, w zmiennej $postac nie może być spacji, trzeba spacje zamienić na + i kiedy będzie występowała spacja to wyrażenie regularne będzie nieco inaczej wyglądało.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.