Aller au contenu
Règlement du forum ×
IPTV et arnaques ×

[Perl] get_rank automatisé (Alexa)


badrh0

Messages recommandés

Salam 3alaykoum,

Bon voilà j'ai écrit un petit script qui m'obtient le rang d'un site a partir du site d'Alexa, en jetant un ptit coup-d'oeil dans le code html de par exemple :

get_rank(orumdz.com) on voit ça :

Forumdz.comforumdz.com

Forumdz.com	has a  traffic rank of:	 1455,198

Mais seulement voila en visitant ledit site on se rend compte que les requetes automatisées sont payantes :eek: alors que pour mon browser elles sont gratuites :cool: alors j'ai éssayé de faire un ptit script Perl qui me donne le rank d'un site mais le problème est que je ne m'y connais pas trop en Perl, alors mon code se plante environs 1 fois sur 8 :confused: en plus pour des ranks trop nuls (genre 22,253,256) il se plante a coup sûre :confused: alors si un connaisseur peut y jeter un coup d'oeil pour voir ;) en plus ça peut servir a un tas de choses a mon avis (en tout cas moi ça me sert) pour l'instant je fais deux requetes et je les compare, le cas échéant j'en refait une troisieme ...etc , mais évidement ça multiplie le temps de travail par au moins deux :confused:

[Pardon c'est pas ordonné :D]

 

#!/usr/bin/perl

use strict;
use warnings;
use LWP::UserAgent;

sub get_rank 
{ # ------------------begin get-rank()---------------------------

my ($url) = @_;

my $ua = LWP::UserAgent->new;
$ua->agent("User-Agent=Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.5) Gecko/20061201 Firefox/3.0.0.1");
my $req =  HTTP::Request->new(GET => "http://www.alexa.com/data/details/traffic_details/".$url);
my $req_res = $ua->request($req);
my $content = $req_res->content;

my @content_2 = split(/has\s*a\s*traffic\s*rank\s*of:/, $content);
my @content_3 = split(/Traffic\s*History\s*Graph\s*for\s*$url/, $content_2[1]);
#print "\n*********************************************\n".$content_3[0]."\n*********************************************\n";
my @content_4 = split(/".*?>.*?#my @content_5 = split(/\D/, $content_3[0]); 
my @content_5 = split(/(,?)(,?)/, $content_3[0]); 

#print "identities\n";
#foreach (@content_4) {print $_."\n\n---\n\n"}
#print "nmbers\n";
#foreach (@content_5) {print $_."\n\n---\n\n"}

my @identity;
my $i = 0;
foreach (@content_4) {
		if(length($_) == 4 && $_ !~ m//) {$identity[$i] = $_; $i++;}
	     }

my @numbers;
my $j = 0;
foreach(@content_5) 
{
#	if (length($_)!=0 && $_ !~ m/&/ && $_ !~ m/,/) {$numbers[$j] = $_; $j++;}
if (length($_)!=0 && $_ !~ m/&/ && $_ ne ",") {$numbers[$j] = $_; $j++;}
}

#print "identities(clean)\n";
#foreach (@identity) {print $_." -- "}
#print "\nnmbers(clean)\n";
#foreach (@numbers) {print $_." ~~ "}
#print "\n*********************************************\n";
my %identified;
my $m=1;


sub check_if_exist 
{
my ($n) = @_;
my $exist = 0;
	    foreach my $v (values(%identified))
	    {
	       if($v eq $n) {$exist = 1;};
	    }
return $exist;
}

my $sz_numbers = @numbers;
if(@numbers != 1)
{ #------------------------------------------------------------------------------------------------------

foreach my $numb (@numbers)
{
my $pass = 0;
foreach my $id (@identity)
	{
		if ($pass != 1)
		{
			if($content_3[0] =~ m/(,?)$numb{1}(,?)) 
			{
			$identified{$m} = $id.":".$numb if(!check_if_exist($id.":".$numb));
#				$n++;
			$m++;
			$pass = 1;

			}elsif ($content_3[0] =~ m/-->(,?)$numb(,?)(,?)$numb(,?)				{
			$identified{$m} = "void".":".$numb if(!check_if_exist("void".":".$numb));
			$m++;
			$pass = 1;

#				}elsif ($content_3[0] =~ m/>$numb or $content_3[0] =~ m/$numb,\d+/ )
#				{
#				$identified{$m} = "void*".":".$numb if(!check_if_exist("void*".":".$numb));
#				$m++;
#				$pass = 1;
#				}
			}
		}
	}
}



# ------------------------------ CSS -----------------------------------

my $req2 =  HTTP::Request->new(GET => "http://client.alexa.com/common/css/scramble.css");
my $req_res2 = $ua->request($req2);
my $css_content = $req_res2->content;
my @css_content_2 = split(/\s{\ndisplay: none\n}\n\./, $css_content);
my $sz = @css_content_2;
my @temp0 = split(/\./, $css_content_2[0]);
$css_content_2[0] = $temp0[1];
my @tempL = split(" {", $css_content_2[$sz-1]);
$css_content_2[$sz-1] = $tempL[0];
#foreach (@css_content_2) {print $_."\n";}

#    while( my ($key,$val) = each(%identified) )
#    {
#       foreach (@css_content_2) {
#       				if ($val =~ m/$_/ ) {$key = 0; print "okkkkkkkkkkkkkkkk\n";} 
#       				}
#    }

   foreach my $k (values(%identified))
   {
      foreach (@css_content_2) {
      				if($k =~ /$_/){$k = "0:0";}
      				}
   }

   foreach my $k (keys(%identified))
   {
#       print "Clef=$k Valeur=$identified{$k}\n";
   }

my $rank;
my @identifiedK = keys(%identified);
#my @identifiedV = values(%identified);
my $size_identified = @identifiedK;

for(my $num=1; $num	{
my @bit_rank = split(":", $identified{$num});
$rank = $rank.$bit_rank[1] if($identified{$num} ne "0:0" );
}


#print "\n=====>".$rank."\n";
return $rank;
} #------------------------------------------------------------------------------------------------------------------

else

{
#print "one parameter\n";
my $rank = $numbers[0];
#print $rank."\n";
return $rank;
}

} # ------------------end get-rank()---------------------------

#my $tries = 1;
#sub try
#{
#my $try1= get_rank($url);
#my $try2= get_rank($url);
#if ($try1 == $try2) {return $try1."(".$tries.")";}
#else
#{$tries++; try(); }
#}
#print try()."\n";

my $url = "forumdz.com";
print get_rank($url)."\n";

 

[Ma faiblaisse c'est bien le regex :mad: je crois que le problème vient de là]

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • Messages

    • Bonjour, ceux qui ont le problème de limitation du débit upload, avez vous régler le problème ou trouver une solution ? Merci 
    • Netflix « Cet appareil n'est pas pris en charge par l'application » Pour les appareils sous Android  je vous apporte la solution au problème Netflix en affichant le message d'erreur « Cet appareil n'est pas pris en charge par l'application », un problème lors de l'exécution de la version officielle de l'application Netflix téléchargée depuis son site. Il semble que Netflix veuille rendre la vie plus difficile à ses utilisateurs sur les appareils non certifiés et la plupart des TV-Box chinoises, une pratique qu'il pratique depuis sa création et cela ne nous surprend pas, mais il a une solution simple . L’erreur Netflix affichant « Cet appareil n'est pas pris en charge par l'application », est un problème lors de l'exécution de la version officielle de l'application Netflix téléchargée depuis son site. Il semble que Netflix veuille rendre la vie plus difficile à ses utilisateurs sur les appareils non certifiés et la plupart des TV-Box chinoises, une pratique qu'il pratique depuis sa création et cela ne nous surprend pas, mais il a une solution simple . Explication du problème :  Netflix n'offre la compatibilité officielle de son application et l'option de qualité HD que sur les appareils qui passent son approbation, cela implique que seules les grandes marques internationales ont accès à ces options. Netflix rend les choses un peu plus difficiles pour les utilisateurs d'appareils non certifiés en proposant sur son site officiel une application qui génère de nouveaux problèmes de compatibilité. Pour installer Netflix et éviter l'erreur «  Cet appareil n'est pas pris en charge par l'application  », suivez le point suivant du manuel. Solutions : Ceci est un contenu masqué, merci de Se connecter ou S’inscrire    
    • C'est ce que fait aussi Sonelgaz les branchements doivent passer par l'entrée principale de l'abonné pour une question juridique dans notre bureaucratie les factures font foi de justification de domicile. Mais si AT le fait  c'est incompréhensible.
    • @Gt3Dz bien...même si l'activation est probablement pour 2025....
    • Début des travaux rue Abou Nouas à Hydra.  
×
×
  • Créer...