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.

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

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

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 244
    Points
    20 244
    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

  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.

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

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

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 244
    Points
    20 244
    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.

  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 ?

  6. #6
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

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

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 244
    Points
    20 244
    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

  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

  8. #8
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 912
    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 912
    Points : 6 705
    Points
    6 705
    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-]+|[^/?&]+$#';

  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 ?

  10. #10
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 912
    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 912
    Points : 6 705
    Points
    6 705
    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);

  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.

  12. #12
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 912
    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 912
    Points : 6 705
    Points
    6 705
    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-]+)$#

  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 !

  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 ?

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, 11h10
  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, 18h12
  3. [Look and feel] Texte des JLabels en gras
    Par aliasjcdenton dans le forum AWT/Swing
    Réponses: 11
    Dernier message: 26/01/2006, 12h49
  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, 17h31
  5. Fip, modbus and co...
    Par xave dans le forum Développement
    Réponses: 2
    Dernier message: 24/05/2002, 14h25

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