Prodej projektu Duchod.cz - SLEVA
Zobrazují se odpovědi 1 až 5 z 5

FAQ - datamining, mod_rewrite

  1. - - = DATA MINING = - -
    aneb odborne oznaceni asi nejcastejsiho dotazu - jak vydolovat z nejakeho textu nejakou konkretni cast...
    reseni zalezi na tom, jestli se jedna o XML, JSON a nebo jiny predem nespecifikovany text:

    1. JSON - nejjednodussi (a nejmene caste) - pouzijeme json_decode a nechame si od php vratit objekt - pak uz jenom pristoupime k tomu, co potrebujeme
    (json_decode muze vratit i pole - pokud je to klasicke indexovane, jinak vraci objekt)

    2. XML/HTML (nejcastejsi) - tady jsou reseni 2 - bud regexy a nebo simplexml/dom+xpath:
    http://php.net/simplexml
    http://php.net/dom

    http://www.w3.org/TR/xpath20/
    http://interval.cz/clanky/zaklady-jazyka-xpath/
    http://www.zvon.org/xxl/XPathTutoria.../examples.html

    Ve zkratce:
    PHP kód:
    <?php

    $dom 
    = new DOMDocument ();
    $dom -> loadHTML '<div class="anchor-div"><a href="anchor1url">anchor 1</a></div><div class="anchor-div"><a href="anchor2url">anchor 2</a></div><a href="anchor3url">this anchor is not inside div</a>' );

    $xml simplexml_import_dom $dom );

    //vypise vsechny divy s tridou anchor-div
    foreach ( $xml -> xpath "//div[@class='anchor-div']" ) as $anchor_div )
        echo 
    $anchor_div -> asXML (), "\n";
        
    //vypise vsechny anchory
    foreach ( $xml -> xpath "//a" ) as $anchor )
        echo 
    $anchor -> asXML (), "\n";
        
    //vypise vsechny url ze vsech anchoru
    foreach ( $xml -> xpath "//a/@href" ) as $anchor_url )
        echo 
    $anchor_url"\n";
        
    //vypise vsechny url ze vsech anchoru uvnitr divu
    foreach ( $xml -> xpath "//div/a/@href" ) as $anchor_url )
        echo 
    $anchor_url"\n";

    //vypise url z posledniho anchoru
    foreach ( $xml -> xpath "//a[last()]/@href" ) as $anchor_url )
        echo 
    $anchor_url"\n";
    priklady xpath:
    http://msdn.microsoft.com/en-us/library/ms256086.aspx
    http://www.w3schools.com/XPath/xpath_examples.asp
    http://www.zvon.org/xxl/XPathTutoria.../examples.html


    3. regexy - HTML/XML/jakykoliv textovy obsah
    regularni vyrazy jsou v php zastoupeny jak temi POSIXovymi, tak temi PERLovskymi (PCRE), ty prvni jsou pomale, slabe, ale jsou standard - umi je grep, sed, gvim, ale taky notepad2, total commander, a pravdepodobne jeste spousta dalsich programu.

    Vetsinu z Vas budou ale zajimat ty druhe, cili preg - jsou podporovane ve vsech hlavnich programovacich jazycich (ikdyz se jejich implementace trosicku odlisuje) - tzn. Java, Javascript, PHP a samozrejme Perl, urcite bude existovat i nejaka knihovna pro C a C++, ale nas zajima tentokrat jenom PHP. Popisovat to cele znovu by bylo asi zbytecne, takze sem hodim par odkazu pro nastudovani a pak par ukazek pouziti:

    http://interval.cz/clanky/perl-compa...ni-konstrukce/ - perfektni serial na intervalu
    http://php.net/manual/en/book.pcre.php - seznam fci, ktere mame k dispozici v pripade PCRE
    http://www.php.net/manual/en/referen...ern.syntax.php - manualova stranka popisujici syntax PCRE - je to zahrabane celkem hluboko v dokumentaci, tak to sem supnu primo...
    http://www.regextester.com/ - tester regexu - umi javascript, preg (php) i posix - urcite se bude hodit...
    http://www.sitepoint.com/blogs/2006/...expressions-1/ - hezky tutorial na sitepointu

    priklady:

    PHP kód:
    <?php

    $html 
    '<div class="anchor-div"><a href=\'anchor1url\'>anchor 1</a></div><div class="anchor-div"><a href="anchor2url">anchor 2</a></div><a    class="foo" href="anchor3url">this anchor is not inside div</a>';

    //tyto 3 priklady vypisou vzdy to same - pole poli, kde kazdy prvek obsahuje: cele html odkazu, pak url odkazu a pak text odkazu...
    //lisi se jenom tim, ze ty slozitejsi budou fungovat i na neobykle odkazy typu: <a class="" href="">, kdezto ty jednodussi ne...

    //parsnuti obvykleho odkazu (neni 100%ni)
    if ( preg_match_all '%<a href="(.*?)">(.*?)</a>%si'$html$matchesPREG_SET_ORDER ) )
        
    print_r $matches );

    //to same, tentokrat zvlada i rozdilne uvozovky ("') - ve vyslednem poli bude jeste jeden prvek navic, ten bude obsahovat bud ' a nebo "
    if ( preg_match_all '%<a href=(["\'])(.*?)\1>(.*?)</a>%si'$html$matchesPREG_SET_ORDER ) )
        
    print_r $matches );

    //a tentokrat zvladneme i vice mezer a libovolnou pozici href atributu
    if ( preg_match_all '%<a[^>]*\s+href=(["\'])(.*?)\1[^>]*>(.*?)</a>%si'$html$matchesPREG_SET_ORDER ) )
        
    print_r $matches );
    doporucuju vyzkouset si a pohrat si s tim...

    jinak u regexu obecne plati, ze napiseme takovy regex, ktery dostacuje nasemu pouziti, protoze napsat 100%ne neprustrelny (a zaroven fungujici) vyraz by nam zabralo neporovnatelne vetsi mnozstvi casu (tudiz doporucuju jit spise cestou prvnich prikladu, pokud si nejste tak uplne jisti)





    - - = MOD_REWRITE = - -
    jeste takova rychla vsuvka na tema mod_rewrite - ne ze bych na to byl extra odbornik, ale vetsina problemu je zpusobena tim, ze v .htaccess chybi tohle:
    Kód:
    RewriteEngine On
    RewriteBase /
    tento radek by mel byt umisteny hned za RewriteEngine On, jak je uvedeno...

    tema se bude rozsirovat - ale chce to cas :-) a mozna, ze ho taky rozdelim do vice temat, podle kategorii, uvidime, kolik bude materialu...
    Naposledy upravil vedouci : 09.08.2010 v 15:31

  2. Co se právě děje na Webtrhu?
  3. Dobry napad, ale myslim, ze skor si mohol namiesto tem vyuzit funkciu Blog, ktora tu bola spravena.

  4. Citace Původně odeslal Diehard Zobrazit příspěvek
    Dobry napad, ale myslim, ze skor si mohol namiesto tem vyuzit funkciu Blog, ktora tu bola spravena.
    vidis, o tom jsem vubec nevedel, tak uvidime, no... omrknu to a kdyztak to prepisu, dle casu

    EDIT: necham to tady - protoze to ma lidi odradit od pokladani zbytecnych otazek a na blogu by to tezko melo stejny efekt...

    EDIT: updatovano - jeste tam par prikladu prihodim, ale konecne jsem pridal i neco k regexum....
    Naposledy upravil vedouci : 28.07.2010 v 01:24

  5. Zkoušel jsem si to "Ve zkratce: PHP kód:" - 1. příklad.
    A všechno pracuje tak, jak bych čekal - pouze to "vypise url z posledniho anchoru" vypisuje:
    anchor1url
    anchor2url
    anchor3url
    a já bych čekal jen poslední anchor3url
    Je chyba u mě nebo jsem to nějak špatně pochopil? Díky.

  6. @vedouci: Docela užitečný on-line testovač různých funkcí, včetně regulárních výrazů - http://www.functions-online.com/
    Testování skriptů v PHP online - http://writecodeonline.com/php/
    Naposledy upravil crs : 07.10.2013 v 22:45

Hostujeme u Server powered by TELE3