[..] Script sur des fichiers

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
DCVolo
Niveau 4
Niveau 4
Messages : 57
Enregistré le : dim. 25 avr. 2010 20:54
Status : Hors ligne

[..] Script sur des fichiers

#1

Message par DCVolo »

Bonjour,

avant de parler de mes problèmes car je n'ai pas encore conçu ce script, j'aimerai verifier si ma logique est bonne.

Je veux que mon script recuperd certains contenu dans un fichier et le classe dans une BDD suivant, Nom, Date, Titre.

j'aimerai que tout cela ne soit pas visible à l'ecran déjà ( pour eviter d'utiliser le CPU inutilement ).
Pour cela je dois ouvrir tel type d'extension de fichier
Rechercher le début de la balise et la fin
copier ce qu'il y a à l'interieur
coller dans la ligne qui correspond à la bonne colonne suivant le , Nom , Date , Titre

Suivant cette question, puis-je enregistrer sous une BDD MySQL via autoit ?

Voilà si j'ai oublié des choses ou si je dis n'importe quoi corrigez moi ^^

Bonne journée.
Avatar du membre
sksbir
Niveau 7
Niveau 7
Messages : 384
Enregistré le : lun. 26 oct. 2009 17:57
Localisation : Lyon
Status : Hors ligne

Re: [..] Script sur des fichiers

#2

Message par sksbir »

Bonjour

En fait, j'ai pas compris la question...

Bon, on comprend que tu cherches à réaliser un script d'indexation de fichiers, ça c'est ok.

Après , la façon dont tu collectes les informations, et surtout, la façon dont tu les stockes ( ce qui semble être le coeur de ton problème ?), ben ça dépend directement de la façon dont les données collectées vont être ensuite exploitées.

Moi, j'aime bien travailler avec des fichiers plats... mais c'est ma préférence...
DCVolo
Niveau 4
Niveau 4
Messages : 57
Enregistré le : dim. 25 avr. 2010 20:54
Status : Hors ligne

Re: [..] Script sur des fichiers

#3

Message par DCVolo »

Désolé de n'être pas très clair.

Je voudrais recreer ma BDD en gros. Quel soit reutilisable sous MySQL.

j'ai tout les fichiers qu'il me faut, il faut juste que je repeche les bons contenu et que je le range selon certains critère ( pour ranger selon des tables sous MySQL quoi ).

Mon shéma se résume à çà :

Code : Tout sélectionner

; ----------  Message  --------------



; detecter les fichiers

; faire une liste dans un fichier texte

; utiliser cette liste pour traiter un part un les fichiers

; dans fichier .htm reperer la balise <span class="postbody"><!-- google_ad_section_start -->  et _________________

; copier le texte entre ces deux balises

; enregister dans BDD
DCVolo
Niveau 4
Niveau 4
Messages : 57
Enregistré le : dim. 25 avr. 2010 20:54
Status : Hors ligne

Re: [..] Script sur des fichiers

#4

Message par DCVolo »

UP ( avec plus de details )



Code : Tout sélectionner

; --------- Membres ------------



; on demande via une interface simple, l'adresse du forum avec un exemple dessous
$forum = InputBox("blablabla", "Rentrez votre forum")
        iniwrite ("C:\blablabla\Id.ini", "Forum", "Forum=", ""$forum"")

; le pseudo de l'admin
$pseudo_admin = InputBox("blablabla", "Rentrez votre pseudo admin")
        iniwrite ("C:\blablabla\Id.ini", "Name", "Name=", ""$pseudo_admin"")

; le mdp admin
$pw_admin = InputBox("blablabla", "Rentrez votre mot de passe admin")
        iniwrite ("C:\blablabla\Id.ini", "Password", "Password=" ""$pw_admin"")




; ces données sont enregistrées dans un fichier ini 

; le programme ouvre la fenetre vers "Forum"/admin/admin_userlist.php
ShellExecute("($forum)/admin/admin_userlist.php")

; on se connecte en remplissant les champs
<tbody><tr>
<td colspan="2" align="center">&nbsp;</td>
</tr>
<tr>
<td width="45%" align="right"><span class="gen">Nom d’utilisateur:</span></td>
<td>
<input class="post" name="username" size="25" maxlength="40" value="Dark Clone Volo" type="text"> ; value = pseudo
</td>
</tr>
<tr>
<td align="right"><span class="gen">Mot de passe:</span></td>
<td>
<input class="post" name="password" size="25" maxlength="32" type="password"> ; type = le password
</td>

</tr>

<tr align="center">
<td colspan="2"><input name="redirect" value="admin/admin_userlist.php?admin=1" type="hidden"><input name="admin" value="1" type="hidden"><input name="login" class="mainoption" value="Connexion" type="submit"></td>
</tr>
<tr align="center">
<td colspan="2"><span class="gensmall"><a href="profile.php?mode=sendpassword" class="gensmall">J’ai oublié mon mot de passe</a></span></td>
</tr>
</tbody>



; afficher toute la liste des membres
<dl>
<dt><label for="show">Montrer</label></dt>
<dd><input size="5" value="900000" name="show" id="show" class="post" type="text"></dd>
</dl>
<dl>

; cliquer sur le outon TRIER de la page

<input type="hidden" name="start" value="0"><input type="submit" value="Trier" name="change_sort" class="submit" />


;enregistrer la page sous CTRL + S , nom = admin_userlist.php
Send("{LCTRL}S")
Send("admin_userlist.php")
Send("{ENTER}")

; ouvrir fichier admin_userlist.php (l'enregistrer au préalable )
if FileExists ("admin_userlist.php") Then
    FileOpen("admin_userlist.php")
ElseIf ; on relance la partie Membres jusqu'a ici
    
EndIf


; recuperer pseudo entre style="color: et </a></b> mais encore encore à l'interieur de celles-ci entre ces balises <b> et </b>
style="color:#FFA34F"><b>monpseudo</b></a></b>


; recuperer e-mail entre balises <a href="mailto: et ><img src="
<a href="mailto:monemail@live.fr"><img src="


;ranger dans la liste

; copier dans la BDD

 
Je sais que c'est un code incomplet, la partie rechercher du texte specifique entre deux balises je pense pouvoir trouver dans la recherche peut être, par contre rechercher deux fois entre deux balises :/ et aussi remplir des champs via le bout de code que je donne devrait normallement suffir.

encore une fois est-il possible de manipuler une BDD MySQL avec autoit ? Si oui comment ?


Je repasserai ce soir et avant de passer je ferai quelques recherches sur votre forum voir si j'ai pas des réponses dessus. Mais on est jamais mieux servit que quand on est mieux deservit :P
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Script sur des fichiers

#5

Message par GaRydelaMer »

Bonjour

Plus te cherche à nous éclairer et moins c'est clair ton histoire, mélange de script autoit et de code html, des erreurs dans l'utilisation de fonction simple (iniwrite).

Bref, Oui tu peux manipuler une base MySQL avec AutoIt plusieurs solutions:
- Avec ADO nécessite le driver ODBC de MySQL installé sur la machine
- Avec l'UDF MySQL: http://www.autoitscript.com/forum/topic ... hout-odbc/
- Avec EzMySQL: http://www.autoitscript.com/forum/topic ... th-autoit/

Ensuite si j'ai bien compris tu veux recréer ta base de données, en lisant les données sur une page web ?

1/ pourquoi ne pas utiliser l'export de ta base de donnée depuis le serveur web si tu en es le gestionnaire (dump).

2/ tu as des objets sous AutoIt pour te facilité l'accès aux données de page Web
IE_xxxx

Dans ce cas, tu peux créer a la main un tableau avec lurl de la page, le nom et mot de passe
ensuite tu créer un objet dans une fenêtre IE_embeded auquel tu vas lui dire de naviguer (IE_Navigate) vers ton url
la tu remplis le formulaire (IE_Form).
Tu peux ensuite lire si les données sont dans une table html (_IETableWriteToArray)

Voila de quoi commencer ton script et lire le fichier d'aide pour les syntaxes
DCVolo
Niveau 4
Niveau 4
Messages : 57
Enregistré le : dim. 25 avr. 2010 20:54
Status : Hors ligne

Re: [..] Script sur des fichiers

#6

Message par DCVolo »

il sert plus d'explication comme je l'ai dit que de script. J'ai inseré le code html pour donner des infos.

Là la partie que j'ai montré ( Membres ) je voudrais en faire un script fini qui aurai comme action :

- Via une interface, l'utilisateur rentre l'adresse de son forum, son pseudo d'admin, et son mot de passe admin, qui sont enregistrés dans un ini.
- Ensuite le programme affiche la page*1 avec le navigateur par defaut ( et pas uniquement IE, moi par exemple je n'ai plus IE )
- Affiche toute la liste des membres sur une seule page donc on rentre un nombre de client par page de 900 000 ( je sais c'est extreme mais bon on s'en moque) via le code html que je fournis encore une fois
- Enregistrer la page sous le nom "admin_userlist.htm" si possible l'enregistrer dans ce dossier C:\blablabla\Backup\
- Recuperer dans ce fichier tout les membres et leurs adresses e-mail, pour cela il faudra :
pour le pseudo retrouver le texte entre style="color: et </a></b> mais encore encore à l'interieur de ces balises il faut recuperer le vrai texte entre ces balises <b> et </b> EX :
une ligne ou le pseudo est écrit sa donne ceci :
<b><a href="admin_users.php?mode=edit&u=166&rci=f9ec0e461ed1802ae8abd9e3c86d3064" >gRaph</a></b>
ou ceci
<b><a href="admin_users.php?mode=edit&u=2&rci=f9ec0e461ed1802ae8abd9e3c86d3064" style="color:#FFA34F"><b>LegenD</b></a></b>

gRaph et LegenD sont les deux pseudo à recuperer

- Même chose pour l'e-mail qui est entre ces balises <a href="mailto: et ><img src=" EX:
<a href="mailto:monemail@live.fr"><img src="

les ranger dans un tableau dans un format qui pourra être reutilisé par MySQL ou enregistré directement sous MySQL sous cette forme :
id , pseudo , e-mail.
chaque pseudo son id ( id incrementé )


*1 la page serai construite de maniere à reutiliser la valeur de l'utilisateur inscrite dans l'ini par d'où mon exemple bidon:
ShellExecute("($forum)/admin/admin_userlist.php") par exemple ShellExecute("http://monforum.com/admin/admin_userlist.php")






Voilà c'est pour la partie recuperation des membres ça. J'espere que c'est plus clair.
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Script sur des fichiers

#7

Message par jchd »

Entre-nous, ne serait-il pas plus simple de faire un export depuis la ou les bases du ou des sites concernés ?
Ou un ftp ou quoi que ce soit d'autre de moins biscornu...
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
DCVolo
Niveau 4
Niveau 4
Messages : 57
Enregistré le : dim. 25 avr. 2010 20:54
Status : Hors ligne

Re: [..] Script sur des fichiers

#8

Message par DCVolo »

Non sinon je serai pas vraiment là :roll:
DCVolo
Niveau 4
Niveau 4
Messages : 57
Enregistré le : dim. 25 avr. 2010 20:54
Status : Hors ligne

Re: [..] Script sur des fichiers

#9

Message par DCVolo »

une partie ou je coince :

Code : Tout sélectionner

Global $forum = ""
$forum = InputBox("Forum", "Forum -> Exemple: http://monforum.com ")
iniwrite ("C:\blablabla\Id.ini", "Forum", "Forum", $forum)

Global $url_userlist = "/admin/admin_userlist.php"

global $admin_userlist = ""
je voudrais que global $admin_userlist = "" , associe les deux chaines de caractère pour n'en faire plus qu'une , exemple où $forum = http://monforum.com :

http://monforum.com/admin/admin_userlist.php
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

Re: [..] Script sur des fichiers

#10

Message par matwachich »

Le top à mon avis pour MySQL, c'est EzMySQL, car c'est portable, il n'y a que la dll à fournir (pas besoin d'ODBC), et il s'utilise exactement comme SQLite.

Je l'utilise au quotidien, sans problèmes.

Après, pour extraire des infos de pages web, rien de tel que _StringBetween
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
overflow
Niveau 5
Niveau 5
Messages : 138
Enregistré le : sam. 05 déc. 2009 23:49
Status : Hors ligne

Re: [..] Script sur des fichiers

#11

Message par overflow »

essaye ca

Code : Tout sélectionner

Global $forum = ""
$forum = InputBox("Forum", "Forum -> Exemple: http://monforum.com ")
iniwrite ("C:\blablabla\Id.ini", "Forum", "Forum", $forum)

Global $url_userlist = "/admin/admin_userlist.php"

$test = $forum & $url_userlist

msgbox(0,"",$test)
global $admin_userlist = ""
 
DCVolo
Niveau 4
Niveau 4
Messages : 57
Enregistré le : dim. 25 avr. 2010 20:54
Status : Hors ligne

Re: [..] Script sur des fichiers

#12

Message par DCVolo »

Bonsoir, merci bien pour l'aide ça fonctionne, je me doutais que se serai un truc simple mais je trouvais pas lequel ^^ , merci bien

Pour ce qui est de MySQL, c'est donc de recuperer les données et les enregistrer dans la BDD mais toujours sur PC, pas de transfert via internet donc si ce que vous m'avez dit correspond à ce que je recherche, je rechercherai et ferai de nouveau appel si j'ai un soucis.

Je vais regarder pour _stringbetween merci bien ;)



Petite aide encore svp :

Code : Tout sélectionner

; le pseudo de l'admin
$pseudo_admin = InputBox("name", "Rentrez votre pseudo")
        iniwrite ("C:\blablabla\Backup\Id.ini", "Name", "Name", $pseudo_admin)

global $ini_id_pseudo = IniRead ("C:\blablabla\Backup\Id.ini", "Name", "Name")
Je veux recuperer cette valeur dans $ini_id_pseudo :

[Name]
Name=cette valeur

EDIT : J'ai trouvé pour ma question, désolé.

Edit:

Code : Tout sélectionner

; le pseudo de l'admin
$pseudo_admin = InputBox("Name", "Rentrez votre pseudo")
        iniwrite ("C:\blablabla\Backup\Id.ini", "Id", "Name", $pseudo_admin)

; le mdp admin
$pw_admin = InputBox("Password", "Rentrez votre mot de passe")
        iniwrite ("C:\blablalba\Backup\Id.ini", "Id", "Password", $pw_admin)
; ces données sont enregistrer dans un fichier ini 

global $ini_id_pseudo = IniRead ("C:\blablabla\Backup\Id.ini", "Id", "Name", "NotFound")
global $ini_id_password = IniRead ("C:\blablabla\Backup\Id.ini", "Id", "Password", "NotFound")

FileWriteLine($file, '<input type="text" class="post" name="username" size="25" maxlength="40" value="'$ini_id_pseudo'" />')
FileWriteLine($file, '<input type="password" class="post" name="password" size="25" maxlength="32" value="'$ini_id_password'" />')

==> Error in expression.:
Là par contre je cale.
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

Re: [..] Script sur des fichiers

#13

Message par matwachich »

Quand vous mettez un truc du genre

Code : Tout sélectionner

Fonction(... blabla ..., "Du texte" $uneVariable)
AutoIt ne peut pas deviner tout seul qu'il doit "coller" (on dit Concaténer) le texte et la variable, car en AutoIt, on dit que c'est un langage qui n'est pas "typé" donc une variable peut être un numbre, du texte, un tableau, un objet... Et AutoIt ne peut pas deviner qu'il doit la considérer comme du texte ("String")

Donc, il faut concaténer notre texte et notre variable avec le symbole &

Code : Tout sélectionner

Fonction(... blabla ..., "Du texte" [b]&[/b] $uneVariable)
Dans votre cas, c'est là que ça coince

Code : Tout sélectionner

FileWriteLine($file, '<input type="text" class="post" name="username" size="25" maxlength="40" value="' [b]&[/b] $ini_id_pseudo [b]&[/b] '" />')
FileWriteLine($file, '<input type="password" class="post" name="password" size="25" maxlength="32" value="' [b]&[/b] $ini_id_password [b]&[/b] '" />')
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Script sur des fichiers

#14

Message par GaRydelaMer »

Ajoute & pour concaténer des chaines, attention aussi au quotes et double quotes.

Code : Tout sélectionner

FileWriteLine($file, '<input type="text" class="post" name="username" size="25" maxlength="40" value="' & $ini_id_pseudo & '" />')
DCVolo
Niveau 4
Niveau 4
Messages : 57
Enregistré le : dim. 25 avr. 2010 20:54
Status : Hors ligne

Re: [..] Script sur des fichiers

#15

Message par DCVolo »

Merci bien, au passage comme ça j'ai pu ameliorer mon programme :)

Sinon j'ai regardé pour le _stringbetween d'ailleurs je trouve leur exemple pas vraiment adapté à l'explication mais bon, ça doit être ma façon de voir.

Code : Tout sélectionner

const $s_String = "" ; alors dans le detail "The string to search." ça veut bien dire qu'on sait au préalable à quoi s'attendre, or je sais pas à quel pseudo ou e-mail m'attendre...
const $s_Start = '<b><a href="admin_users.php?mode=edit&u='
const $s_End = '</b><div>'

#Include <String.au3>
_StringBetween($s_String, $s_Start, $s_End )
; et encore avec tout ça y'a encore du code à supprimer
Non en fait j'y comprend rien ...
Vaudrait mieux pas un pattern dans ce genre ? Car je recuperd les informations dans un fichier.php

Code : Tout sélectionner

; boucle qui lis toute les lignes du fichier
$file2 = FileOpen("admin_userlist.php", 0)

; Check if file opened for reading OK
If $file2 = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    Exit
EndIf

; Read in lines of text until the EOF is reached
While 1
    $line2 = FileReadLine($file2)
    If @error = -1 Then ExitLoop
        
    MsgBox(0, "Line read:", $line2) ; juste à la place de cette ligne il faudrait, ET rechercher + recuperer pseudo et email ET l'inscrire dans un tableau/mysql
Wend

FileClose($file2)
je vais aller voir pour ton idée sur mysql mais là sur la recherche je suis completement bloqué
Avatar du membre
PandiPanda
Membre émérite
Membre émérite
Messages : 656
Enregistré le : mar. 19 juil. 2011 14:03
Localisation : Bruxelles
Status : Hors ligne

Re: [..] Script sur des fichiers

#16

Message par PandiPanda »

pour le _stringBetween() ce post ci mettra peut etre sur la voie ?

a savoir que le $string est le code source de la page en question ^^
La seule moralité qui tienne dans un monde cruel est la chance. Impartiale. Équitable. Vraie
DCVolo
Niveau 4
Niveau 4
Messages : 57
Enregistré le : dim. 25 avr. 2010 20:54
Status : Hors ligne

Re: [..] Script sur des fichiers

#17

Message par DCVolo »

J'ai trouvé ça aussi au passage: http://autoitscript.fr/forum/viewtopic. ... eau+infini

J'ai pas le temps de programmer ce soir, je vous dit à demain ou après demain.

Bonne soirée et ou bon week-end =) et merci encore :wink:
DCVolo
Niveau 4
Niveau 4
Messages : 57
Enregistré le : dim. 25 avr. 2010 20:54
Status : Hors ligne

Re: [..] Script sur des fichiers

#18

Message par DCVolo »

Code : Tout sélectionner

#include <inet.au3>
$url = "http://monforum.com/admin/admin_userlist.php?admin=1&show=900000"
$source = _INetGetSource($url)
FileWrite("C:\blablabla\Backup\admin_userlist.php",$source)

; si le fichier qui doit recevoir la liste des fichiers .htm n'existe pas il faut le creer
$file3 = "C:\blablabla\Backup\liste.txt"
if not FileExists($file3) Then
    FileWrite( $file3,"")
EndIf

$trouve = stringregexp($source,'<b><a href="admin_users.php?mode=edit&u=.*</b>',3)


FileWriteLine($file3, $trouve)

Error => ==> Unterminated string.:

J'vais finir par aller demander à ce qu'on me le fasse même si je prefererai de loin être guidé, j'y comprend rien. Et là sa commence à faire du temps que j'y passe dessus :/
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Script sur des fichiers

#19

Message par mikell »

Code : Tout sélectionner

$trouve = stringregexp($source,'<b><a href=' & '"' & 'admin_users.php?mode=edit&u=.*</b>',3)
Pas mieux ça ? :wink:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
PandiPanda
Membre émérite
Membre émérite
Messages : 656
Enregistré le : mar. 19 juil. 2011 14:03
Localisation : Bruxelles
Status : Hors ligne

Re: [..] Script sur des fichiers

#20

Message par PandiPanda »

et aussi faudrai savoir que stringregexp("","",3) renvoi un array (tableau)
donc bon, votre FileWriteLine($file3, $trouve) risque de poser un plus gros problème x)
La seule moralité qui tienne dans un monde cruel est la chance. Impartiale. Équitable. Vraie
Répondre