Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 14 sur 14
  1. #1
    Membre chevronné Avatar de Elwyn
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    juillet 2006
    Messages
    856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : juillet 2006
    Messages : 856
    Points : 750
    Points
    750

    Par défaut Youtube, Deezer and Soundcloud

    Bonjour,

    j'aimerais créer trois Regex pour capturer l'ID d'une URL Youtube, Deezer et Soundcloud.

    J'ai déjà celle de Youtube :
    '%^# Match any youtube URL
          (?:https?://)?  # Optional scheme. Either http or https
          (?:www\.)?      # Optional www subdomain
          (?:             # Group host alternatives
            youtu\.be/    # Either youtu.be,
          | youtube\.com  # or youtube.com
            (?:           # Group path alternatives
              /embed/     # Either /embed/
            | /v/         # or /v/
            | /watch\?v=  # or /watch\?v=
            )             # End path alternatives.
          )               # End host alternatives.
          ([\w-]{10,12})  # Allow 10-12 for 11 char youtube id.
          $%x';
    Pourriez-vous svp m'aider pour les deux autres ?

    Un lien Deezer : http://www.deezer.com/track/1167893
    /^http\:\/\/www\.deezer\.com\/track\/\d{6,7}/
    Un lien Soundcloud : http://soundcloud.com/[a-z]artist/[a-z]title

    PS : Concernant ma Regex Youtube, je crois qu'elle ne fonctionne pas si le v= est situé derrière un feature= par exemple.
    Dire Straits, Bob Dylan, Led Zeppelin, the Who, Pink Floyd, AC/DC, Guns & Roses, the Doors, ...
    Nicolas Jaar, Paul Kalkbrenner, Marek Hermann

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro Olivier
    Dév. Web / Android
    Inscrit en
    août 2003
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Nom : Homme Olivier
    Âge : 30
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Dév. Web / Android
    Secteur : Industrie

    Informations forums :
    Inscription : août 2003
    Messages : 3 157
    Points : 7 566
    Points
    7 566

    Par défaut

    Pas besoin de regex pour faire ça

    Par exemple pour youtube et deezer :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function getYoutubeID($url)
    {
      $urlParam = parse_url($url, PHP_URL_QUERY);
      parse_str($urlParam , $params);
      return isset($params['v']) ? $params['v'] : false;
    }
     
    function getDeezerID($url)
    {
        $urlParam = parse_url($url, PHP_URL_PATH);
        return substr($urlParam ,strrpos($urlParam ,'/') +1);
    }
    Pour soundcloud il faut récupérer auteur + piste ? Si c'est le cas c'est le même principe que deezer , sauf que tu fais un explode au lieu de substr
    Pry Framework php5

  3. #3
    Membre chevronné Avatar de Elwyn
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    juillet 2006
    Messages
    856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : juillet 2006
    Messages : 856
    Points : 750
    Points
    750

    Par défaut

    Bonjour et merci pour ta réponse.

    Concernant Youtube, je suis tout à fait d'accord avec ta méthode. Je vais tester et te faire un retour.

    Concernant Deezer, pourrais-tu m'expliquer la logique stp ?

    Pour Soundcloud non, je souhaite récupérer le titre seulement.
    Dire Straits, Bob Dylan, Led Zeppelin, the Who, Pink Floyd, AC/DC, Guns & Roses, the Doors, ...
    Nicolas Jaar, Paul Kalkbrenner, Marek Hermann

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro Olivier
    Dév. Web / Android
    Inscrit en
    août 2003
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Nom : Homme Olivier
    Âge : 30
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Dév. Web / Android
    Secteur : Industrie

    Informations forums :
    Inscription : août 2003
    Messages : 3 157
    Points : 7 566
    Points
    7 566

    Par défaut

    Pour deezer :

    Code :
    $urlParam = parse_url($url, PHP_URL_PATH);
    on récupère ici tous les paramètres après l'url , donc par exemple "/track/1167893"

    Code :
    substr($urlParam ,strrpos($urlParam ,'/') +1)
    Je cherche avec strrposla position du dernier / de la liste des paramètres. Je ne garde ensuite avec substr que la partie de la chaine qui se trouve à position du dernier / + 1. le +1 permettant simplement de ne pas avoir le / dans la chaine retourné.

    Du coup pour soundclound ,la fonction deezer doit marcher.
    Pry Framework php5

  5. #5
    Membre chevronné Avatar de Elwyn
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    juillet 2006
    Messages
    856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : juillet 2006
    Messages : 856
    Points : 750
    Points
    750

    Par défaut

    Merci,

    pour récapituler :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    function getYoutubeID($url)
    {
      $urlParam = parse_url($url, PHP_URL_QUERY);
      parse_str($urlParam , $params);
      return isset($params['v']) ? $params['v'] : false;
    }
     
    function getDeezerID($url)
    {
        $urlParam = parse_url($url, PHP_URL_PATH);
        return substr($urlParam ,strrpos($urlParam ,'/') +1);
    }
     
    function getSoundcloudID($url)
    {
        $urlParam = parse_url($url, PHP_URL_PATH);
        return substr($urlParam ,strrpos($urlParam ,'/') +1);
    }
    Tout est ok ?
    Dire Straits, Bob Dylan, Led Zeppelin, the Who, Pink Floyd, AC/DC, Guns & Roses, the Doors, ...
    Nicolas Jaar, Paul Kalkbrenner, Marek Hermann

  6. #6
    Modérateur
    Avatar de grunk
    Homme Profil pro Olivier
    Dév. Web / Android
    Inscrit en
    août 2003
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Nom : Homme Olivier
    Âge : 30
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Dév. Web / Android
    Secteur : Industrie

    Informations forums :
    Inscription : août 2003
    Messages : 3 157
    Points : 7 566
    Points
    7 566

    Par défaut

    A priori oui , il faut tester.

    Si tu as vraiment besoin de la fonction pour soundcloud , fait juste un alias , recopie pas le code :

    Code :
    1
    2
    3
    4
    function getSoundcloudID($url)
    {
        return getDeezerID($url);
    }
    Après tu peux améliorer un peu la fonction deezer , pour être sur qu'elle te renvoi bien une suite de chiffre par exemple (renvoyer false sinon) et tout ce genre de petites vérification
    Pry Framework php5

  7. #7
    Membre chevronné Avatar de Elwyn
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    juillet 2006
    Messages
    856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : juillet 2006
    Messages : 856
    Points : 750
    Points
    750

    Par défaut

    Finalement, serait-il possible de passer tout ça en Regex svp ?
    Mon code est fait de telle manière que les Regex m’arrangerait.

    Merci d'avance
    Dire Straits, Bob Dylan, Led Zeppelin, the Who, Pink Floyd, AC/DC, Guns & Roses, the Doors, ...
    Nicolas Jaar, Paul Kalkbrenner, Marek Hermann

  8. #8
    Membre éprouvé Avatar de CosmoKnacki
    Homme Profil pro
    Inscrit en
    mars 2009
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mars 2009
    Messages : 282
    Points : 409
    Points
    409

    Par défaut

    Bonjour,

    Code :
    1
    2
    3
    $patternYoutube = '/(?<=v=)[\w-]+/';
    $patternDeezer = '/\d+/';
    $patternSoundcloud = '#[\w-]+$#';
    pour les 3 à la fois:
    Code :
    $pattern = '#(?<=v=)[\w-]+|[^/?&]+$#';

  9. #9
    Membre chevronné Avatar de Elwyn
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    juillet 2006
    Messages
    856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : juillet 2006
    Messages : 856
    Points : 750
    Points
    750

    Par défaut

    Bonjour, et merci beaucoup pour ta réponse.
    Je ne comprend pas la Regex de Deezer, es-tu sûr ?
    Dire Straits, Bob Dylan, Led Zeppelin, the Who, Pink Floyd, AC/DC, Guns & Roses, the Doors, ...
    Nicolas Jaar, Paul Kalkbrenner, Marek Hermann

  10. #10
    Membre éprouvé Avatar de CosmoKnacki
    Homme Profil pro
    Inscrit en
    mars 2009
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mars 2009
    Messages : 282
    Points : 409
    Points
    409

    Par défaut

    Pour Deezer il n'y a qu'une série de chiffres à récupérer et les seuls chiffres présents dans l'url sont justement ceux que l'on souhaite.
    J' utilise donc la classe prédéfinie \d (qui équivaut à [0-9]) pour les récupérer sans avoir à me soucier de leur position d'où l'absence de l'ancre de fin $.

    Maintenant dans la réponse que je t'ai donnée, je présume que la recherche porte sur une chaîne contenant uniquement l'url à analyser.

    Code :
    1
    2
    preg_match('/\d+/', 'http://www.deezer.com/track/1167893', $match);
    echo array_pop($match);

  11. #11
    Membre chevronné Avatar de Elwyn
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    juillet 2006
    Messages
    856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : juillet 2006
    Messages : 856
    Points : 750
    Points
    750

    Par défaut

    Bonjour,

    D'accord, je comprend mieux.
    Et pour Soundcloud tu recherches la dernière chaine de caractères si j'ai bien compris.

    EDIT : En fait pour Soundcloud, je dois récupérer l'artiste et le titre.
    Dire Straits, Bob Dylan, Led Zeppelin, the Who, Pink Floyd, AC/DC, Guns & Roses, the Doors, ...
    Nicolas Jaar, Paul Kalkbrenner, Marek Hermann

  12. #12
    Membre éprouvé Avatar de CosmoKnacki
    Homme Profil pro
    Inscrit en
    mars 2009
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mars 2009
    Messages : 282
    Points : 409
    Points
    409

    Par défaut

    Voilà, c'est ça.

    Maintenant si les urls sont prises dans un texte quelconque et que tu veux récupérer les informations (avec l'artiste pour soundcloud) de manière exploitable, tu peux faire ceci:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    $txt = <<<'LOD'
    blah blah blah URL = 'http://www.youtube.com/watch?v=1wc-AQJ2MYo&feature=fvwp' Deezer ->>> http://www.deezer.com/track/7157481 blah http://www.youtube.com/watch?v=Ri0N_ifn2iM&feature=fvwp
    urlSoundcloud = 'http://soundcloud.com/villagepeople/ymca' youtube.com/watch?v=Ri0N_ifn2iM&feature=fvwp blah blah blah
    http://www.deezer.com/track/7157481
    LOD;
    $patternTxt = '#(?:/watch\?(?:[^&]*?&)*?v=)([\w-]{11})
                   |(?:deezer\.com/[^/]+/)(\d+)
                   |(?:soundcloud\.com/)([\w-]+)/([\w-]+)#sx';
     
    $result = array('youtube' => array(), 'deezer' => array(), 'soundcloud' => array());
    $callback = function ($match) use (&$result) {
        if (!empty($match[1])) array_push($result['youtube'],$match[1]);
        if (!empty($match[2])) array_push($result['deezer'],$match[2]);
        if (!empty($match[3])) array_push($result['soundcloud'],$match[3],$match[4]);
    };
    preg_replace_callback($patternTxt, $callback, $txt);
    foreach($result as &$item) { $item = array_unique($item); } //pour éviter les doublons
    echo '<pre>';
    print_r($result);
    echo '</pre>';
    Si tu as juste une url à parser, pour soundcloud, tu peux utiliser ça: #([\w-]+)/([\w-]+)$#

  13. #13
    Membre chevronné Avatar de Elwyn
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    juillet 2006
    Messages
    856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : juillet 2006
    Messages : 856
    Points : 750
    Points
    750

    Par défaut

    Merci pour toutes ces réponses.
    En fait, l'utilisateur copiera directement son lien Youtube, Deezer ou Soundcloud.

    Pour Deezer et Soundcloud, j'aimerais rajouter le début de l'URL, on ne sait jamais, je n'ai pas envie qu'il copie directement l'ID de la vidéo.

    Quelque chose du style : http://soundcloud.com/([\w-]+)/([\w-]+)$
    Comment le traiter dans un preg_match() ensuite ?

    Idem pour Deezer, merci d'avance !
    Dire Straits, Bob Dylan, Led Zeppelin, the Who, Pink Floyd, AC/DC, Guns & Roses, the Doors, ...
    Nicolas Jaar, Paul Kalkbrenner, Marek Hermann

  14. #14
    Membre chevronné Avatar de Elwyn
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    juillet 2006
    Messages
    856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : juillet 2006
    Messages : 856
    Points : 750
    Points
    750

    Par défaut

    @CosmoKnacki : As-tu essayé de répondre ?
    Dire Straits, Bob Dylan, Led Zeppelin, the Who, Pink Floyd, AC/DC, Guns & Roses, the Doors, ...
    Nicolas Jaar, Paul Kalkbrenner, Marek Hermann

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •