AutoIt3: descărcări de pe net


AutoIt permite cu uşurinţă descărcarea de fişiere de pe web şi vom vedea astăzi cum putem face aceasta. Mai mult, să dăm şi o indicaţie vizuală pe perioada descărcării (observaţi mai jos în captură). Poate fără prea mare inspiraţie am revenit la API-ul Flickr (ca aici). De fapt am mers pe RSS-ul obişnuit de utilizator (orice altceva mi-ar fi cerut cheie API şi am dorit să rămân la un cod ce îl puteţi executa şi verifica imediat). Dacă veţi schimba cu RSS-ul contului Dvs Flickr, evident vor fi arătate ultimele Dvs fotografii publicate pe acest serviciu Yahoo. Şi pentru că am pomenit RSS, vom folosi un UDF special pentru parcurs/citit XML-uri.

imagine

Codul este mai lung, iar explicaţiile nu vor fi linie de linie. Iată paşii în mare. Am creat un subdirector „tmp” (linia 7) acolo unde este rulat programul – în el vom pune imaginile pe care le descărcăm de pe Flickr. Apoi am salvat local XML-ul (RSS-ul) de la Flickr, unde avem informaţiile necesare. Această salvare e de fapt o descărcare de pe web şi am făcut-o cu informarea utilizatorului, care va vedea o fereastră ce îi spune că se desfăşoară o descărcare (mda… pare un mic bug, pentru că nu ia corect dimensiunea XML-ului). E vorba de liniile 9-18. În linia 19 deschidem XML-ul. Apoi ne ocupăm de GUI. În el nu am făcut decât să pun imaginile mici (versiunea „pătrată” a lor) şi câte un buton sub ele pentru descărcare. Liniile 23 şi 24 fac cu eleganţă citirea din XML datorită bibliotecii _XMLDomWrapper.au3 (nu e inclusă oficial în AutoIt – o găsiţi aici). A! Am pus şi un tooltip cu informaţii despre fotografie.

[PHP]#include <_XMLDomWrapper.au3>
#include <Array.au3>
#include <GUIConstantsEx.au3>

Dim $apasat[21]

DirCreate(@ScriptDir & "\tmp\")
$flickr="http://api.flickr.com/services/feeds/photos_public.gne?id=49746597@N00&lang=en-us&format=rss_200"
$descarcare=InetGet($flickr, @ScriptDir & "\tmp\flickr.xml",0,1)
$dimensiune = InetGetSize($flickr,1)
ProgressOn("","")
While Not InetGetInfo($descarcare,2)
$procent = InetGetInfo($descarcare,0) * 100 / $dimensiune
ProgressSet($procent,"S-a descărcat " & InetGetInfo($descarcare,0) & " din " & $dimensiune & " bytes","Iau date din API-ul de la Flickr")
Sleep(250)
WEnd
ProgressOff()
InetClose($descarcare)
$sXmlFile = _XMLFileOpen(@ScriptDir & "\tmp\flickr.xml")

$hGUI=GUICreate("Hamad Darwish – cele mai recente fotografii",415,410)

$titluri=_XMLGetValue("/rss/channel/item/title")
$fdescription=_XMLGetValue("/rss/channel/item/description")
For $i=1 To UBound($fdescription)-1
$link = IaValoare($fdescription[$i], ‘src="’, ‘"’)
$link = StringReplace($link,"_m.jpg","_s.jpg")
$bucati=StringSplit($link,"/",1)
$numefisier=$bucati[UBound($bucati)-1]
$descarcare = InetGet($link, @ScriptDir & "\tmp\flickr_" & $numefisier)
InetClose($descarcare)
$linie = Mod($i-1,5)
$coloana = Floor(($i-1)/5)
GUICtrlCreatePic(@ScriptDir & "\tmp\flickr_" & $numefisier,10+80*$linie,10+100*$coloana,75,75)
GUICtrlSetTip(-1,$titluri[$i],"Info",1)
$apasat[$i] = GUICtrlCreateButton("descarca",10+80*$linie,80+100*$coloana,75,20)
Next

GUISetState(@SW_SHOW)

Do
$msg = GUIGetMsg()
For $i=1 To 20
If $msg = $apasat[$i] Then
$link = IaValoare($fdescription[$i], ‘src="’, ‘"’)
$link = StringReplace($link,"_m.jpg","_b.jpg")
$bucati=StringSplit($link,"/",1)
$numefisier=$bucati[UBound($bucati)-1]
$descarcare = InetGet($link, @ScriptDir & "\tmp\flickr_" & $numefisier,1,1)
$dimensiune = InetGetSize($link)
ProgressOn("","")
While Not InetGetInfo($descarcare,2)
$procent = InetGetInfo($descarcare,0) * 100 / $dimensiune
ProgressSet($procent,"S-a descărcat " & InetGetInfo($descarcare,0) & " din " & $dimensiune & " bytes","Descărcare în curs")
Sleep(250)
WEnd
ProgressOff()
InetClose($descarcare)
ShellExecute(@ScriptDir & "\tmp\flickr_" & $numefisier)
EndIf
Next
Until $msg = $GUI_EVENT_CLOSE
GUIDelete()

Func IaValoare($text, $cecaut1, $cecaut2=’"’)
$text1 = StringSplit($text, $cecaut1, 1)
$text2 = StringSplit($text1[2], $cecaut2, 1)
Return $text2[1]
EndFunc[/PHP]

A mai rămas bucla AutoIt pentru GUI, unde verificăm dacă s-a apăsat vreun buton. În funcţie de care buton, facem descărcarea imaginii mari de pe Flickr. Din nou totul vizual, să ştie omul cât mai are de aşteptat până se descarcă imaginea. Iar după descărcare am făcut ca imaginea să fie deschisă (cu programul folosit pentru vizualizare).

PS: Toate fişierele acestei serii de tutoriale sunt publice şi descărcabile de aici. Exemplele de aici sunt flickr.au3 şi evident flickr.exe.

PS2: Iată esenţa codului pentru descărcare.

[PHP]$FileURL = "http://www.cevasit.ro/cale/fisier.zip"
$FileName = "fisier.zip"
$FileSaveLocation = FileSaveDialog("Save Location…",@ScriptDir,"All (*.*)",18,$FileName)
$FileSize = InetGetSize($FileURL)

$Downloading = InetGet($FileURL,$FileName,1,1)

ProgressOn("","")
While Not InetGetInfo($Downloading,2)
$Percentage = InetGetInfo($Downloading,0) * 100 / $FileSize
ProgressSet($Percentage,"Downloaded " & InetGetInfo($Downloading,0) & " of " & $FileSize & " bytes","Downloading " & $FileName)
Sleep(250)
WEnd
ProgressOff()[/PHP]


Apreciază articolul:

1 stea2 stea3 stea4 stea5 stea (3 evaluări, media: 5,00 din 5)
Loading...Loading...

0 comentarii


Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile necesare sunt marcate *