Pereiti prie turinio

Lapinskis

Patvirtinti nariai
  • Pranešimai

    665
  • Užsiregistravo

  • Lankėsi

  • Laimėta dienų

    2
  • Atsiliepimai

    100%

Reputacijos išklotinė

  1. Patinka
    Lapinskis sureagavo į Silke [PHP] Multi-language tinklalapi.   
    Gettext palaikymą turi net ir PHP. Ir jokių teršimų globaliom konstantom :)
  2. Patinka
    Lapinskis gavo reakciją nuo extremist Web scrapping naudojant PHP   
    Sveiki uždarbiečiai, jau vienur prisižadėjau, kad parašysiu šiek tiek apie web scrapping. Tai pirmas mano straipsnis šiame forume, todėl nemaišykit su žemėmis be pagrindo. Konstruktyvi kritika visada laukiama, o šiaip ir pasiginčyti galiu, jeigu atsiras žmonių, manančių, kad mano pateikti programinio kodo pavyzdžiai yra neteisingi ar, kad galima padaryti kažką geriau. Pats esu gana dar jaunas ir daug ko nemoku, tačiau trokštu išmokti. Iš savo, ir kitų mano artimųjų patirties galiu pasakyti, kad srities specialistu tampi mokydamas kitus.
     
    Pradedant, norėčiau apžvelgti kam web scrapping gali būti panaudojamas. Šį metodą programuotojai naudoja tada, kuomet reikia gauti informacijos iš kitos svetainės ir nenorima dirbti "copy->paste" principu. Web scrapping tai padarys už jus. Kadangi daugiausia teko programuoti PHP programavimo kalba, tai tik ja galėsiu pateikti pavyzdžių.
     
    Vogti/skolintis/pasiimti informaciją PHP pagalba iš kitų interneto svetainių galima keletu būdų. Tačiau aprašysiu tik du - vieną, kuris nepatogus ir jį naudojant gali prasidėti rimtas "galvos skausmas", ir antrą - kurį pats naudoju ir rekomenduoju naudoti kitiems.
     
    Pirmasis būdas. Jame naudojama curl biblioteka, preg_match_all funkcija. Blogiausia šio metodo savybė - reikia rašyti regexp išraiškas. Man (spėju ir kitiems programuotojams) tai yra "pain in the ######". Šis metodas turi ir pliusų - juo parašyti script'ai veikia šiek tiek greičiau negu antruoju.
     
    Daug netuščiažodžiaujant, štai kodo pavyzdys (ačiū Sauliui):
     

    <?php function rasti_turini( $pradzia, $galas, $url ) { $pradzia = str_replace('/', '\/', $pradzia); $galas = str_replace('/', '\/', $galas); $regexp = '/' . $pradzia . '(.+?)' . $galas . '/'; preg_match_all($regexp, $url, $atitike); return $atitike[0]; } function curl( $url ) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch); curl_close($ch); return $result; } //magic (: $url = curl( 'http://www.orai.lt/lt/prognozes/vilnius' ); $orai = rasti_turini( '<td class="oraiTableRow">', '</td>', $url ); //atvaizduojame antrąjį masyvo elementą echo $orai[1]; //jeigu norite pažiūrėti, kaip atrodo gautas masyvas, atkomentuokite sekančias 3 eilutes //echo '<pre>'; //print_r( $orai ); //echo '</pre>'; ?>
     
     
    Antrasis būdas. Tai mano mėgstamiausias, ir mano nuomone geriausias būdas gauti informaciją iš kito tinklalapio. Kaip taip padaryti? Ogi pasitelkti simple html DOM biblioteką. :) Jos pagalba galima rašyti elementų select'orius jQuery stiliumi.
     
    Pvz.:

    $html->find('table.bioTableAlt tbody tr');
     
    Argi gali būti patogiau ir greičiau? :rolleyes:
     
    Tarkim turime užduotį, mums reikia gauti visą geriausių teniso žaidėjų sąrašą iš šitos svetainės. Taip, visą 1000 :) Atkreipkite dėmesį, kad lentelė atnaujinama kiekvieną pirmadienį. Kad šis kodas veiktų, jums prireiks parsisiųsti simple html dom klasę.
     
    Kodas:

    <?php //nuimame laiko limita set_time_limit(0); //simple html dom include('simple_html_dom.php'); //------------------------------------------------------------------------------ // Nuorodos //------------------------------------------------------------------------------ //paskutinio pirmadienio data $date = date('d.m.Y', strtotime('last monday')); //užkomentuokit dali nuorodu, jeigu norit greiciau pamatyti rezultata $urls = array(); $urls[] = 'http://www.atpworldtour.com/Rankings/Singles.aspx?d='.$date.'&c=&r=1'; $urls[] = 'http://www.atpworldtour.com/Rankings/Singles.aspx?d='.$date.'&c=&r=101'; $urls[] = 'http://www.atpworldtour.com/Rankings/Singles.aspx?d='.$date.'&c=&r=201'; $urls[] = 'http://www.atpworldtour.com/Rankings/Singles.aspx?d='.$date.'&c=&r=301'; $urls[] = 'http://www.atpworldtour.com/Rankings/Singles.aspx?d='.$date.'&c=&r=401'; $urls[] = 'http://www.atpworldtour.com/Rankings/Singles.aspx?d='.$date.'&c=&r=501'; $urls[] = 'http://www.atpworldtour.com/Rankings/Singles.aspx?d='.$date.'&c=&r=601'; $urls[] = 'http://www.atpworldtour.com/Rankings/Singles.aspx?d='.$date.'&c=&r=701'; $urls[] = 'http://www.atpworldtour.com/Rankings/Singles.aspx?d='.$date.'&c=&r=801'; $urls[] = 'http://www.atpworldtour.com/Rankings/Singles.aspx?d='.$date.'&c=&r=901'; //inicijuojam masyvą $zaidejai $zaidejai = array(); //praskanuojam visas nuorodas foreach($urls as $url) { //gauname duomenis iš svetainės $html = file_get_html($url); foreach( $html->find('table.bioTableAlt tbody tr') as $a ) { // Duomenys apie žaidėją: // pozicija --- vardas, šalis --- žaidėjo taškai --- pozicijos pokytis --- turnyrų skaičius $zaidejas['pozicija'] = $a->children(0)->plaintext; $zaidejas['vardas'] = $a->children(1)->plaintext; $zaidejas['taskai'] = $a->children(2)->plaintext; $zaidejas['ppokytis'] = $a->children(3)->plaintext; $zaidejas['tskaicius'] = $a->children(4)->plaintext; $zaidejai[] = $zaidejas; } } //pašalinam nereikalingus masyvo elementus (lentelės heading'us) unset( $zaidejai[909] ); unset( $zaidejai[808] ); unset( $zaidejai[707] ); unset( $zaidejai[606] ); unset( $zaidejai[505] ); unset( $zaidejai[404] ); unset( $zaidejai[303] ); unset( $zaidejai[202] ); unset( $zaidejai[101] ); unset( $zaidejai[ 0 ] ); //sutvarkom array keys $zaidejai = array_values( $zaidejai ); //pažiūrim gautą masyvą echo '<pre>'; print_r( $zaidejai ); echo '</pre>'; ?>
     
    Štai dar vienas pavyzdys, kuriame gauname filmo reitingą iš imdb.com:

    <?php //simple html dom biblioteka include('simple_html_dom.php'); //filmo url $url = 'http://www.imdb.com/title/tt0485947/'; //gauname svetainės html $html = file_get_html($url); //gauname filmo reitingą $ratio = $html->find('span.rating-rating', 0)->plaintext; echo $ratio; ?>
     
     
    Pabaigai, noriu paminėti, kad su web scrapping galima sukurti gausybę naudingų ir niekam nekenkiančių dalykėlių, tačiau su juo galima pilnai pavogti turinį is RSS srauto ar iš paprasčiausios svetainės. Bet kaip tai padaryti - susigalvokite patys.
     
    Ir tikiuosi, jog jums patiko, bei buvo naudingas pirmasis mano straipsnis uždarbis.lt forume :)
  3. Patinka
    Lapinskis gavo reakciją nuo facis1 Patyrusiems programuotojams(modeliai)   
    Um gal gali paaiškinti ką tu turėjai galvoje su tais modeliais ir žmogeliukais.. :huh:
  4. Patinka
    Lapinskis gavo reakciją nuo kashiukas Ar imanona taip padaryti?   
    O ne geriau neišradinėti dviračio ir panaudoti array_rand();? http://php.net/manual/en/function.array-rand.php
     
    :rolleyes:
  5. Patinka
    Lapinskis gavo reakciją nuo facis1 [PHP] Pradedančiajam   
    Man nepatiko ne informacijos kiekis, o rašymo stilius, taip kaip viską paaiškini. Atrodo paėmei kokį anglišką šaltinį (dėl duomenų tipų pvz), išvertei pagal save ir viskas :)
     
    Manai perskaitęs porą knygų jau gali tapti "mokytoju" ir mokyti kitus? Be jokios praktikos? :unsure:
  6. Patinka
    Lapinskis gavo reakciją nuo facis1 [PHP] Pradedančiajam   
    Oh god...
     
    Prieš pradedamas mokinti kitus, gal pirma pats kažką išmok?
  7. Patinka
    Lapinskis gavo reakciją nuo kashiukas Ar imanona taip padaryti?   
    O ne geriau neišradinėti dviračio ir panaudoti array_rand();? http://php.net/manual/en/function.array-rand.php
     
    :rolleyes:
  8. Patinka
    Lapinskis sureagavo į Silke naujo nario prisistatymas   
    Kaip tik nauja mergina uždarby, taip foreveralaunai išlenda :lol:
  9. Patinka
    Lapinskis gavo reakciją nuo Klicko dizaino karpymas   
    Va
     

  10. Patinka
    Lapinskis gavo reakciją nuo mant4s .net programavimas. yra susidūrusių?   
    Nu čia tai geras :D kokie ten testai buvo, jeigu ne paslaptis? :D
  11. Patinka
    Lapinskis sureagavo į Arvydas issikraipo paveiksliukai css   
    ne

    position: relative;
    o

    position: absolute;
    nes pirmiau reikia užstatyti "relative", o paskui jo viduje pozicionuoti su "absolute"
     
    P.S. paveiksliukui display: block; nereikia jo ir taip prigimtis tokia :huh:
  12. Patinka
    Lapinskis gavo reakciją nuo mant4s .net programavimas. yra susidūrusių?   
    Nu čia tai geras :D kokie ten testai buvo, jeigu ne paslaptis? :D
  13. Patinka
    Lapinskis gavo reakciją nuo Klicko dizaino karpymas   
    Va
     

  14. Patinka
    Lapinskis gavo reakciją nuo Klicko dizaino karpymas   
    Va
     

  15. Patinka
    Lapinskis gavo reakciją nuo Klicko dizaino karpymas   
    Va
     

  16. Patinka
    Lapinskis sureagavo į kaunomanas php Echo syntax error su javascript   
    saunuolis, isdebuginai klaida sudetinga
  17. Patinka
    Lapinskis gavo reakciją nuo extremist RewriteRule panaikina meniu rodymą   
    RewriteRule ^kategorija/([^/]+) /index.php?kategorija=$1 [L]
     
    (bet šitas kodas tik teorinis, pagal tavo situaciją nerašiau)
     
    Bet jeigu jau nori pradėti rimčiau dirbti, tai iš karto pradėk domėtis apie OOP programavimą, kokį php framework pasiimk ir dirbk :) http://codeigniter.com/ šitą pradžiai rekomenduoju
  18. Patinka
    Lapinskis gavo reakciją nuo extremist RewriteRule panaikina meniu rodymą   
    Options +FollowSymLinks -Indexes RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L]
     
    Pas tave ../images/meniu_h.png ieško per php failą :) Naudok mano duotą, tik pasiredaguok
  19. Patinka
    Lapinskis sureagavo į Silke Kokia kalba mokintis norint ateityje nesunkiai rast darbu/darbeliu?   
    Kaip vienas žmogus man sakė, verta mokytis assemblerį, nes „esu tikras, kad hardware dar kurį laiką neišnyks“ :D
  20. Patinka
    Lapinskis gavo reakciją nuo Donatas DG Apdauga nuo įsilauželių   
    Aš dėl pirmo - ar ne geriau būtų mysql duomenų bazėje, per phpmyadmin wp_users lentelėje susirasti savo user'į ir pasikeisti prisijungimą?:) kažkur turėjau pasirašęs net specialią užklausą tam, bet "pamečiau" kažkur :)
  21. Patinka
    Lapinskis gavo reakciją nuo minijus Php datos funkcija   
    Taip jau yra, kad yra "programuotojų", kurie nemoka ieškotis informacijos internete. Faktas, kad programuotojas nesugebėdamas ieškotis informacijos niekada nebus geru programuotoju, kol to neišmoks :)
  22. Patinka
    Lapinskis gavo reakciją nuo minijus Php datos funkcija   
    Taip jau yra, kad yra "programuotojų", kurie nemoka ieškotis informacijos internete. Faktas, kad programuotojas nesugebėdamas ieškotis informacijos niekada nebus geru programuotoju, kol to neišmoks :)
  23. Patinka
    Lapinskis gavo reakciją nuo minijus Php datos funkcija   
    Taip jau yra, kad yra "programuotojų", kurie nemoka ieškotis informacijos internete. Faktas, kad programuotojas nesugebėdamas ieškotis informacijos niekada nebus geru programuotoju, kol to neišmoks :)
  24. Patinka
    Lapinskis gavo reakciją nuo neworld Php datos funkcija   
    date('Y-m-d', strtotime("+20 days"));
     
    Jau toliau, ką reikia pats pasitvarkysi.
  25. Patinka
    Lapinskis gavo reakciją nuo Mantas Deksnys Iškarpinės teksto atkūrimas   
    Manau tai neįmanoma, kai perkrovei puslapį... dar galėjai bandyti spausti "back", buvo šansas, kad rasi savo tekstą. O ateičiai tai, kad išvengtum tokių dalykų bus paskata naudoti ką nors panašaus kaip http://www.mlin.net/Clipomatic.shtml
×
×
  • Pasirinkite naujai kuriamo turinio tipą...