Scaricare immagini da Bing tramite C# e VB.Net

Articolo che introduce una tecnica per scaricare le immagini dello sfondo di Bing da internet, tramite il linguaggio di programmazione C# e VB.Net.

il
Sviluppatore Microsoft .Net, Collaboratore di IProgrammatori

Introduzione

In questo articolo vedremo una tecnica di come scaricare una foto da internet, la tecnica utilizzata è particolare perché non scaricheremo l’immagine da un qualsiasi sito, ma l’immagine giornaliera che il motore di ricerca Bing offre ogni giorno ai suoi utenti.
Tramite il linguaggio di programmazione VB.Net e C# vedremo come fare il download sul nostro pc, della foto che comparare come sfondo nel sito www.bing.it

Progettazione form

Si crea un nuovo progetto di tipo “Windows Application” utilizzando il linguaggio di programmazione di nostro interesse.
Dopo aver creato il progetto, aggiungiamo nella form, una casella di testo, che sarà impostata in modalità di sola lettura la quale visualizza il percorso e nome del file, due pulsanti, uno per aprire la finestra di salvataggio immagine e l’altro per il download ed un controllo label, il tutto come mostrato in figura 1.

Figura 1 - i controlli posizionati nella form

Posizioniamo i controlli come riportati nella figura precedente.
Aggiungiamo anche un controllo di tipo “SaveFileDialog”.


Stesura del codice


Facciamo doppio click sul pulsante contraddistinto con i tre puntini, quello vicino alla casella di testo.
L’evento click di tale pulsante visualizza la finestra di dialogo per il salvataggio del file, permettendo di impostare il percorso e nome del file di tipo “Jpg”.
Qui di seguito si riporta il frammento di codice per il linguaggio VB.Net e C#

VB.Net
Private Sub BtnPercorso_Click(sender As System.Object, e As System.EventArgs) Handles BtnPercorso.Click
If saveFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
txtPercorso.Text = saveFileDialog1.FileName + ".jpg"
End If
End Sub
C#
private void BtnPercorso_Click(object sender, EventArgs e)
{
if (saveFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
txtPercorso.Text = saveFileDialog1.FileName + ".jpg";
}
}

Il codice appena illustrato è molto semplice, non fa altro che impostare la proprietà “Text” del controllo casella di testo, con il percorso e nome del file.

Ora facciamo click sul pulsante con la scritta “Download”, nell’evento click scriveremo il codice per effettuare il download dell’immagine.

Prima di eseguire il download dell’immagine, dobbiamo calcolare il percorso e nome del file che ogni giorno bing metterà on line.
L’algoritmo è molto semplice, l’immagine di sfondo, si trova nel tag “/az/hprichbg/rb/ “
Ed una volta ottenuto tale valore, dobbiamo rilevare il testo che segue fino al simbolo del singolo apice “ ‘ “ .
Il valore 16 è la somma del tag html riguardante il percorso dell’immagine, ossia “/az/hprichbg/rb/” .
Dopo aver ottenuto il percorso e nome dell’immagine del giorno non ci resta che effettuare il download dell’immagine, tramite le classi httpwebrequest, httpwebreesponse e stream.
Qui di seguito si riporta il frammento di codice.

VB.Net (Evento click)
Private Sub btnDownload_Click(sender As System.Object, e As System.EventArgs) Handles btnDownload.Click
Using client As New WebClient()
Dim htmlCode As String = client.DownloadString("http://www.bing.com/?cc=it")
Dim indice As Int32 = htmlCode.IndexOf("/az/hprichbg/rb/")
indice += 16
Dim indice2 As Int32 = htmlCode.IndexOf("'", indice)
Dim testoDaCercare As String = htmlCode.Substring(indice, indice2 - indice)
DownloadImage("http://www.bing.com/az/hprichbg/rb/" + testoDaCercare)
End Using
End Sub
C# (Evento click)
private void btnDownload_Click(object sender, EventArgs e)
{
using (WebClient client = new WebClient())
{
string htmlCode = client.DownloadString("http://www.bing.com/?cc=it");
Int32 indice = htmlCode.IndexOf(@"/az/hprichbg/rb/");
indice += 16;
Int32 indice2 = htmlCode.IndexOf("'", indice);
string testodaCercare = htmlCode.Substring(indice, indice2 - indice);DownloadImage("http://www.bing.com/az/hprichbg/rb/" + testodaCercare);
return;
}
}
VB.Net (Funzione DownloadImage)
Sub DownloadImage(url As String)
If txtPercorso.Text.Trim() = "" Then
MessageBox.Show("Selezionare un percorso e nome di file.")
Exit Sub
End If
Dim httpWebRequest As HttpWebRequest = httpWebRequest.Create(url)
Using httpwebresponse As HttpWebResponse = httpWebRequest.GetResponse()
Using Stream As Stream = httpwebresponse.GetResponseStream()
Dim immagine As New Bitmap(Image.FromStream(Stream))
immagine.Save(txtPercorso.Text)
MessageBox.Show("Download completato. Verifica in " + txtPercorso.Text + " il file immagine.")
End Using
End Using
End Sub
C# (Funzione DownloadImage)
private void DownloadImage(string url)
{
if (txtPercorso.Text.Trim() == "")
{
MessageBox.Show("Selezionare un percorso e nome di file.");
return;
}
HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
using (HttpWebResponse httpWebReponse = (HttpWebResponse)httpWebRequest.GetResponse())
{
using (Stream stream = httpWebReponse.GetResponseStream())
{
Bitmap immagine = new Bitmap(Image.FromStream(stream));
immagine.Save(txtPercorso.Text);
MessageBox.Show("Download completato. Verifica in " + txtPercorso.Text +" il file immagine.");
}
}
}

Come si è visto dal precedente esempio di codice, tramite la classe webclient si ottiene il codice html della pagina, con il metodo downloadstring.
La funzione “DownloadImagine” con l’utilizzo delle classi “httpwebrequest”, “httpwebresponse”, “Stream” e “bitmap” permette di salvare l’immagine sul nostro pc.

Conclusioni


L’articolo ha illustrato la possibilità di realizzare un simpatico programma che ci permette di gestire le belle immagini che il motore di ricerca Bing offre ogni giorno ai suoi utenti.
L’articolo ha voluto avvicinare il lettore al download dei file di tipo immagine, il programma può essere ampliato rendendo ancora più interessante l’articolo.

Va fatta una precisione, che le immagini, non si possono utilizzare liberamente, questo vuol dire, che se vogliamo metterle nei nostri siti o programmi,  o per altra iniziativa (campagne marketing, comunicazione, etc) ciò non è possiibile
Tramite la parola Download è possibile scaricare il file di esempio.