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 :

Youtube, Deezer and Soundcloud


Sujet :

Langage PHP

  1. #1
    Membre éclairé Avatar de fallais
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    858
    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 : 858
    Points : 783
    Points
    783
    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
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Pas besoin de regex pour faire ça

    Par exemple pour youtube et deezer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre éclairé Avatar de fallais
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    858
    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 : 858
    Points : 783
    Points
    783
    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
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Pour deezer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre éclairé Avatar de fallais
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    858
    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 : 858
    Points : 783
    Points
    783
    Par défaut
    Merci,

    pour récapituler :

    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
    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
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre éclairé Avatar de fallais
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    858
    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 : 858
    Points : 783
    Points
    783
    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
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $patternYoutube = '/(?<=v=)[\w-]+/';
    $patternDeezer = '/\d+/';
    $patternSoundcloud = '#[\w-]+$#';
    pour les 3 à la fois:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = '#(?<=v=)[\w-]+|[^/?&]+$#';
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  9. #9
    Membre éclairé Avatar de fallais
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    858
    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 : 858
    Points : 783
    Points
    783
    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
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    preg_match('/\d+/', 'http://www.deezer.com/track/1167893', $match);
    echo array_pop($match);
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  11. #11
    Membre éclairé Avatar de fallais
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    858
    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 : 858
    Points : 783
    Points
    783
    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
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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-]+)$#
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  13. #13
    Membre éclairé Avatar de fallais
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    858
    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 : 858
    Points : 783
    Points
    783
    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 éclairé Avatar de fallais
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    858
    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 : 858
    Points : 783
    Points
    783
    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

Discussions similaires

  1. Drag and drop "de l'extérieur"
    Par Invité dans le forum C++Builder
    Réponses: 12
    Dernier message: 31/03/2020, 10h10
  2. Pas de son Deezer-Youtube sous Debian
    Par lavazavio dans le forum Applications et environnements graphiques
    Réponses: 0
    Dernier message: 13/01/2009, 17h12
  3. [Look and feel] Texte des JLabels en gras
    Par aliasjcdenton dans le forum AWT/Swing
    Réponses: 11
    Dernier message: 26/01/2006, 11h49
  4. mise en page (Header and Footer) en XML-XSL.
    Par christine dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 01/03/2004, 16h31
  5. Fip, modbus and co...
    Par xave dans le forum Développement
    Réponses: 2
    Dernier message: 24/05/2002, 13h25

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