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 :

Extraction NDD sans sous-domaine, etc. [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de la_chouette
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 183
    Points : 121
    Points
    121
    Par défaut Extraction NDD sans sous-domaine, etc.
    Bonjour,

    je cherche à extraire puis compter les domaines sans prendre en compte les sous-domaines, répertoire, page ...

    Voici un échantillon d'une liste d'urls:
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    $uri = array(
    'http://www.domaine.com',
    'http://www.domaine.com',
    'http://www.domaine.com/page.php',
    'http://www.domaine.com/directory/',
    'http://www.domaine.com/directory/page.php',
    'http://www.subdomaine.domaine.com/',
    'http://www.subdomaine.domaine.com/page.php',
    'http://www.subdomaine.domaine.com/directory/',
    'http://www.subdomaine.domaine.com/directory/',
    'http://www.subdomaine.domaine.com/directory/page.php',
    'http://www.subdomaine.subdomaine.domaine.com/',
    'http://www.subdomaine.subdomaine.domaine.com/page.php',
    'http://www.subdomaine.subdomaine.domaine.com/directory/',
    'http://www.subdomaine.subdomaine.domaine.com/directory/page.php',
    'http://domaine.us',
    'http://domaine.us/page.php',
    'http://domaine.us/directory/',
    'http://domaine.us/directory/',
    'http://domaine.us/directory/page.php',
    'http://subdomaine.domaine.us/',
    'http://subdomaine.domaine.us/page.php',
    'http://subdomaine.domaine.us/directory/',
    'http://subdomaine.domaine.us/directory/',
    'http://subdomaine.domaine.us/directory/page.php',
    'http://subdomaine.subdomaine.domaine.us/',
    'http://subdomaine.subdomaine.domaine.us/page.php',
    'http://subdomaine.subdomaine.domaine.us/directory/',
    'http://subdomaine.subdomaine.domaine.us/directory/page.php');
    le résultat voulu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    2 domaines trouvés (domaine.com et domaine.us)
    J'ai donc tester avec différents masques et parse_url mais je n'arrive pas obtenir le résultat souhaiter.

    Merci pour votre aide.
    La vitesse de la lumière étant supérieure à celle du son, beaucoup de gens sont brillants jusqu'à ce qu'ils ouvrent leur bouche.

  2. #2
    Membre régulier Avatar de la_chouette
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 183
    Points : 121
    Points
    121
    Par défaut
    Voici la solution:
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    $uri = array(
    'www.domaine.com',
    'www.domaine.com',
    'www.domaine.com/page.php',
    'www.domaine.com/directory/',
    'www.domaine.com/directory/page.php',
    'www.subdomaine.domaine.com/',
    'www.subdomaine.domaine.com/page.php',
    'www.subdomaine.domaine.com/directory/',
    'www.subdomaine.domaine.com/directory/',
    'www.subdomaine.domaine.com/directory/page.php',
    'www.subdomaine.subdomaine.domaine.com/',
    'www.subdomaine.subdomaine.domaine.com/page.php',
    'www.subdomaine.subdomaine.domaine.com/directory/',
    'www.subdomaine.subdomaine.subdomaine.domaine.com/directory/page.php',
    'http://82.64.39.203/directory/',
    'http://domaine.us',
    'http://domaine.us/page.php',
    'http://domaine.us/directory/',
    'http://domaine.us/directory/',
    'http://domaine.us/directory/page.php',
    'http://subdomaine.domaine.us/',
    'http://subdomaine.domaine.us/page.php',
    'http://subdomaine.domaine.us/directory/',
    'http://subdomaine.domaine.us/directory/',
    'http://subdomaine.domaine.us/directory/page.php',
    'http://subdomaine.subdomaine.domaine.us/',
    'http://subdomaine.subdomaine.domaine.us/page.php',
    'http://subdomaine.subdomaine.domaine.us/directory/',
    'http://subdomaine.subdomaine.domaine.us/directory/page.php');
     
    // Delete duplicate
    $uri = array_unique($uri);
     
    function format_url($url){
        $nburl = count($url);
        for($i=0;$i<$nburl;$i++){
            if(array_key_exists($i, $url)){
                preg_match("/^(http:\/\/)?([^\/]+)/i",$url[$i],$chaines);
     
                if(preg_match('/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/', $chaines[2],$domaines))
                    preg_match('/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/', $chaines[2],$domaines);
                else
                    preg_match("/[^\.\/]+\.[^\.\/]+$/",$chaines[2],$domaines);
     
                $host[] = $domaines[0];
            }
        }
     
        $host = array_unique($host);
     
        //Debug
        //echo var_dump($host);
     
        return $host;
    }
    echo 'Nbr domaine: ' . count(format_url($uri));
    Compte le nombre de domaine/ip en filtrant les sous-domaines, répertoires, pages éventuelles ...

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Array
    (
        [0] => domaine.com
        [12] => 82.64.39.203
        [13] => domaine.us
    )
     
    Nbr domaine: 3
    Merci à WibiMaster pour sont aide

    Si quelqu'un pense pourvoir simplifier/améliorer le code je suis ouvert ...
    La vitesse de la lumière étant supérieure à celle du son, beaucoup de gens sont brillants jusqu'à ce qu'ils ouvrent leur bouche.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 56
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par la_chouette Voir le message
    Merci à WibiMaster pour sont aide
    C'est marrant ça, je cherchais sur Google comment arriver à ce résultat, et je tombe sur ce post où j'aurais donné la solution...
    M'en souvenais pas, merci à toi de l'avoir posté huhu

    [edit] T'es sûre que j'ai fait ça ? J'ai du mal à comprendre le pourquoi du array_key_exists, et ce double preg_match avec le if, ça pique un peu les yeux... J'pense que ça peut pas mal se simplifier, à voir J'ai aussi un doute sur le fait que ça fonctionne avec des URL de type "blabla.co.uk" par exemple..

  4. #4
    Membre régulier Avatar de la_chouette
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 183
    Points : 121
    Points
    121
    Par défaut
    Oui, le code est bien de toi (chat dev)...

    Si tu pense pouvoir le simplifier je suis partant, sinon il fonctionne bien...
    La vitesse de la lumière étant supérieure à celle du son, beaucoup de gens sont brillants jusqu'à ce qu'ils ouvrent leur bouche.

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    juste

    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
    $domains = array();
     
    foreach ($uri as $link) {
        if (strpos($link, 'http://') !== 0) {
            $link = 'http://'.$link;
        }
     
        $host = parse_url($link, PHP_URL_HOST);
     
        if (filter_var($host, FILTER_VALIDATE_IP)) {
            $domain = $host;
        } else {
            preg_match('/[^.]+\.[^.]+$/', $host, $matches);
            $domain = current($matches);
        }
     
        if (false === in_array($domain, $domains)) {
            $domains[] = $domain;
        }
    }

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 56
    Points : 36
    Points
    36
    Par défaut
    @stealth35 :
    Ton code subit le même défaut, si l'on test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $uri = array(
    	'http://www.test.co.uk',
    	'http://www.test.fr',
    	'http://test.fr',
    	'http://test.co.uk',
    );
    Cela ressort :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    array
      0 => string 'co.uk' (length=5)
      1 => string 'test.fr' (length=7)
    @la_chouette :
    Je te crois

    Bon ben reste plus qu'à trouver un truc fiable, eheh

    edit :
    Existe-t-il une liste exhaustive des différentes extensions de domaines sur chaque niveau ?
    Comme celle-ci :
    https://wiki.mozilla.org/TLD_List

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RegEx] Récupérer nom de domaine sans les sous domaine
    Par fabien14 dans le forum Langage
    Réponses: 2
    Dernier message: 16/01/2016, 13h15
  2. Rediriger des ports sans sous-domaines
    Par EthanPlg dans le forum Apache
    Réponses: 3
    Dernier message: 19/01/2015, 00h14
  3. Réponses: 5
    Dernier message: 26/01/2010, 15h49
  4. Url rewriting + sous domaine + sans modif URL
    Par ReivaxHerica dans le forum Apache
    Réponses: 4
    Dernier message: 26/01/2009, 13h44
  5. Réponses: 4
    Dernier message: 09/01/2008, 00h36

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