IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Récupérer une balise d'une page


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 77
    Par défaut Récupérer une balise d'une page
    Salut,

    J'aimerais récupérer le player mp3 sur un hébergeur très connu : zippyshare.

    J'ai pris pour exemple l'url : <lien>http://www7.zippyshare.com/v/29358886/file.html</lien>

    Le embed étant celui ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <embed
                                                                allowScriptAccess="never"
                                                                src="../../mediaplayer/mediaplayer.swf?file=http://www7.zippyshare.com/downloadMusic%3Fkey%3D29358886j9%26time%3D1267307308&type=flv"
                                                                menu="false" quality="high"
                                                                width="730"
                                                                height="20"
                                                                name="mp3player"
                                                                type="application/x-shockwave-flash"
                                                                pluginspage="http://www.macromedia.com/go/getflashplayer"
                                                                wmode="transparent"
                                                                border="0"
                                                                />
    Donc moi j'ai fait ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $contenu = file_get_contents("http://www7.zippyshare.com/v/29358886/file.html");
     
    $motif = "<embed allowscriptaccess=\"never\" src=\"(.*)\" menu=\"false\" quality=\"high\" name=\"mp3player\" type=\"application/x-shockwave-flash\" pluginspage=\"(.*)\" wmode=\"transparent\" border=\"0\" height=\"20\" width=\"730\">";
     
    preg_match($motif,$contenu,$liens_recuperes);
     
     
    echo "<hr />";
        echo "<pre>"; 
            print_r($liens_recuperes); 
        echo "</pre>";
    Et comme résultat avec Wamp j'ai :
    Array
    {
    }

    Aidez moi svp!!!
    J'essai d'aprendre le regex et je me suis dis que c'était un bon exercice...

    Merci d'avance,
    ++

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Déjà il manque des délimiteurs à ton expression.
    Ensuite tu devrais mettre les modifieurs "Usi" pour en particulier prendre en compte les retours à la ligne.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 77
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Déjà il manque des délimiteurs à ton expression.
    Ensuite tu devrais mettre les modifieurs "Usi" pour en particulier prendre en compte les retours à la ligne.
    Hélas oui mais comment faire ?
    Je débute dans le regex et c'est pas très facile à comprendre

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Bonsoir,



    La première chose à faire est de disposer d’un affichage des caractères exacts qui constituent la zône dans laquelle on veut récupérer des informations.

    Par caractère exact, j’entends non seulement les caractères habituels mais aussi ceux comme ’\n’, ’\t’, '\f', '\v' et d'autres exotiques qui sont habituellement invisibles quand on fait un affichage car ils constituent justement des commandes de mises en forme de l’affichage à l’écran ou d'autres trucs bizarres. Or il est beaucoup mieux de connaître précisément ces caractères pour écrire une RE.

    Il faut donc se débrouiller pour obtenir l’affichage explicite de ces caractères. Je sais faire en Python, vous devez sans doute savoir le faire en PHP.





    Ceci fait, ce qui t’intéresse dans la page que tu as donnée se présente ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    '                                                                <font class="click_to_play">Click "play" to hear a sample of this song.</font><br />\n'
    '                                                        <embed\n'
    '                                                            allowScriptAccess="never"\n'
    '                                                            src="../../mediaplayer/mediaplayer.swf?file=http://www7.zippyshare.com/downloadMusic%3Fkey%3D2935888612%26time%3D1267484757&type=flv"\n'
    '                                                            menu="false" quality="high"\n'
    '                                                            width="730"\n'
    '                                                            height="20"\n'
    '                                                            name="mp3player"\n'
    '                                                            type="application/x-shockwave-flash"\n'
    '                                                            pluginspage="http://www.macromedia.com/go/getflashplayer"\n'
    '                                                            wmode="transparent"\n'
    '                                                            border="0"\n'
    '                                                            />\n'
    '                                                        </td>\n'
    '                                                        </tr>\n'




    Pour extraire les deux informations qui t’intéressent , je te conseille la RE suivante.
    Je l’écris de la manière que permet Python:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    RE = '<embed\n'\
          + 12*'     ' + 'allowScriptAccess="never"\n'\
          + 12*'     ' + 'src="(.+)\n'\
          + 12*'     ' + 'menu=".*\n'\
          + 12*'     ' + 'width=".*\n'\
          + 12*'     ' + 'height=".*\n'\
          + 12*'     ' + 'name="mp3player"\n'\
          + 12*'     ' + 'type=".*\n'\
          + 12*'     ' + 'pluginspage="(.+)"\n'

    12*' ' c’est pour les 60 blancs qui se trouvent en tête de chaque ligne.
    L’affichage exact de tous les caractères montre en effet qu’il n’y a que des blancs en tête de lignes. Ça aurait pu être des ’\t’ ou un mélange des deux.



    On me dira que l’on pourrait plutôt écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    RE = '<embed\n'\
         + 12*'     ' + 'allowScriptAccess="never"\n'\
         + 12*'     ' + 'src="(.+)\n'\
         + '.+?' + 'pluginspage="(.+?)"\n'
    Mais moi je pense qu’il est mieux de mettre le plus possible de caractères fixes dans une RE. À la suite de tests comparatifs, j’ai retiré la conclusion que plus il y a des caractères fixes, et précis, dans une RE, plus la regex est efficace c’est à dire rapide. Les points fixes constituent des points de cramponnage pour la regex.

    C’est d’ailleurs pourquoi il est intéressant d’afficher les caractères exacts; ainsi écrire 12*’..... est il mieux que d’écrire [\t ]{60}



    De plus en écrivant ainsi, avec les ’\n’ explicites aux fins de lignes, il n’y a pas besoin de l’option s qui rend le point apte à matcher les fins de ligne.

    Par conséquent, il n’y pas non plus nécessité de l’option U puisque tous les .+ dans la RE n’ont pas besoin de coupe-faim pour s’arrêter devant ’\n’.

    Et enfiin, il n'y a pas besoin de l'option i car a priori les lettres qui sont explicites dans la RE ne sont pas susceptibles de changer de minuscule a majuscule du jour au lendemain.







    Pour en terminer, en PHP il faut ajouter deux caractères identiques en tête et en queue de la RE. Ce caractère peut être quasiment n’importe lequel, mais.... Renseigne toi sur le sujet:
    http://fr2.php.net/manual/fr/intro.pcre.php

    Cela veut dire qu'à la RE écrite en Python ci-dessus il faut rajouter, par exemple #
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    RE = '#<embed\n'\
          + 12*'     ' + 'allowScriptAccess="never"\n'\
           .............................................................
          + 12*'     ' + 'pluginspage="(.+)"\n#'

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/04/2013, 09h24
  2. [SAX] Récupérer plusieurs balises dans une balise
    Par Jojo____ dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 08/01/2012, 17h11
  3. [XSD] [Xpath]Récupérer le Xpath d'une balise durant une validation XSD
    Par Amidal dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 19/03/2010, 22h51
  4. Récupérer le résultat d'une fonction dans une balise html
    Par Hayato dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 19/06/2006, 17h04
  5. [XSL]faire une balise dans une balise??? (ComboBox)
    Par rastoix dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 23/05/2003, 08h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo