Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Un programme pour le boulot Lun 30 Mar 2015 - 17:12 | |
| Bonjour, Je vous partage un programme que vous ne pourrez pas tester (Non Papydall, ne le lance pas, ce n'est pas utile ) C'est un programme très légèrement modifié que je viens de faire pour récupérer des fiches présente sur un Intranet et les préparer pour les réintegrer sur un autre logiciel en supprimant tout le code qui n'était plus utile et qui n'aurait plus fonctionné sur le nouveau logiciel. L'intéret éventuel pour certains utilisateur: - L'usage des fonction de Klaus permettant de récupérer le code source de pages WEB ou intranet - Un exemple de traitement - Donner des idées à d'autres qui auraient d'autres besoins spécifiques mais qui ne savaient pas que c'était possible - Rappel sur l'usage intégré des fonctions manipulants Excel (pour mon usage brut, je n'ai pas eu besoin d'avoir recours aux puissantes fonctions permettant de manipuler Excel depuis KGF. DLL) Note: Le fichier "ini.txt" contient 2 lignes: une ligne de blabla et une ligne contenant le numéro de la fiche en cours de reprise permettant de reprendre où on en était dans le fichier Excel. - Code:
-
DIM url$, res%, i%,j%,k%, c_self$, n_fiche$, chemin$, sep$ DIM chaine$, car_courrant, sortie, s$, s2$, gui$, a_nom$ DIM fin, titre$, image$,n_image$, pos%,fin_bloc%, rep_img$, ligne_courante% DIM source$, dest$, l_caption%, racine$, ini$, nb_fiches% DIM cat1$, cat2$, cat3$ : ' 3 niveaux de catégorisation maximum DIM nb_keywords%, keywords$(30), images$ DIM HTML$ : ' Contenu HTML de la fiche
LABEL Valid_URL, Quitter racine$ = "f:" c_self$ = "http://selfservice.fr.superworld.societe.com" n_fiche$ = "ouvrir-des-fichiers-excel-presents-dans-un-document-word-ou-powerpoint" chemin$ = racine$ + "fiches\" rep_img$= racine$ + "images\" ini$ = racine$+"cfg\" gui$ = CHR$(34) sep$ = CHR$(10)+CHR$(13)
MEMO 1 : HIDE 1 MEMO 2 : HIDE 2 APPLICATION_TITLE "Récupération des fiches Self-service" DLL_ON "KGF.dll"
CAPTION 0, "Attente de la saisie de l'URL de la fiche Self-service à récupérer" HEIGHT 0 , 150 EXCEL_START : WAIT 2000 : EXCEL_FILE_OPEN 11,ini$ + "fiches_SS.xls" ALPHA 4 : TOP 4, 10 : WIDTH 4, 300 : LEFT 4, 10 CAPTION 4, "Entrer l'URL de la fiche Self-service ci dessous :" EDIT 5 : TOP 5, 30 : WIDTH 5, 400 : LEFT 5,10 BUTTON 6 : TOP 6, HEIGHT(0) - 80 : LEFT 6, 10 : WIDTH 6, 100 : CAPTION 6, "VALIDER" ON_CLICK 6, Valid_URL BUTTON 7 : TOP 7, TOP(6) : LEFT 7, 20 + WIDTH(6) : WIDTH 7, 100 : CAPTION 7, "QUITTER" ON_CLICK 7, QUITTER FILE_OPEN_READ 10,ini$ + "ini.txt" s$ = FILE_READLN$(10) : ' Lecture de l'entête s$ = FILE_READLN$(10) : ' Lecture du nombre de fiches actuellement créés FILE_CLOSE 10 ALPHA 8 : TOP 8, TOP(6) : WIDTH 8, 185 : LEFT 8, 50 + LEFT(7) + WIDTH(7) CAPTION 8, "Nb fiches créées :" EDIT 9 : TOP 9, TOP(6) : WIDTH 9, 60 : LEFT 9, 10 + LEFT(8) + WIDTH(8) TEXT 9, s$ : nb_fiches% = VAL(TEXT$(9))
END
Valid_URL: IF TEXT$(5) = "" THEN RETURN a_nom$ = n_fiche$ IF INSTR_POS(TEXT$(5),"/",1) > 0 Nettoie_URL() ELSE n_fiche$ = TEXT$(5) END_IF IF n_fiche$ <> a_nom$ THEN Recup_URL() RETURN
SUB Nettoie_URL() s$ = TEXT$(5) res% = INSTR_POS(s$,"/",1) WHILE res% > 0 s$ = RIGHT$(s$, LEN(s$) - (res%)) res% = INSTR_POS(s$,"/",1) END_WHILE n_fiche$ = s$ END_SUB
SUB Recup_URL()
url$ = c_self$ + "/fiche/" + n_fiche$ CAPTION 0, "Tentative de récupération du code sur le Self-service - Attente de réponse" res% = DLL_Call3("GetHtmlFromURL",ADR(url$),HANDLE(1),1)
' Récupération des mots-clés s$ = "Récupération des mots-clés" CAPTION 0,s$ : l_caption% = LEN(s$) : chaine$= "" s$ = "/backoffice/fiche/edit/"
FOR i% = 1 TO COUNT(1) CAPTION 0, LEFT$(CAPTION$(0), l_caption%) + " - Ligne en cours :"+STR$(i%) chaine$ = chaine$ + ITEM_READ$(1,i%) res% = INSTR_POS(chaine$,s$,1) : ' On recherche l'URL d'administration de la fiche IF res% > 0
' On supprime ce qu'il y a avant le bloc qui nous interesse i% = i% +1 : chaine$ = chaine$ + ITEM_READ$(1,i%) chaine$ = RIGHT$(chaine$, LEN(chaine$) - res% +1) s2$ = gui$ : Trouve(s2$)
s$ = "Ouverture de l'administration de la fiche" CAPTION 0,s$ : l_caption% = LEN (s$)
' On ouvre la fiche en mode administration s$ = c_self$ + LEFT$(chaine$, res% - 1) res% = DLL_CALL3("GetHtmlFromURL",ADR(s$),HANDLE(2),1)
' Traitement de la fiche en mode administration sortie = 0 : nb_keywords% = 0 FOR j% = 1 TO COUNT(2) s2$ = ITEM_READ$(2,j%) : s$="MotClesOrdered[" : res% = INSTR_POS(s2$,s$,1) IF res% > 0 ligne_courante% = j% EXIT_FOR END_IF NEXT j% s2$ = "" FOR j% = ligne_courante% TO ligne_courante% + 600 s2$ = s2$ + ITEM_READ$(2,j%) NEXT j%
WHILE sortie = 0
s$ = "Traitement du mot clé "+STR$(nb_keywords%) CAPTION 0,s$ : l_caption% = LEN (s$)
' On recherche si le mot-clé est créé s$="MotClesOrdered["+ STR$(nb_keywords%) +"].Keyword"+gui$ res% = INSTR_POS(s2$,s$,1)
IF res% > 0 nb_keywords% = nb_keywords% + 1 s$ = "type="+gui$+"text"+gui$+" value="+gui$ res% = INSTR_POS(s2$,s$, res%+15) s2$ = RIGHT$(s2$, LEN(s2$) - (res%+LEN(s$)) +1) fin = INSTR_POS(s2$,gui$,1) - 1 keywords$(nb_keywords%) =LEFT$(s2$,fin) s2$ = RIGHT$(s2$, LEN(s2$) - fin +1) ELSE sortie = 1 END_IF END_WHILE ' Les mots clé sont récupérées, passage au bloc suivant ligne_courante% = i% EXIT_FOR END_IF NEXT i%
' Ecriture des mots clé dans le fichiers Excel des fiches Self-service s$ = "" FOR i% = 1 TO nb_keywords% IF LEN(s$) > 0 THEN s$= s$+";" s$ = s$ + keywords$(i%) NEXT i%
EXCEL_WRITE "A"+STR$(nb_fiches% + 2),s$
' Récupération des catégories de la fiche
s$ = "Récupération de la catégorisation de la fiche" CAPTION 0,s$ : l_caption% = LEN(s$)
FOR i% = ligne_courante% TO COUNT(1) CAPTION 0, LEFT$(CAPTION$(0), l_caption%) + " - Ligne en cours :"+STR$(i%) chaine$ = chaine$ + ITEM_READ$(1,i%) res% = INSTR_POS(chaine$,"breadcrumb",1) : ' On recherche le début du premier bloc IF res% > 0 ' On supprime ce qu'il y a avant le bloc qui nous interesse i% = i% +1 : chaine$ = chaine$ + ITEM_READ$(1,i%) pos% = LEN(chaine$) - res% chaine$ = RIGHT$(chaine$, LEN(chaine$) - (res% + 10)) s2$ = "<div class="+gui$+"rendered-body" : Trouve(s2$) s$ = LEFT$(chaine$, res% - 1) s2$ = "<a href="+gui$+"/categorie/" pos% = INSTR_POS(s$,s2$, 1) res% = INSTR_POS(s$,gui$+">",pos% + LEN(s2$)) fin = INSTR_POS(s$,"</a>",res%+2) : fin = fin - (res%+2) cat1$ = MID$(s$,res%+2, fin) s$ = RIGHT$(s$,LEN(s$) - fin) EXCEL_WRITE "B"+STR$(nb_fiches%+ 2),cat1$ pos% = INSTR_POS(s$,s2$, 1) IF pos% > 0 res% = INSTR_POS(s$,gui$+">",pos% + LEN(s2$)+1) fin = INSTR_POS(s$,"</a>",res%+2) : fin = fin - (res%+2) cat2$ = MID$(s$,res%+2, fin) EXCEL_WRITE "C"+STR$(nb_fiches%+ 2),cat2$ s$ = RIGHT$(s$,LEN(s$) - fin) pos% = INSTR_POS(s$,s2$, 1) IF pos% > 0 res% = INSTR_POS(s$,gui$+">",pos% + LEN(s2$)+1) fin = INSTR_POS(s$,"</a>",res%+2) : fin = fin - (res%+2) cat3$ = MID$(s$,res%+2, fin) EXCEL_WRITE "D"+STR$(nb_fiches%+ 2),cat3$ END_IF END_IF chaine$ = RIGHT$(chaine$, LEN(chaine$) - LEN(s$))
' Si le répertoire de la fiche n'existe pas, on le créé WHILE DIR_EXISTS(chemin$ + n_fiche$)=0 DIR_MAKE chemin$ + n_fiche$ PAUSE 500 END_WHILE
' Si la fiche est déjà présente, on la supprime WHILE FILE_EXISTS(chemin$ + n_fiche$ + "\" + n_fiche$ + ".html")= 1 FILE_DELETE chemin$ + n_fiche$ + "\" + n_fiche$ + ".html" PAUSE 500 END_WHILE
' Création de la fiche FILE_OPEN_WRITE 10,chemin$ + n_fiche$ + "\" + n_fiche$ + ".html"
' Les catégories sont récupérées, passage au bloc suivant ligne_courante% = i% EXIT_FOR END_IF NEXT i%
' Récupération de l'icône et du titre de la fiche
s$ = "Récupération de l'icone et du titre de la fiche" CAPTION 0,s$ : l_caption% = LEN(s$)
s$ = "<div class="+gui$+ "fiche-image"+gui$+"><img"
FOR i% = ligne_courante% TO COUNT(1) CAPTION 0, LEFT$(CAPTION$(0), l_caption%) + " - Ligne en cours :"+STR$(i%) chaine$ = chaine$ + ITEM_READ$(1,i%) res% = INSTR_POS(chaine$,s$,1) : ' On recherche le début du premier bloc IF res% > 0 ' On supprime ce qu'il y a avant le bloc qui nous interesse chaine$ = RIGHT$(chaine$, LEN(chaine$) - res% +1) Trouve("</div>") s$ = LEFT$(chaine$, res% + LEN("</div>")-1) chaine$ = RIGHT$(chaine$, LEN(chaine$) - LEN(s$)) pos% = INSTR_POS(s$,"/Uploads", 1) fin = INSTR_POS(s$,gui$, pos%) image$= MID$(s$,pos%, fin - pos%) : ' /UPLOADS/nom_image.ext n_image$ = MID$(image$,10, LEN(image$) - 9) : ' nom_image.ext
' Sauvegarde de l'icone localement source$ = c_self$ + image$ : dest$ = rep_img$ + n_image$ res% = DLL_CALL2("DownloadFile",ADR(source$),ADR(dest$))
' Récupération du titre Trouve("</h2>") titre$ = LEFT$(chaine$, res% + LEN("</h2>") - 1)
' Ecriture du fichier HTML de la fiche s$ = "<table border = 0>" : HTML$ = s$ : FILE_WRITELN 10, s$ s$ = " <TR>" : HTML$ = HTML$ + sep$ + s$ : FILE_WRITELN 10, s$ s$ = " <TD width = 100> <img src="+ gui$ + rep_img$ + n_image$ + gui$ +" alt=" + gui$ + "Logo fiche" + gui$ + "title=" + gui$ + n_fiche$ +gui$ +" /> </TD>" EXCEL_WRITE "E"+STR$(nb_fiches%+ 2),n_image$ EXCEL_WRITE "F"+STR$(nb_fiches%+ 2),n_fiche$ HTML$ = HTML$ + sep$ + s$ : FILE_WRITELN 10, s$ s$ = " <TD> " + titre$ + "</TD>" : HTML$ = HTML$ + sep$ + s$ : FILE_WRITELN 10, s$ s$ = "</table>" : HTML$ = HTML$ + sep$ + s$ : FILE_WRITELN 10, s$ ' Le bloc titre est traité, passage au bloc suivant ligne_courante% = i% EXIT_FOR END_IF NEXT i%
' Récupération de la description
s$ = "Récupération de la description" CAPTION 0,s$ : l_caption% = LEN(s$) s$ = "<div class="+gui$+ "row-fluid fiche-desc"+gui$
FOR i% = ligne_courante% TO COUNT(1) CAPTION 0, LEFT$(CAPTION$(0), l_caption%) + " - Ligne en cours :"+STR$(i%) chaine$ = chaine$ + ITEM_READ$(1,i%) res% = INSTR_POS(chaine$,s$,1) IF res% > 0 chaine$ = RIGHT$(chaine$, LEN(chaine$) - res% +1) Trouve("</div>") s$ = LEFT$(chaine$, res% + LEN("</div>")-1) chaine$ = RIGHT$(chaine$, LEN(chaine$) - LEN(s$)) pos% = INSTR_POS(s$,"<p>", 1) fin = INSTR_POS(s$,"</div>", pos%) : fin = fin - pos% FILE_WRITELN 10, MID$(s$,pos%,fin) EXCEL_WRITE "G"+STR$(nb_fiches%+ 2),MID$(s$,pos%,fin) HTML$ = HTML$ + sep$ + MID$(s$,pos%,fin) ligne_courante% = i% EXIT_FOR END_IF NEXT i%
' Récupération des blocs de texte ou des galeries d'images
images$ = "" : s$ = "Récupération des blocs" CAPTION 0,s$ : l_caption% = LEN(s$)
FOR i% = ligne_courante% TO COUNT(1) CAPTION 0, LEFT$(CAPTION$(0), l_caption%) + " - Ligne en cours :"+STR$(i%) s$ = "display: block;" chaine$ = chaine$ + ITEM_READ$(1,i%) res% = INSTR_POS(chaine$,s$,1) IF res% > 0 ' On supprime ce qu'il y a avant le bloc qui nous interesse chaine$ = RIGHT$(chaine$, LEN(chaine$) - res% +1)
' On recherche s'il y a un titre de bloc s2$ = "<legend>" : Trouve(s2$)
' On supprime ce qu'il y a avant le bloc qui nous interesse chaine$ = RIGHT$(chaine$, LEN(chaine$) - (res% + LEN(s2$)) +1)
s2$ = "</legend>" : Trouve(s2$) IF res% > 1 FILE_WRITELN 10,"<h3>" + LEFT$(chaine$,res%) + "</h3>" HTML$ = HTML$ + sep$ + "<h3>" + LEFT$(chaine$,res%) + "</h3>" END_IF s2$ = "<div" : Trouve(s2$) chaine$ = RIGHT$(chaine$, LEN(chaine$) - (res% + LEN(s2$)) +1)
s2$ = ">" : Trouve(s2$) chaine$ = RIGHT$(chaine$, LEN(chaine$) - (res% + LEN(s2$)) +1)
s2$ = "</div></div>" : Trouve(s2$) s$ = LEFT$(chaine$,res% -1) res%=INSTR_POS(s$,"well main-gallery",1) IF res% > 0 ' Traite le bloc gallerie s$ = "Traitement d'un bloc gallerie" CAPTION 0,s$ : l_caption% = LEN(s$) : sortie = 0 WHILE sortie = 0 i% = i% + 1 CAPTION 0, LEFT$(CAPTION$(0), l_caption%) + " - Ligne en cours :"+STR$(i%) s2$ = "/Uploads/" : Trouve(s2$) IF res% > 0 fin = INSTR_POS(chaine$,gui$, res%) image$= MID$(chaine$,res%, fin - res%) : ' /UPLOADS/nom_image.ext n_image$ = MID$(image$,10, LEN(image$) - 9) : ' nom_image.ext
' Sauvegarde de l'image localement source$ = c_self$ + image$ : dest$ = rep_img$ + n_image$ res% = DLL_CALL2("DownloadFile",ADR(source$),ADR(dest$)) IF LEN(images$) > 0 THEN images$ = images$ + ";" images$ = images$ + n_image$ FILE_WRITELN 10, " <p> <img src="+ gui$ + rep_img$ + n_image$ + gui$ + " title=" + gui$ + gui$ +" /> </p>" HTML$ = HTML$ + sep$ + " <p> <img src="+ gui$ + rep_img$ + n_image$ + gui$ + " title=" + gui$ + gui$ +" /> </p>" chaine$ = RIGHT$(chaine$, LEN(chaine$) - fin) s2$ = "carousel-caption" : Trouve(s2$) IF res% > 0 chaine$ = RIGHT$(chaine$, LEN(chaine$) - (res% + LEN(s2$)) + 1) Trouve("<p") chaine$ = RIGHT$(chaine$, LEN(chaine$) - (res% + 2)) Trouve(">") : pos% = res% Trouve("</p>"): fin = res% - pos% s2$ = MID$(chaine$, pos%+1, fin - 1) FILE_WRITELN 10, " <p>" + s2$ + "</p>" HTML$ = HTML$ + sep$ + " <p>" + s2$ + "</p>" chaine$ = RIGHT$(chaine$,LEN(chaine$) - (fin + 3)) pos% = res% s2$ = "</div></div></div>" : Trouve(s2$) if pos% + 100 > res% THEN EXIT_WHILE END_IF ELSE EXIT_WHILE END_IF END_WHILE ELSE ' Traite le bloc texte FILE_WRITELN 10, s$ HTML$ = HTML$ + sep$ + s$ chaine$ = RIGHT$(chaine$, LEN(chaine$) - LEN(s$)) END_IF ELSE EXIT_FOR END_IF NEXT i%
EXCEL_WRITE "H"+STR$(nb_fiches%+ 2),HTML$ EXCEL_WRITE "I"+STR$(nb_fiches%+ 2),images$
nb_fiches% = nb_fiches% + 1 TEXT 9, STR$(nb_fiches%)
' Fermeture du fichier HTML
FILE_CLOSE 10
FILE_OPEN_WRITE 10,ini$ + "ini.txt" FILE_WRITELN 10, "***** NB FICHES:" : ' Lecture de l'entête FILE_WRITELN 10, STR$(nb_fiches%) : ' Lecture du nombre de fiches actuellement créés FILE_CLOSE 10
CAPTION 0, "Traitement de la fiche terminé"
END_SUB
SUB Trouve(chaine_a_trouver$) res% = INSTR_POS(chaine$,chaine_a_trouver$, 1) WHILE res% = 0 i% = i%+1 chaine$ = chaine$ + ITEM_READ$(1,i%) res% = INSTR_POS(chaine$,chaine_a_trouver$, 1) IF i% = COUNT(1) THEN EXIT_WHILE END_WHILE END_SUB
Quitter:
' Fermeture d'Excel EXCEL_FILE_CLOSE 11 : WAIT 2000 : EXCEL_STOP ' Libération du process et de la DLL res% = dll_call1("KillProcessByHandle",handle(0)) DLL_OFF RETURN Edit: j'avais oublié un cas particulier ... | |
|