Wycięcie kilku elementów z pliku ( na innym hoście )

karololszak

Użytkownik
Dołączył
Marzec 4, 2008
Posty
130
Witam. Chciałbym zrobić skrypt który wyświetla Te informacje. Jest tam napisane, jaka piosenka leci aktualnie w RMF MAXXX , jaka będzie lecieć, i jeszcze kolejna . Jakoś doszedłem do pliku http://static.rmf.pl/rmf_fm/stacje_gramy_6.txt ( jego treść się zmienia dynamicznie ).

Teraz przykład danych :
{'czas': '2009-04-12 22:25:35', 'tczas': '1239567935',
'teraz': {'wyk': 'Soulja Boy','id_wyk': '7032','d_b': '0','tyt': 'Kiss Me Thru the Phone','ply': 'iSouljaBoyTellem','idp': '18980', 'wyk_ply': 'Soulja Boy','id_wyk_ply': '7032', 'st': '2009-04-12 22:24:28', 'tst': 1239567868, 'skojarz': 1, 'rok': '2009', 'idu': '30386','m_id_mono': '0','m_id_poli': '0','m_id_mp3': '0'},
'pozniej': {'wyk': 'Madonna','id_wyk': '98','d_b': '1','tyt': 'Sorry','ply': 'Confessions On A Dance Floor','idp': '2140', 'wyk_ply': 'Madonna','id_wyk_ply': '98', 'st': '2009-04-12 22:29:01', 'tst': 1239568141, 'skojarz': 1, 'rok': '2005', 'idu': '4587','m_id_mono': '0','m_id_poli': '0','m_id_mp3': '0'},
'nastepnie': {'wyk': 'James Morrison / Nelly Furtado','id_wyk': '1092','d_b': '1','tyt': 'Broken Strings','ply': 'Songs For You, Truths For Me','idp': '16333', 'wyk_ply': 'James Morrison','id_wyk_ply': '1092', 'st': '2009-04-12 22:33:44', 'tst': 1239568424, 'skojarz': 1, 'rok': '2008', 'idu': '28043','m_id_mono': '0','m_id_poli': '0','m_id_mp3': '62712'}}[/b]

Chciałbym aby dane wyjściowe wyglądały mniej-więcej tak :
Teraz : Sulja Boy - Kiss Me Thru the Phone
Pozniej : Madonna - Sorry
Nastepnie : James Morrison / Nelly Furtado - Broken Strings[/b]

Czego użyć, aby to wykonać w takiej postaci ? ( najprzydatniejsze byłyby przykłady ) - wydaje mi się że wystarczyło by odpowiednio użyte str_replace
Dopiero zaczynam uczyć się php... [ Tak w ogóle to ja zaczynam się wszystkiego teraz uczyć xD ]
 

thc_flow

Zbanowany
Dołączył
Listopad 13, 2008
Posty
649
napisz własny parser formatu (no dobra, prościej mówiąc wystrczy że poszukasz w pętli pozycje " {'wyk': ' " i " ',' " i wyciągniesz tekst z pomiedzy nich do jakiejś zmiennej - funkcja substr() )
 

karololszak

Użytkownik
Dołączył
Marzec 4, 2008
Posty
130
Cześć, poszukałem info o tym substr(), sporo poczytałem, ale i tak nie umiałem nic zrobić tak aby działało ;p

Przekopałem chyba pół internetu z pomocą google, posklejałem trochę tu, trochę tam, i mam coś takiego : http://wklej.org/id/77859/

I uwaga, DZIAŁA
1_jupi.gif
emot.jupi.gif

Najpierw zrobiłem sobie zmienną z danymi tymi z przykładu, i wycinałem to co było po kolei xD

Potem było najgorsze - znaleźć gdzieś jakiś kod, który obsługiwał by pobieranie z innego hosta... ( i w dodatku taki, żebym umiał go pod siebie przerobić )



Aha - mógłbyś pomóc mi ten skrypt zoptymalizować ? Najlepiej jakby dało się wyciąć te informacje o płycie, bo mi to nie potrzebne, ale nie wiedziałem jakie jest oznaczenie niewiadomego ciągu znaków, więc sobie ominąłem xD ( próbowałem (.*?) i innych tworów ale się nie udawało ). Aha - i jestem [ prawie ] pewien, że dałoby się jakąś pętlą albo czymś wykasować wszystkie cyfry, ale nie wiedziałem jak ;p.

A tak to ogólnie jestem z siebie dumny, bo to chyba 3 skrypt php który zrobiłem i działa tak jak chcę ( i to bez błędów )
smile.gif
<
!!
 

widmo17

Były Moderator
Dołączył
Lipiec 16, 2007
Posty
1089
Nie kombinuj za takimi rzeczami jak str_replace przy dużych rzeczach, bo marnujesz sobie czas ;] lepiej poczytaj o regexpach (wyrażenia regularne) i preg_replace(). Dowolny ciąg znaków z tego co pamiętam w regexpach to ([^ ]+), cyfry - ([0-9]+), wszystkie znaki specjalne - nie mam pojęcia, ale pewnie gdzieś o tym jest xd Jak chcesz szybko to strzelasz preg_match_all do wzorca i gitara ;]

Tak btw to respekt dla Ciebie, że nie błagasz o wszystko tylko sam kombinujesz ;]
 

thc_flow

Zbanowany
Dołączył
Listopad 13, 2008
Posty
649
No wreszcie jakiś myślący stwór na tym forum
smile.gif
a tak poza tym to po prostu wydawało mi się że dla początkującego string replace jest po prostu łatwiejsze do obczajenia...
 

karololszak

Użytkownik
Dołączył
Marzec 4, 2008
Posty
130
!! Zrobiłem na preg_match_all, i znowu się udało
<
!!

Szukałem trochę, nie rozumiem jeszcze tych / \ - kiedy i jak mam ich używać, ale zrozumiałem resztę na tyle, że udało mi się coś wykodzić. ( i to nawet bez tych \ / )

Tu mój projekt : http://wklej.org/id/78950/


#Edit : Przerobiłem to na jedno preg_match_all

#Edit2 : Przerobiłem tak, że gdy nie ma którychś informacji, pokazuje Brak Danych
 

Magnefikko

Były Moderator
Dołączył
Maj 29, 2004
Posty
709
Miło jest widzieć rozwijającą się i głodną wiedzy duszę. Dobra odmiana po tych wszystkich ludzikach które codziennie banuję niemal płacząc nad poziomem xD
 

karololszak

Użytkownik
Dołączył
Marzec 4, 2008
Posty
130
Takie lekkie odświeżenie z mojej strony... : [ kilka pytań ]

1. Czym się różnią : preg_replace, ereg_replace i eregi_replace ( oprócz nazwą ;p [ i chyba składnią zapytania też ] )

2. Powiedzmy że "dorwałem" się do lepszego źródła
<
- klik
mam taki kod :
<DIV ID="List1241201702">20:15 Jay Sean Tonight /img/p2/telefon.gif
<DIV ID="List1241201995">20:19 Morris Desire </DIV><DIV ID="List1241202200">20:23 Britney Spears Womanizer </DIV><DIV ID="List1241202416">20:26 David Tavaré Hot Summer Night /img/p2/telefon.gif</DIV><DIV ID="List1241202627">20:30 Matt Pokora They Talk Sh#t About Me </DIV><DIV ID="List1241202823">20:33 Schiller / Peter Heppner Leben (I Feel You) </DIV><DIV ID="List1241203041">20:37 Akon Right Now (Na Na Na) /img/p2/telefon.gif</DIV>[/b][/quote] Dane wyjściowe wyglądają tak :
6fv88j.jpg


Z wyciągnięciem godziny nie ma problemu ;], gorzej z wykonawcą i tytułem. Gdy ustawiam filtr w " albo ' i tak się chrzani... ( rozwala się "cytat" ) próbowałem wstawiać te \ lub / przed znakami których nie powinno być, ale filtr jest i tak dalej nie poprawny...
Najgorszy dla mnie kawałek do przefiltrowania to http://wklej.org/id/85280/ ( pobieranie danych i wycinanie godziny ) -- miałem kod filtru, ale go wykasowałem bo nie działał, a potem zapisałem, no i go teraz nie ma ....
 

KangurX

Użytkownik
Dołączył
Lipiec 4, 2008
Posty
281
Nie wiem po co wlaczasz raportowanie bledow jak jest standardowo wlaczone.
 

karololszak

Użytkownik
Dołączył
Marzec 4, 2008
Posty
130
@widmo17 Faktycznie - też działa - dzięki. Nawet łatwiej zapamiętać.
smile.gif


@KangurX Wydaje mi się, że tylda ( ~ ) wyłącza - a ja chcę wyłączyć Notice [ nieraz mnie denerwują... ]

Pewnie zastanawiacie się, dlaczego robię tak, a nie inaczej ( sam tekst, bez kodu html ).
Otóż używam komunikatora AQQ, pewna osoba napisała fajną wtyczkę, która m.in. pozwala wyświetlać skrypty php. Niestety, jest jeden mankament - wyświetlają się jako opisy na liście kontaktów - przez co nie można wyświetlać html. :/

Wygląda to tak :
n36s7b.png



W sumie dzięki możliwościom tej wtyczki zacząłem się uczyć PHP - uczę się tego, co mi w danej chwili przydatne
<
I tak : zrobiłem kilka wersji skryptu do pokazywania stacji RMF MAXXX, skrypt do obsługi RSS, i multi do Naszej-Klasy - pokazuje czy masz wiadomość, znajomych online, i kto dodał ostatnio zdjęcie. Ten ostatni skrypt nie był mi tak bardzo przydatny ( aktualnie go nie używam ), ale wiem że niektórzy bez n-k żyć nie mogą ;p więc dla nich to zrobiłem... Przy okazji uczę się nowych rzeczy - Curl itd.... Wszędzie się opieram o google i php.net - tam jest chyba wszystko ;]
 

karololszak

Użytkownik
Dołączył
Marzec 4, 2008
Posty
130
Witam. Jako, że ciągle kontynuuję moją naukę PHP, a nie chcę nowego tematu zakładać, postanowiłem napisać tutaj. A mianowicie :
Chcę zrobić skrypt, który wyświetla co leci aktualnie na RMF MAXXX; sprawdzi, czy jest taki plik w serwisie wrzuta.pl, znajdzie link i przerobi go tak, że po kliknięciu od razu się pobierze.

Więc tak :

Co leci aktualnie na RMF MAXXX = zrobione.
Obrobienie tego ( bez wszystkich / \ < > , . & itd. ) = zrobione.
Sprawdzenie czy jest taki plik w serwisie wrzuta.pl = mam teorię, niestety w praktyce nie wychodzi...
Znalezienie linku = w sumie gotowe ( filtr ) - nie mogę sprawdzić, bo nie chce łączyć się z wrzutą...
Przerobienie linku = w sumie gotowe - wystarczy, że zamienię /audio/ na /sr/f/ i jest...

Czyli, głównym problemem jest sprawdzenie/wysłanie danych na wrzuta.pl
Zauważyłem, że adres wygląda tak :
Kod:
http://www.wrzuta.pl/szukaj/audio/{to czego szukamy}/1
Niestety, ni jak nie mogę się dostać - dostaję błąd 400 bad request
<

Próbowałem file_get_contents , tej mojej dziwnej metody, cURL'a , i nic ;( być może ( raczej na pewno ) robiłem coś źle i to dlatego.

mój kod - http://wklej.org/id/93279/txt ( najlepiej widać kod, gdy wklei się do jakiegoś edytora - przez przeglądarkę może wystąpić wrażenie niepotrzebnych spacji... )
 

adikx

Użytkownik
Dołączył
Maj 21, 2007
Posty
415
Zapomniałeś o spacjach. Przeglądarki automatyczni zmieniają to na znak specjalny url. Funckja w php od tego to chyba urlencode.
 

KangurX

Użytkownik
Dołączył
Lipiec 4, 2008
Posty
281
Kod:
$filtr = "|'wyk': '(.*)','id_wyk':(.*)'tyt': '(.*)','ply':|i"; // Jak juz uzywasz ' to juz w calej linijce
echo '[url]http://www.wrzuta.pl/szukaj/audio/'[/url] . $dla . '/1\n\n'; //To samo.
$wrzuta = file_get_contents('[url]http://www.wrzuta.pl/szukaj/audio/'[/url] . $dla . '/1'); //To samo.
 

karololszak

Użytkownik
Dołączył
Marzec 4, 2008
Posty
130
@KangurX :
Kod:
$filtr = "|'wyk': '(.*)','id_wyk':(.*)'tyt': '(.*)','ply':|i"; // Jak juz uzywasz ' to juz w calej linijce
[/b]
- To czemu działa ?! Jakbyś nie zauważył, to jest to filtr - i jest on w " ...

Kod:
echo '[url]http://www.wrzuta.pl/szukaj/audio/'[/url] . $dla . '/1\n\n'; //To samo.
[/b]
- to czemu się wyświetla odpowiednio ?!

Kod:
$wrzuta = file_get_contents('[url]http://www.wrzuta.pl/szukaj/audio/'[/url] . $dla . '/1'); //To samo.
[/b]
- być może masz rację, ale wątpię... Wyświetla 400 Bad Request, a nie coś innego... równie dobrze mógłbym dać
Kod:
$wrzuta = file_get_contents('[url]http://www.wrzuta.pl/szukaj/audio/co[/url] szukam/1');
- wygląda na to, że wg. Ciebie to dobrze... i tu się mylisz - 400 Bad Request !!!!


Pisząc ten post, uświadomiłem sobie, co było źle - nie te ' o które KangurX mnie napominał, ale chyba częściowo to, co napisał adikx - ustawiłem sobie zamienienie spacji na %20 i działa... Teraz tylko przefiltrować to co jest zwracane... Podzielę się skryptem jak ustawię filtr...
 
Do góry Bottom