Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#26 Le 03/03/2013, à 00:53

Mathal44

Re : Récupérer un lien dans un fichier texte par script ou commande

Je ne comprends pas, quel fichier supplémentaire voudrais-tu ?
les liens de départs ?
Par exemple, si je fais:

while read line 
do 
   plowlist "${line}" >liens_provisoires.txt 
   plowdown -m -c liens_provisoires.txt
   awk -v chmFic=./liens_valides3bis.txt '/^http/{split($0,a,"/"); if(a[3] != last){last=a[3]; print $0 >> chmFic ; nextfile}else next}' liens_provisoires.txt*
done <liens_de_depart.txt

le fichier d'entrée est:

liens_de_depart.txt a écrit :

http://www.jheberg.net/download/6E4gPW- … de-209-avi
http://www.jheberg.net/download/WAdI3x- … de-210-avi
http://www.jheberg.net/download/1FYdSL- … de-211-avi
http://www.jheberg.net/download/jcU0pL- … de-212-avi
http://www.jheberg.net/download/8kVVGt- … de-213-avi
http://www.jheberg.net/download/b1uWZw- … de-214-avi
http://www.jheberg.net/download/qdQXXU- … de-219-avi
http://www.jheberg.net/download/iglI4l- … de-220-avi
http://www.jheberg.net/download/kxw2yi- … de-221-avi
http://www.jheberg.net/download/lEP0iF- … de-222-avi
http://www.jheberg.net/download/N2CNTt- … de-223-avi
http://www.jheberg.net/download/hyYPhw- … de-224-avi
http://www.jheberg.net/download/eezIP2- … de-225-avi
http://www.jheberg.net/download/7F9BvH- … de-226-avi
http://www.jheberg.net/download/4Xt4zh- … de-227-avi
http://www.jheberg.net/download/XJ8uCG- … de-228-avi
http://www.jheberg.net/download/GE3Eon- … de-229-avi
http://www.jheberg.net/download/hTTFC0- … de-230-avi
http://www.jheberg.net/download/XVHBms- … de-231-avi
http://www.jheberg.net/download/96PjsB- … de-232-avi
http://www.jheberg.net/download/oHy4v8- … de-238-avi
http://www.jheberg.net/download/qj19zD- … de-239-avi
http://www.jheberg.net/download/fcBKF8- … de-240-avi
http://www.jheberg.net/download/gN1Lz7- … de-241-avi
http://www.jheberg.net/download/NnkmxE- … de-242-avi
http://www.jheberg.net/download/tCqfJG- … de-243-avi
http://www.jheberg.net/download/T9HUWX- … de-244-avi
http://www.jheberg.net/download/XxkmT9- … de-245-avi
http://www.jheberg.net/download/kbnqub- … de-246-avi
http://www.jheberg.net/download/y9oJlL- … de-247-avi
http://www.jheberg.net/download/eEevKO- … de-248-avi
http://www.jheberg.net/download/zrKMH4- … de-249-avi
http://www.jheberg.net/download/O742Gh- … de-250-avi
http://www.jheberg.net/download/okSDhX- … de-251-avi
http://www.jheberg.net/download/S0ypp2- … de-252-avi
http://www.jheberg.net/download/vNpLHg- … de-253-avi
http://www.jheberg.net/download/4KuDUa- … de-255-avi
http://www.jheberg.net/download/F6grHC- … de-256-avi
http://www.jheberg.net/download/mbm0kD- … de-258-avi
http://www.jheberg.net/download/MJ6Day- … de-259-avi
http://www.jheberg.net/download/f4XmRQ- … de-260-avi

C'est ça que tu veux ?

Hors ligne

#27 Le 03/03/2013, à 01:44

Watael

Re : Récupérer un lien dans un fichier texte par script ou commande

non, je voudrais les fichier{01,04,14,38} tels que décrit dans le post #8, pour lesquels, normalement, la commande awk suffit à elle-même.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#28 Le 03/03/2013, à 01:54

Mathal44

Re : Récupérer un lien dans un fichier texte par script ou commande

Ah et bien tous ces fichiers sont les "liens_provisoires.txt", un par un.
Mais au lieu de les créer vraiment en fait, pour éviter de créer chaque fichier {01,04,14,38,XX} un par un et manuellement, je le fais dans une boucle while read line, du coup ce ne sont que des fichiers temporaires.
Cela doit marcher quand même non ?

Hors ligne

#29 Le 03/03/2013, à 02:20

Watael

Re : Récupérer un lien dans un fichier texte par script ou commande

Bon, alors on part de quel fichier, parce qu'avec le fichier liens_de_depart.txt, tous les liens pointent vers le même serveur.
C'est évident.

Non seulement tu débutes, mais tu changes la donne.
On perd un peu le fil. sad
(tu aurais dû ouvrir un nouveau sujet, maintenant c'est trop tard)

Les codes que l'on donne sont adaptés à une situation donnée, tu ne peux pas les coller avec d'autres bouts de scripts, en modifiant le fichier d'entrée, et espérer que ça fonctionne encore.

Alors, on recommence:
Tu as un fichier liens_de_depart.txt, tel que montré plus haut
...
Ensuite ? Que veux-tu faire?


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#30 Le 03/03/2013, à 03:16

Mathal44

Re : Récupérer un lien dans un fichier texte par script ou commande

OK, au départ je cherchais seulement à récupérer le premier lien valide, ce qui marche très bien avec la commande grep que vous m'avez donné :

while read line 
do 
   plowlist "${line}" >liens_provisoires.txt 
   plowdown -m -c liens_provisoires.txt
   grep -m 1 "^http://" liens_provisoires.txt >>liens_valides.txt
done <liens_de_depart.txt

Dans ce script pour l'instant, je crée un fichier temporaire liens_provisoires.txt pour chaque ligne de liens_de_depart.txt (plowlist "${line}" >liens_provisoires.txt).
Dans ce fichier temporaire, je vérifie si les liensvalides (plowdown -m -c liens_provisoires.txt),
puis j'extrais le premier lien valide que je rajoute au fichier de sortie liens_valides.txt (grep -m 1 "^http://" liens_provisoires.txt >>liens_valides.txt)

A partir de ce résultat, j'ai cherché à optimiser ce script en alternant les serveurs obtenus dans liens_valides.txt
Donc ajouter une condition à l'extraction, ne plus prendre que le premier lien valide, mais prendre le premier lien valide avec un serveur différent du dernier lien ajouté.
Suis-je clair ? hmm

Je peux fermer ce sujet et en ouvrir un autre, cela ne me dérange pas, mais en fait on reste dans le sujet car on récupère un lien dans un fichier texte de toute façon.
Que préfères-tu, rester ici ou en ouvrir un autre ?

Hors ligne

#31 Le 03/03/2013, à 11:29

miniSeb

Re : Récupérer un lien dans un fichier texte par script ou commande

Et si tu faisais une liste ? Au lieu de jouer avec des fichiers temporaires, tu ajoutes chaque lien dans ta liste, tu valides tes liens et puis tu alternes les serveurs à coup de regex...

Hors ligne

#32 Le 03/03/2013, à 11:40

tiramiseb

Re : Récupérer un lien dans un fichier texte par script ou commande

C'est clair que là on est à un niveau de complexité où une liste serait bien plus facile à gérer... voire un dictionnaire, si on part sur du Python par exemple...

Hors ligne

#33 Le 03/03/2013, à 22:17

Mathal44

Re : Récupérer un lien dans un fichier texte par script ou commande

En fait je ne pensais pas que ce serait si compliqué ^^
J'ai pensé à ça comme condition par exemple:

while read line 
do 
   plowlist "${line}" >liens_provisoires.txt 
   plowdown -m -c liens_provisoires.txt

   If [grep -m 1 "^http://........" liens_provisoires.txt = grep -m derniere_ligne "^http://........" liens_valides.txt]
   then grep -m 2 "^http://" liens_provisoires.txt >>liens_valides.txt
   else grep -m 1 "^http://" liens_provisoires.txt >>liens_valides.txt

done <liens_de_depart.txt

mais je n'ai pas trouvé comment dire à grep de prendre la derniere_ligne.

Qu'en pensez-vous ?

Dernière modification par Mathal44 (Le 03/03/2013, à 23:24)

Hors ligne

#34 Le 04/03/2013, à 14:01

miniSeb

Re : Récupérer un lien dans un fichier texte par script ou commande

Un petit truc en Perl vite torché ce midi (i.e. fonctionnel mais relativement peu testé donc peut-être inefficace dans certains cas) :

Je n'ai pas trouvé ce qu'était plowdown donc je l'ai remplacé par une fonction de contrôle avec wget.

#! /usr/bin/perl -w

# usage : perl script.pl infile outfile

use strict;
use warnings;
use Tie::File;

open( FILE, '<', $ARGV[0] )
  or die "Unable to open file \"$ARGV[0]\" : $!\n";

my %valid_links;

for (<FILE>) {
    next unless /^http/i;
    system("wget --spider -qO - $_");
    if ( $? == 0 ) {
        chomp;
        push( @{ $valid_links{ $+{server} } }, $_ )
          if m&://(w{3}\.)?(?<server>[^/?]+)&i;
    }
}

close FILE;

tie my @outfile, 'Tie::File', $ARGV[1]
  or die "Unable to open \"$ARGV[1]\" : $!";

until ( !keys %valid_links ) {
    for my $server ( keys %valid_links ) {
        push( @outfile, @{ $valid_links{$server} }[0] )
          if defined( @{ $valid_links{$server} }[0] );
        shift @{ $valid_links{$server} };
        delete $valid_links{$server} if scalar @{ $valid_links{$server} } == 0;
    }
}

untie @outfile;

Pour l'utiliser :

perl script.pl fichier-contenant-les-liens-à-tester fichier-de-sortie

Hors ligne

#35 Le 10/03/2013, à 20:37

miniSeb

Re : Récupérer un lien dans un fichier texte par script ou commande

Bon, je remonte le topic : le script fonctionne comme tu veux ? Parce que je n'ai pas de retour, donc je ne sais pas si je dois apporter des modifications...

Hors ligne

#36 Le 16/03/2013, à 22:10

Mathal44

Re : Récupérer un lien dans un fichier texte par script ou commande

Bonjour miniSeb,

Vraiment désolé mais j'ai repris le boulot et du coup je n'ai pas du tout eu le temps de tester le script...
Je teste et je te tiens informé smile

Hors ligne

#37 Le 25/03/2013, à 02:19

Mathal44

Re : Récupérer un lien dans un fichier texte par script ou commande

Bon alors j'ai essayé de tester ton script, mais le problème c'est que mes liens sont un peu vieux du coup il n'y a quasiment plus de liens valides dedans,
alors je ne peux pas vraiment le tester en profondeur.
Enfin j'ai quand même des résultats donc ça doit marcher smile

Hors ligne