Vytvoř si WEB nebo ESHOP » vyzkoušet zdarma zde » OxiWeb.cz
Zobrazují se odpovědi 1 až 5 z 5

FAQ - datamining, mod_rewrite

  1. vedouci Hodnocení: 3 (100%) vedouci bude brzy slavný/á
    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. Diehard Hodnocení: 2 (100%) Diehard je zatím velká neznámá
    2
    Dobry napad, ale myslim, ze skor si mohol namiesto tem vyuzit funkciu Blog, ktora tu bola spravena.

  4. vedouci Hodnocení: 3 (100%) vedouci bude brzy slavný/á
    3
    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. pehape Hodnocení: 6 (88%) pehape je zatím velká neznámá
    4
    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/

Hostujeme u Server powered by TELE3