Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MSSQL]pobieranie+zapis+wyswietlanie
Forum PHP.pl > Forum > Przedszkole
shtoc
Czy moze mi ktos napisac krok po kroku jak napisac taki skrypt ktory pobieral by filmiki wraz z opisem z wrzuta.pl zapisywal je+opis(informacje dotyczace filmiku) i potem chcialbym umieszczac to w bazie i wyswietlac na www (nie chcem kodu, przewertowalem forum)
b4x
1. Napisanie klasy np. parsera.
2. Napisanie klasy obsługującej wyszukiwanie.
3. Napisanie klasy która będzie zapisywać pobrane dane w bazie.
4. Połączenie tego wszystkiego w 1 smile.gif
shtoc
Cytat(b4x @ 24.11.2008, 11:57:21 ) *
1. Napisanie klasy np. parsera.


co to?? do czego to??
b4x
Takie coś co będzie "przerabiało" treść strony, na taką treść jaką Ty chcesz otrzymać.

np. Chcesz uzyskać wyniki wyszukiwania a z nich np. tytuł , rozmiar, czas trwania - za pomocą parsera musisz te informacje wyciągnąć.


Masz tutaj przykładową funkcję moją


  1. <?php
  2. /**
  3.     * Pobierz wyniki z wrzuty.
  4.     *
  5.     * @param        string        $query
  6.     * @return        array        $wynik
  7.     */
  8.  
  9.    function __wyniki($query, $page="0") {
  10.  
  11.            $strona = file_get_contents('http://www.wrzuta.pl/search.php?type=a&words='.urlencode($query).'&page='.$page);
  12.  
  13.            $wyrazenie = '#<div class="title"><a href=".*?wrzuta.pl/audio/([A-z0-9]+)/.*">(.*)</a></div>s+<div class="more"><b>(.*)</b> .* <b>(.*)</b>#';
  14.  
  15.            preg_match_all($wyrazenie, $strona, $wyniki);
  16.  
  17.  
  18.                for($i=0;$i<count($wyniki[1]);$i++) {
  19.  
  20.  
  21.                    $wynik[$i]['id'] = $wyniki[1][$i];
  22.  
  23.                    $wynik[$i]['tytul'] = $wyniki[2][$i];
  24.  
  25.                    $wynik[$i]['czas'] = $wyniki[3][$i];
  26.  
  27.                    $wynik[$i]['rozmiar'] = $wyniki[4][$i];
  28.  
  29.                }
  30.  
  31.  
  32.            return $wynik;
  33.    
  34.    }
  35. ?>
shtoc
Dziekuje zaraz przeanalizuje!! pomogł dodalem smile.gif

uruchomienie tego skryptu nie daje zadnych wynikow??

rozumem ze to tylko czesc skryptu dla przykladu??
b4x
Daje wyniki, zwraca tablicę.


W przypadku tej funkcji - zwraca wyniki dla plików audio.

Tablicę w postaci id, tytul, czas, rozmiar


możesz przetestować np.

  1. <?php
  2. print_r(__wyniki('mp3', 1)); // zwróci wyniki w postaci tablicy dla słowa "mp3" - strona 1.
  3. ?>
shtoc
a no dziala bardzo fajnie smile.gif
dzieki dzieki!!
to teraz trzeba walczyc dalej!! przydalo by sie teraz zeby do tego był filmik/mp3
b4x
Spójrz na źródło wrzuty np. : http://www.wrzuta.pl/search.php?type=v&words=video

Z tego co zauważyłem na "pierwszy rzut" oka, to wystarczy zmienić 2 rzeczy.

  1. <?php
  2. $strona = file_get_contents('http://www.wrzuta.pl/search.php?type=a&words='.urlencode($query).'&page='.$page); // spójrz na type=a
  3.  
  4.  
  5.  
  6. // dla video będzie to type=v, czyli:
  7. $strona = file_get_contents('http://www.wrzuta.pl/search.php?type=v&words='.urlencode($query).'&page='.$page);
  8.  
  9. // no i wyrażenie dla video
  10.  
  11. $wyrazenie = '#<div class="title"><a href=".*?wrzuta.pl/film/([A-z0-9]+)/.*">(.*)</a></div>s+<div class="more"><b>(.*)</b> .* <b>(.*)</b>#';
  12. ?>
shtoc
zaraz bede testowl!! dzieki!!

no fajnie!! a teraz mam takie pytanie bo to trzeba by pakowac potem do bazy!!
to kazdy rekord czyli opis kazdego filmiku w osobnym pliku czy taka paczka po 16 bodajrze tez bedzie ok??
erix
IMHO lepiej osobno, będzie łatwiej zarządzać.
shtoc
<?php
function wyniki($query, $page="0")
{
$strona = file_get_contents('http://www.wrzuta.pl/search.php?type=v&words='.urlencode($query).'&page='.$page);
$wyrazenie = '#<div class="title"><a href=".*?wrzuta.pl/film/([A-z0-9]+)/.*">(.*)</a></div>\s+<div class="more"><b>(.*)<\/b> .* <b>(.*)<\/b>#';

preg_match_all($wyrazenie, $strona, $wyniki);


for($i=0;$i<count($wyniki[1]);$i++) {


$wynik[$i]['id'] = $wyniki[1][$i];

$wynik[$i]['tytul'] = $wyniki[2][$i];

$wynik[$i]['czas'] = $wyniki[3][$i];

$wynik[$i]['rozmiar'] = $wyniki[4][$i];

}


return $wynik;

}

$a=print_r(wyniki('mały', 1));
file_put_contents('wrzuta1.txt', $a);
?>

dlaczego zapis nie dziala??
otrzymuje w pliku 1 (czyli ze "true"??)
dlaczego nie zapisuje wyniku??

for($f=1; $f<=10; $f++)
{
print_r('Strona'.$f);
$a=print_r(wyniki('film', $f));
print_r('<br /><br />');
}

dorzucilem petle do zmieniania stron ale jak dla zapytania "film" bylo 100 stron dostalem przy wywolaniu blad :
Fatal error
: Maximum execution time of 30 seconds exceeded in C:\Program Files\WebServ\httpd\szymon.php on line 4

to jakes przekroczenie czasu?? wykonywania skryptu?? mozna wydluzyc?? jak gdzie??
nitek
błąd mówi dokładnie o tym co piszesz, wydłużyć działanie skryptu można tak:
http://pl.php.net/set_time_limit
shtoc
ok wydluzylem i dziala!!
jak sie nie myle to 0 daje max czas ile jest potrzebne na wykonanie skryptu??(bo tez dziala)

a jak zrobic zapis do pliku kazdej ze stron??

zrobilem:
file_put_contents('C:\Program Files\WebServ\httpd\wrzuta\'w'.$f.'.txt', $a);
ale nie dziala sad.gif
tworzy 100 plikow z wartoscia : "1"

a ja bym chcial zeby w kazdym pliku zapisana byla odpowiednia strona!
nitek
dajesz coś takiego:
Kod
$a=print_r(wyniki('mały', 1));
file_put_contents('wrzuta1.txt', $a);

pierwsza myśl, która się nasuwa, to to, że do zmiennej $a przypisujesz wynik działania funkcji print_r, a potem tą zmienną wstawiasz do pliku. może to ona zwraca Ci 1 (print_r)? w manualu jest opisany dodatkowy parametr, który pozwala na zwrócenie wartości drukowanego na ekran tekstu - sprawdź tą opcję.
shtoc
jak sie nie myle to powinienem dodac parametr "true"

$a=print_r(wyniki('film', $f ),true);

i teraz dziala!!! nawet fajne ze zapisuje kazda strone w osobnym pliku!!
myslalem ze bedzie to tak ze zapisze 1 w 1 a w 2 pliku bedzie 1 i 2 strona ale tak nie jest i jest fajnie smile.gif

tylko ze teraz zwraca mi na stronie tylko napisy :
Strona 1

Strona 2

itd.
ale w sumie to ok!!

a to takie pytanko teraz!!
bo w kazdym pliku mam po 16 rekordow!!
a ktos mi napisal ze w bazie lepiej by bylo miec jeden rekord w 1 pliku!!

jak to zrobic?? i czy warto??
czy teraz zrobic cos do wczytywania plikow wyciagania z nich ciagów i zapisz poszczegolnych do poszczegolnych plikow??

czy jakos inaczej??

ktos cos podpowie??
erix
Nie wiem, czy masz na myśli płaską bazę danych (w pliku), czy SQL.

Cytat
bo w kazdym pliku mam po 16 rekordow!!
a ktos mi napisal ze w bazie lepiej by bylo miec jeden rekord w 1 pliku!!

Napisałem odnośnie SQL. Jeśli chodzi o pliki, to musisz rozważyć - odczyt będzie znacznie szybszy, ale modyfikacja poszczególnych rekordów będzie coraz bardziej czasochłonna wraz z przyrostem liczby rekordów.

Ogólnie proponowałbym przejście na jakąś bazę danych, chociażby SQLite. :]
shtoc
tak to bedzie zawarte w bazie!!

wiec w gre wchodzi 1 rekord = 1 plik!!

a jakis pomysl na zrealizowanie tego z istniejacego kodu??
erix
Ale jaka baza, SQL, czy w pliku? tongue.gif
shtoc
SQL
tak wyglada teraz zapisany kazdy plik!!

Array
(
[0] => Array
(
[id] => 60LmxLFfB2
[tytul] => Fo fo fo Fristajlo FILM
[czas] => 00:54
[rozmiar] => 2,42 MB
)


[1] => Array
(
[id] => 9bhESDmuF0
[tytul] => Jeckyll &amp; Hyde Freefall &quot;LEGO FILM&qu...
[czas] => 04:07
[rozmiar] => 10,8 MB
)


[2] => Array
(
[id] => 1XVX6WNdzn
[tytul] => film fajny
[czas] => 00:25
[rozmiar] => 1,26 MB
)


[3] => Array
(
[id] => eZXNXuWAg9
[tytul] => Gothic Film
[czas] => 02:03
[rozmiar] => 6,27 MB
)


[4] => Array
(
[id] => dEwUOjoP5S
[tytul] => Film o Janie Pawle 2
[czas] => 03:58
[rozmiar] => 10,6 MB
)


[5] => Array
(
[id] => 80igiq5sRS
[tytul] => dominikanie - film powolaniowy
[czas] => 06:09
[rozmiar] => 13,9 MB
)


[6] => Array
(
[id] => txrWgOV628
[tytul] => Bardzo smutny film - the sims 2 video
[czas] => 02:28
[rozmiar] => 6,48 MB
)


[7] => Array
(
[id] => 3KgcK5pwyZ
[tytul] => Counter Strike : Film nagrany w 5 minut
[czas] => 05:28
[rozmiar] => 24,1 MB
)


[8] => Array
(
[id] => 3pvdV4Nv3p
[tytul] => Film z The Sims 2
[czas] => 00:46
[rozmiar] => 2,34 MB
)


[9] => Array
(
[id] => 6lRh9Akjc7
[tytul] => Dzieci Rewolucji Sobkowicz's film
[czas] => 02:17
[rozmiar] => 12,7 MB
)


[10] => Array
(
[id] => 3QVltZLVOr
[tytul] => Film z wycieczki do Niemiec ;]
[czas] => 00:55
[rozmiar] => 4,69 MB
)


[11] => Array
(
[id] => t4XPN59m0r
[tytul] => Teksty z polskich filmów - parodia Naruto
[czas] => 01:22
[rozmiar] => 3,24 MB
)


[12] => Array
(
[id] => 7D2dBKaR8B
[tytul] => FIlm
[czas] => 03:03
[rozmiar] => 10,4 MB
)


[13] => Array
(
[id] => cMBV8sPoj8
[tytul] => straszny film 2 egzorcysta
[czas] => 03:04
[rozmiar] => 8,22 MB
)


[14] => Array
(
[id] => q7lGkybOg7
[tytul] => TM Tuning malopolska pierwszy film klubu
[czas] => 04:29
[rozmiar] => 13,5 MB
)


[15] => Array
(
[id] => wDePhvsQWf
[tytul] => Upadek Ikara film
[czas] => 14:59
[rozmiar] => 55,1 MB
)

)
erix
Cytat
tak wyglada teraz zapisany kazdy plikexclamation.gif


Bez urazy, ale musisz się drzeć?

To, co podałeś, to nie jest SQL, tylko - jak podejrzewam - baza z pliku... Czemu nie przerzucisz się na np. MySQL/SQLite?
shtoc
nie dre sie ;p

no nie wiem nie jestem w tym za bardzo oblatany.
no wiec przechodzac do rzeczy to kazali mi zrobic zapisywanie do pliku filmikow z wrzuty i dodawania do nich informacji.
myslalem ze na poczatek dobrez bedzie zapisywac te informacje w plikach.
widze ze jednak nie sad.gif
erix
W plikach będzie bez sensu, bo będzie problem z zarządzaniem.

Poza tym, wrzuta tak Tobie nie popuści, ban będzie prędzej, czy później. tongue.gif
shtoc
hmmm to juz nie rozumiem?? nie zapisywac danych do plikow questionmark.gif wysylac je bezposrednio do bazy za pomoca skryptu??
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.