JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Recettes de cuisine Jeu 12 Mar 2015 - 15:27 | |
| Un programme pas vraiment fini, mais je crois que je vais en rester là, mon épouse s'en accommodera. Rassurez-vous, ce n'est pas moi, ni le programme, qui invente les recettes, elles sont téléchargées sur un site qui s'appelle CuisineAZ, d'accès libre, anonyme, sans avoir besoin de s'inscrire ni de fournir ses coordonnées. Les différents fichiers sont téléchargés en html, puis convertis au format texte par une sub assez rustique, qui serait sans doute très améliorable, mais au prix de beaucoup de complication, il y a tellement de particularités. C'est sans doute ça le point faible. Le principe est de constituer la liste complète des recettes, et à partir de là on peut: - afficher la liste complète à gauche - cliquer sur une recette pour l'afficher à droite - se connecter sur le site pour afficher directement la recette choisie (sous une forme plus sophistiquée, évidemment) - ou faire une recherche dans la liste avec un ou des mots donnés, par exemple "pintade" qui donnera la liste des recettes correspondantes. Je précise que c'est en pur Panoramic. - Code:
-
LABEL Exec,Dir,Vfic,Chargement,Convtxt,Liens,Vliens,Afrec,Cnx,Cherche DIM url$,i%,j%,k%,cl%,r$,rtm$,sf$,l$,t$,nc%,vi$(50),vr$(50) DIM f$,fr$,ft$,fll$,a$,b$,x% r$ = "C:\MATERIEL\FINECOOK\RECETTES": ' <<<<<<<<<< CHEMIN À AJUSTER <<<<<<<<<<< rtm$ = "C:\TEMP": ' IDEM fll$ = r$+"Liste_liens.txt" ' Caractères spéciaux Html: a$="é,é,è,è,ê,ê,û,û,à,à,É,É,À,À,’,'," a$=a$+" , ,<,<,>,>,&,&,","+CHR$(34)+"," a$=a$+"»,"+CHR$(13)+CHR$(10)+CHR$(187)+",›,>,‹,<," a$=a$+CHR$(194)+CHR$(189)+",½,"+CHR$(194)+CHR$(208)+",°,"+CHR$(195)+CHR$(136)+",È," a$=a$+CHR$(195)+CHR$(137)+",É,"+CHR$(195)+CHR$(155)+",Û,"+CHR$(195)+CHR$(160)+",à," a$=a$+CHR$(194)+CHR$(171)+",«,"+CHR$(194)+CHR$(187)+",»,"+CHR$(195)+CHR$(167)+",ç," a$=a$+CHR$(195)+CHR$(162)+",â,"+CHR$(195)+CHR$(168)+",ê,"+CHR$(195)+CHR$(169)+",é," a$=a$+CHR$(195)+CHR$(170)+",ê,"+CHR$(195)+CHR$(174)+",ï,"+CHR$(195)+CHR$(175)+",ï," a$=a$+CHR$(195)+CHR$(180)+",ô,"+CHR$(195)+CHR$(187)+",û,"+CHR$(197)+CHR$(147)+",oe," a$=a$+CHR$(226)+CHR$(128)+CHR$(153)+",',"+CHR$(226)+CHR$(130)+CHR$(172)+",€," a$=a$+CHR$(226)+CHR$(128)+CHR$(147)+",-," a$=a$+"è,è,é,é,ë,ë,î,î,ô,ô,','" k% = INSTR(a$,",") WHILE k%>0 nc% = nc%+1: vi$(nc%) = LEFT$(a$,k%-1): a$ = RIGHT_POS$(a$,k%+1): k% = INSTR(a$,",") IF k%=0 THEN vr$(nc%) = a$: EXIT_WHILE vr$(nc%) = LEFT$(a$,k%-1) a$ = RIGHT_POS$(a$,k%+1): k% = INSTR(a$,",") END_WHILE
WIDTH 0,300: : HEIGHT 0,380: CAPTION 0," - RECETTES -" COLOR 0,180,255,255 BUTTON 1: TOP 1,0: LEFT 1,10: CAPTION 1,"Télécharger" BUTTON 2: TOP 2,TOP(1): LEFT 2,100: CAPTION 2,"Convertir en txt" BUTTON 3: TOP 3,TOP(1): LEFT 3,200: CAPTION 3,"Extraire la liste" BUTTON 4: TOP 4,TOP(1)+40: LEFT 4,LEFT(3): CAPTION 4,"Voir la liste" FOR i% = 1 TO 4: ON_CLICK i%,Exec: NEXT i%
LIST 10: TOP 10,TOP(2)+30: LEFT 10,0: WIDTH 10,90: HEIGHT 10,HEIGHT(0)-90 ON_CLICK 10,Vfic LIST 15: TOP 15,TOP(10): LEFT 15,WIDTH(10)+2: WIDTH 15,WIDTH(10): HEIGHT 15,HEIGHT(10) ON_CLICK 15,Vfic MEMO 11: HIDE 11: WIDTH 11,400 ALPHA 12: TOP 12,TOP(4)+40: LEFT 12,LEFT(4) FONT_COLOR 12,255,64,64: FONT_SIZE 12,12: FONT_BOLD 12
ALPHA 16: TOP 16,HEIGHT(0)-54: LEFT 16,5: CAPTION 16,r$
FORM 20: HEIGHT 20,SCREEN_Y-50: WIDTH 20,800: HIDE 20: BORDER_SMALL 20 COLOR 20,180,255,255: CAPTION 20," - LISTE DES RECETTES -" LIST 21: PARENT 21,20: TOP 21,25: WIDTH 21,350: HEIGHT 21,HEIGHT(20)-60: ON_CLICK 21,Afrec DLIST 22 BUTTON 23: PARENT 23,20: LEFT 23,WIDTH(21)+120: WIDTH 23,180: HIDE 23 CAPTION 23,"Voir la recette en ligne": ON_CLICK 23,Cnx MEMO 24: PARENT 24,20: TOP 24,25: LEFT 24,WIDTH(21): WIDTH 24,WIDTH(20)-WIDTH(21)-16 HEIGHT 24,HEIGHT(21)-25: FONT_NAME 24,"Arial": FONT_SIZE 24,10 ALPHA 26: PARENT 26,20: TOP 26,5: FONT_BOLD 26: CAPTION 26,"Chercher:" EDIT 27: PARENT 27,20: LEFT 27,60: WIDTH 27,240 BUTTON 28: PARENT 28,20: LEFT 28,LEFT(27)+WIDTH(27): WIDTH 28,50: CAPTION 28,"OK" ON_CLICK 28,Cherche
IF FILE_EXISTS(r$+"Recettes01.htm")=1 THEN sf$="htm": GOSUB Dir IF FILE_EXISTS(r$+"Recettes01.txt")=1 THEN sf$="txt": GOSUB Dir END ' ============================================================================== Exec: i% = NUMBER_CLICK SELECT i% CASE 1: GOSUB Chargement CASE 2: GOSUB Convtxt CASE 3: GOSUB Liens CASE 4: GOSUB Vliens END_SELECT RETURN ' ============================================================================== Vfic: j% = 10: IF sf$ = "txt" THEN j% = 15 a$ = r$+ITEM_INDEX$(j%) EXECUTE_WAIT "Notepad.exe "+a$ RETURN ' ============================================================================== Dir: EXECUTE_WAIT "Cmd.exe /c DIR /B "+r$+"*."+sf$+" | clip" j% = 10: IF sf$ = "txt" THEN j% = 15 CLEAR j%: CLEAR 11: CLIPBOARD_PASTE 11 FOR i% = 1 TO COUNT(11): ITEM_ADD j%,ITEM_READ$(11,i%): NEXT i% RETURN ' ============================================================================== Chargement: CAPTION 12,"En cours..." ' chargement initial url$ = "http://www.cuisineaz.com/recettes/recherche_v2.aspx?recherche=autocuiseur" WebLoadFic(url$,r$+"Recettes01.htm") FOR i% = 2 TO 20 print "Page "+str$(i%) a$ = url$+"&page="+STR$(i%) WebLoadFic(a$,r$+"Recettes"+RIGHT$("0"+STR$(i%),2)+".htm") NEXT i% CAPTION 12,"" sf$ = "htm": GOSUB Dir RETURN ' ============================================================================== Convtxt: CAPTION 12,"En cours..." ' conversion des fichiers htm en txt EXECUTE_WAIT "cmd.exe /c DEL /Q "+r$+"*.txt" FOR i% = 1 TO 20 f$ = r$+"Recettes"+RIGHT$("0"+STR$(i%),2)+".htm" fr$ = r$+"Recettes"+RIGHT$("0"+STR$(i%),2)+".txt" ft$ = rtm$+"Temp.txt" Html2Txt(f$,ft$) FILE_OPEN_READ 1,ft$: FILE_OPEN_WRITE 2,fr$ FILE_READLN 1,a$: WHILE INSTR(a$,"Trier les r")=0: FILE_READLN 1,a$: END_WHILE WHILE FILE_EOF(1)=0 FILE_READLN 1,a$: a$ = RTRIM$(a$) IF a$ <> "" IF LEN(a$)-LEN(LTRIM$(a$)) > 10 a$ = STRING$(10," ")+LTRIM$(a$) END_IF k% = INSTR(a$,CHR$(9)+CHR$(9)) WHILE k%>0 a$ = LEFT$(a$,k%)+RIGHT_POS$(a$,k%+2) k% = INSTR(a$,CHR$(9)+CHR$(9)) END_WHILE IF INSTR(a$,"Précédent")>0 THEN EXIT_WHILE FILE_WRITELN 2,a$ END_IF END_WHILE FILE_CLOSE 1: FILE_CLOSE 2 NEXT i% CAPTION 12,"" sf$ = "txt": GOSUB Dir RETURN ' ============================================================================== Liens: CAPTION 12,"En cours..." FILE_OPEN_WRITE 1,fll$ FOR i% = 1 TO 20 f$ = r$+"Recettes"+RIGHT$("0"+STR$(i%),2)+".htm" FILE_OPEN_READ 2,f$ b$= "_" WHILE FILE_EOF(2)=0 FILE_READLN 2,a$ IF INSTR(a$,"<h2><a id=") > 0 k% = INSTR(a$,"href="): a$ = RIGHT_POS$(a$,k%+6) k% = INSTR(a$,">"): l$ = LEFT$(a$,k%-2): a$ = RIGHT_POS$(a$,k%+1) k% = INSTR(a$,"<"): t$ = LEFT$(a$,k%-1) ' conversion des caractères spéciaux html FOR x% = 1 TO nc% k%=INSTR(t$,vi$(x%)) WHILE k%>0 t$=LEFT$(t$,k%-1)+vr$(x%)+RIGHT_POS$(t$,k%+LEN(vi$(x%))) k%=INSTR(t$,vi$(x%)) END_WHILE NEXT x% FILE_WRITELN 1,b$+t$: FILE_WRITELN 1,l$: ' titre et url b$ = "" END_IF END_WHILE FILE_CLOSE 2 NEXT i% FILE_CLOSE 1 CAPTION 12,"" RETURN ' ============================================================================== Vliens: CLEAR 21: CLEAR 22 FILE_OPEN_READ 1,fll$ i% = 0 WHILE FILE_EOF(1) = 0 i% = i%+1 FILE_READLN 1,a$ : ' titre ITEM_ADD 21,RIGHT$(" "+STR$(i%),3)+" "+a$ FILE_READLN 1,a$: ' lien ITEM_ADD 22,a$ END_WHILE FILE_CLOSE 1 SHOW 20 RETURN ' ============================================================================== Afrec: cl% = ITEM_INDEX(21) a$ = ITEM_READ$(22,cl%) WebLoadFic(a$,rtm$+"Rect.htm"): ' pour voir... Html2Txt(rtm$+"Rect.htm",rtm$+"Tmpa.txt") FILE_OPEN_READ 1,rtm$+"Tmpa.txt": FILE_OPEN_WRITE 2,rtm$+"Tmp.txt" WHILE FILE_EOF(1)=0 FILE_READLN 1,a$: IF TRIM$(a$)<>"" THEN FILE_WRITELN 2,RTRIM$(a$) END_WHILE FILE_CLOSE 1: FILE_CLOSE 2: FILE_DELETE rtm$+"Tmpa.txt" FILE_OPEN_READ 1,rtm$+"Tmp.txt": FILE_OPEN_WRITE 2,rtm$+"Rect.txt" FILE_READLN 1,a$: FILE_WRITELN 2,a$: FILE_WRITELN 2,"": ' titre FILE_READLN 1,a$: WHILE INSTR(a$,"Quantit")=0: FILE_READLN 1,a$: END_WHILE FILE_READLN 1,b$: FILE_WRITELN 2,LTRIM$(a$)+": "+LTRIM$(b$) FILE_READLN 1,a$: FILE_READLN 1,b$: FILE_WRITELN 2,LTRIM$(a$)+": "+LTRIM$(b$) FILE_READLN 1,a$: FILE_READLN 1,b$: FILE_WRITELN 2,LTRIM$(a$)+": "+LTRIM$(b$) FILE_READLN 1,a$: FILE_READLN 1,b$: FILE_WRITELN 2,LTRIM$(a$)+": "+LTRIM$(b$) FILE_READLN 1,a$: FILE_READLN 1,b$: FILE_WRITELN 2,LTRIM$(a$)+": "+LTRIM$(b$) FILE_READLN 1,a$: WHILE INSTR(a$,"Ingr")=0: FILE_READLN 1,a$: END_WHILE FILE_WRITELN 2,a$ WHILE FILE_EOF(1)=0 FILE_READLN 1,a$: a$ = RTRIM$(a$) IF a$ <> "" IF LEN(a$)-LEN(LTRIM$(a$)) > 5 a$ = STRING$(5," ")+LTRIM$(a$) END_IF k% = INSTR(a$,CHR$(9)+CHR$(9)) WHILE k%>0 a$ = LEFT$(a$,k%)+RIGHT_POS$(a$,k%+2) k% = INSTR(a$,CHR$(9)+CHR$(9)) END_WHILE IF INSTR(a$,"Signaler une erreur")>0 THEN EXIT_WHILE FILE_WRITELN 2,a$ END_IF END_WHILE FILE_CLOSE 1: FILE_CLOSE 2: FILE_DELETE rtm$+"Tmp.txt" CLEAR 24: FILE_LOAD 24,rtm$+"Rect.txt" SHOW 23 RETURN ' ============================================================================== Cnx: EXECUTE_WAIT ITEM_READ$(22,cl%) RETURN ' ============================================================================== Cherche: b$ = TEXT$(27) IF b$ = "" THEN RETURN b$ = UPPER$(b$): CLEAR 24 FOR i% = 1 TO COUNT(21) a$ = ITEM_READ$(21,i%) IF INSTR(UPPER$(a$),b$) > 0 THEN ITEM_ADD 24,a$ NEXT i% ITEM_ADD 24," ---------- Fin de recherche ----------" RETURN ' ============================================================================== SUB WebLoadFic(url$,fr$) ' Téléchargement d'un fichier web donné par son url -> fr$ ' (affichage d'une fenêtre noire temporaire jusqu'à la fin de l'opération). DIM_LOCAL f,q$,fvb$: fvb$ = rtm$+"Download.vbs": q$ = CHR$(34) f=1950: WHILE OBJECT_EXISTS(f)=1: f=f+1: END_WHILE FORM f: TOP f,TOP(0): LEFT f,LEFT(0): WIDTH f,WIDTH(0): HEIGHT f,HEIGHT(0) BORDER_HIDE f: COLOR f,255,0,0: ' témoin d'activité FILE_OPEN_WRITE 9,fvb$ FILE_WRITELN 9,"strFileURL = "+q$+url$+q$ FILE_WRITELN 9,"strHDLocation = "+q$+fr$+q$ FILE_WRITELN 9,"Set objXMLHTTP = CreateObject("+q$+"MSXML2.XMLHTTP"+q$+")" FILE_WRITELN 9,"objXMLHTTP.open "+q$+"GET"+q$+", strFileURL, false" FILE_WRITELN 9,"objXMLHTTP.send()" FILE_WRITELN 9,"If objXMLHTTP.Status = 200 Then" FILE_WRITELN 9,"Set objADOStream = CreateObject("+q$+"ADODB.Stream"+q$+")" FILE_WRITELN 9,"objADOStream.Open" FILE_WRITELN 9,"objADOStream.Type = 1" FILE_WRITELN 9,"objADOStream.Write objXMLHTTP.ResponseBody" FILE_WRITELN 9,"objADOStream.Position = 0" FILE_WRITELN 9,"Set objFSO = Createobject("+q$+"Scripting.FileSystemObject"+q$+")" FILE_WRITELN 9,"If objFSO.Fileexists(strHDLocation) Then objFSO.DeleteFile strHDLocation" FILE_WRITELN 9,"Set objFSO = Nothing" FILE_WRITELN 9,"objADOStream.SaveToFile strHDLocation" FILE_WRITELN 9,"objADOStream.Close" FILE_WRITELN 9,"Set objADOStream = Nothing" FILE_WRITELN 9,"End if" FILE_WRITELN 9,"Set objXMLHTTP = Nothing" FILE_CLOSE 9 EXECUTE_WAIT "cscript.exe " + fvb$ FILE_DELETE fvb$ DELETE f END_SUB ' ============================================================================== SUB Html2Txt(f$,ft$) ' conversion approximative fichier html f$ en fichier texte brut dans ft$ DIM_LOCAL a$,s$,ba$,cr$,k%,k1%,ns%,csp$(50),crm$(50) cr$ = CHR$(13)+CHR$(10): ' saut de ligne ' Caractères spéciaux Html (successivement caract.codé,caract.de remplacement): a$="é,é,è,è,ê,ê,û,û,à,à,É,É,À,À,’,'," a$=a$+" , ,<,<,>,>,&,&,","+CHR$(34)+"," a$=a$+"»,"+CHR$(13)+CHR$(10)+CHR$(187)+",›,>,‹,<," a$=a$+CHR$(194)+CHR$(189)+",½,"+CHR$(194)+CHR$(208)+",°,"+CHR$(195)+CHR$(136)+",È," a$=a$+CHR$(195)+CHR$(137)+",É,"+CHR$(195)+CHR$(155)+",Û,"+CHR$(195)+CHR$(160)+",à," a$=a$+CHR$(194)+CHR$(171)+",«,"+CHR$(194)+CHR$(187)+",»,"+CHR$(195)+CHR$(167)+",ç," a$=a$+CHR$(195)+CHR$(162)+",â,"+CHR$(195)+CHR$(168)+",ê,"+CHR$(195)+CHR$(169)+",é," a$=a$+CHR$(195)+CHR$(170)+",ê,"+CHR$(195)+CHR$(174)+",ï,"+CHR$(195)+CHR$(175)+",ï," a$=a$+CHR$(195)+CHR$(180)+",ô,"+CHR$(195)+CHR$(187)+",û,"+CHR$(197)+CHR$(147)+",oe," a$=a$+CHR$(226)+CHR$(128)+CHR$(153)+",',"+CHR$(226)+CHR$(130)+CHR$(172)+",€," a$=a$+CHR$(226)+CHR$(128)+CHR$(147)+",-," a$=a$+"è,è,é,é,ë,ë,î,î,ô,ô,','" k% = INSTR(a$,",") WHILE k%>0 ns% = ns%+1: csp$(ns%) = LEFT$(a$,k%-1): a$ = RIGHT_POS$(a$,k%+1): k% = INSTR(a$,",") IF k%=0 THEN crm$(ns%) = a$: EXIT_WHILE crm$(ns%) = LEFT$(a$,k%-1) a$ = RIGHT_POS$(a$,k%+1): k% = INSTR(a$,",") END_WHILE
' lecture intégrale du fichier htm dans la variable a$ FILEBIN_OPEN_READ 9,f$: k% = FILEBIN_SIZE(9): FILEBIN_CLOSE 9 FILE_OPEN_READ 9,f$: FILE_READBUF 9,a$,k%: FILE_CLOSE 9 k% = INSTR(a$,"</head>"): IF k%=0 THEN message "Pas de balise </head>": EXIT_SUB a$ = MID$(a$,k%+7,LEN(a$)) ' suppression des balises <script...>...</script> et <style...>...</style> et de ' leur contenu k% = INSTR(a$,"<script") WHILE k%>0 k1% =INSTR(a$,"</script>"): a$ = LEFT$(a$,k%-1)+MID$(a$,k1%+9,LEN(a$)) k% = INSTR(a$,"<script") END_WHILE k% = INSTR(a$,"<style") WHILE k%>0 k1% =INSTR(a$,"</style>"): a$ = LEFT$(a$,k%-1)+MID$(a$,k1%+8,LEN(a$)) k% = INSTR(a$,"<style") END_WHILE ' remplacement des balises </tr> par des sauts de ligne k% = INSTR(a$,"</tr>") WHILE k%>0: a$=LEFT$(a$,k%-1)+cr$+MID$(a$,k%+5,LEN(a$)): k%=INSTR(a$,"</tr>"): END_WHILE ' remplacement des balises <p> par des espaces k% = INSTR(a$,"<p>") WHILE k%>0: a$=LEFT$(a$,k%-1)+" "+RIGHT_POS$(a$,k%+3): k%=INSTR(a$,"<p>"): END_WHILE ' suppression de toutes les balises (on garde les sauts de lignes, pour lisibilité) k% = INSTR(a$,"<") WHILE k% > 0 k1% = INSTR_POS(a$,">",k%): ba$ = MID$(a$,k%,k1%-k%+1): ' balise trouvée IF LEFT$(ba$,3) = "<br": ' saut de ligne a$ = LEFT$(a$,k%-1)+CHR$(13)+CHR$(10)+MID$(a$,k1%+1,LEN(a$)) ELSE a$ = LEFT$(a$,k%-1)+MID$(a$,k1%+1,LEN(a$)): ' suppression END_IF k% = INSTR(a$,"<") END_WHILE ' remplacement des caractères spéciaux FOR k% = 1 TO ns% s$ = csp$(k%): k1% = INSTR(a$,s$) WHILE k1%>0 a$ = LEFT$(a$,k1%-1)+crm$(k%)+MID$(a$,k1%+LEN(s$),LEN(a$)) k1% = INSTR(a$,s$) END_WHILE NEXT k% ' suppression des rc/al redondants k% = INSTR(a$,CHR$(13)+CHR$(10)+CHR$(13)+CHR$(10)) WHILE k%>0 a$ = LEFT$(a$,k%-1)+MID$(a$,k%+2,LEN(a$)) k% = INSTR(a$,CHR$(13)+CHR$(10)+CHR$(13)+CHR$(10)) END_WHILE FILE_OPEN_WRITE 9,ft$: FILE_WRITELN 9,a$: FILE_CLOSE 9 END_SUB ' ============================================================================== Précisions: Il faut d'abord préciser le chemin du répertoire de stockage, ainsi que le chemin des fichiers de manoeuvre, en tête du programme. Les boutons Télécharger, Convertir en txt et Extraire la liste ne servent en principe qu'une seule fois. La liste des fichiers obtenus est affichée pour pouvoir cliquer sur un fichier et voir sa structure, ça c'est pour la curiosité et la mise au point (par exemple pour voir comment le htm a été converti en txt). Quand tout est au point ( ça c'est moins évident...), le seul bouton utile est 'Voir la liste'.
Dernière édition par JL35 le Jeu 12 Mar 2015 - 19:37, édité 1 fois | |
|