Page 1 sur 2

[..] Script sur des fichiers

Posté : mar. 18 oct. 2011 14:49
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.

Re: [..] Script sur des fichiers

Posté : mar. 18 oct. 2011 15:26
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...

Re: [..] Script sur des fichiers

Posté : mar. 18 oct. 2011 18:30
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

Re: [..] Script sur des fichiers

Posté : mer. 19 oct. 2011 15:40
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

Re: [..] Script sur des fichiers

Posté : mer. 19 oct. 2011 16:30
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

Re: [..] Script sur des fichiers

Posté : mer. 19 oct. 2011 17:49
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.

Re: [..] Script sur des fichiers

Posté : mer. 19 oct. 2011 19:19
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...

Re: [..] Script sur des fichiers

Posté : mer. 19 oct. 2011 19:54
par DCVolo
Non sinon je serai pas vraiment là :roll:

Re: [..] Script sur des fichiers

Posté : jeu. 20 oct. 2011 16:46
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

Re: [..] Script sur des fichiers

Posté : jeu. 20 oct. 2011 16:50
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

Re: [..] Script sur des fichiers

Posté : jeu. 20 oct. 2011 16:52
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 = ""
 

Re: [..] Script sur des fichiers

Posté : jeu. 20 oct. 2011 23:02
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.

Re: [..] Script sur des fichiers

Posté : ven. 21 oct. 2011 02:09
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] '" />')

Re: [..] Script sur des fichiers

Posté : ven. 21 oct. 2011 07:40
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 & '" />')

Re: [..] Script sur des fichiers

Posté : ven. 21 oct. 2011 21:57
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é

Re: [..] Script sur des fichiers

Posté : ven. 21 oct. 2011 22:05
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 ^^

Re: [..] Script sur des fichiers

Posté : ven. 21 oct. 2011 22:17
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:

Re: [..] Script sur des fichiers

Posté : dim. 23 oct. 2011 21:08
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 :/

Re: [..] Script sur des fichiers

Posté : dim. 23 oct. 2011 21:58
par mikell

Code : Tout sélectionner

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

Re: [..] Script sur des fichiers

Posté : dim. 23 oct. 2011 23:48
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)