venerdì 19 settembre 2014

Ricerca con Bing Api e c# da una pagina aspx di Microsoft .Net

Con queste semplice esempio è possibile utilizzare le Bing Api tramite c# ed eseguire una ricerca con Bing.
Si può creare ad esempio un pulsante che punti sul metodo e restituisca i risultati su di una listBox e una textBox per inserire la ricerca.
Per curiosità ho inserito nel webConfig l'inidirizzo e la chiave per connettersi a Bing, ma ciò non toglie che si può facilmente inserire nel sorgente c#.
Attualmente per utilizzare le Api di Bing bisogna creare un account Azure (disponibile anche gratuitamente) e farsi dare la chiave di accesso.

Nel file Web.Config inserire le due righe:
<add key="BingKey" value="1231231231231231231321231231231231231231231"/>
<add key="BingUrl" value="https://api.datamarket.azure.com/Bing/Search/"/>

Metodo da richiamare in c#
// Example for only English language research; null= all languages
BingSearch("rent car europe", "en-GB"); 

Codice di esempio da inserire per c#
string bingKey = ConfigurationManager.AppSettings["BingKey"].ToString();
string bingUrl = ConfigurationManager.AppSettings["BingUrl"].ToString();

public void BingSearch(string search_expression, string lang)
{
 try{
  var bingContainer = new Bing.BingSearchContainer(new Uri(bingUrl));
  var accountKey = bingKey;
  bingContainer.Credentials = new NetworkCredential(accountKey, accountKey);
 
  var searchQuery = bingContainer.Web(search_expression, null, null, lang.Equals("")?null:lang, null, null, null, null);
  var varResults = searchQuery.Execute();

  foreach (var result in varResults)
  {
   ....
  }
 }
 catch (Exception ex)
 {}
}

giovedì 11 settembre 2014

Nuovi caricamenti di foto su Dreamstime.com

Nei giorni scorsi ho effettuato altri caricamenti di foto sul miscrostock Dreamstime.com e molti hanno avuto un esito positivo nell'approvazione.
Sale dunque il rapporto approvazione/upload di un classico "non professionista" in fotografia.
Qui il mio portfolio.
New photos on my Dreamstime.com portfolio here.

venerdì 5 settembre 2014

Ottenere una pagina web o link con .Net c#

E' possibile ottenere una pagina web in diversi modi con gli elementi a disposizione del framework .Net di Microsoft.
In questi due esempi sono stati utilizzati linguaggio c#, la classe WebClient e la classe HttpWebRequest.
Nel primo esempio la classe WebClient con un semplice metodo ricerca il codice html a partire da un Url.
Nel secondo esempio ho creato un metodo e ho utilizzato la classe HttpWebRequest per la ricerca del codice html sempre a partire da un url/sito utilizzando un user agent di un browser.
Questo secondo esempio è stato creato perchè a volte alcuni siti inibiscono l'accesso e quindi la "cattura" del codice se si proviene con degli applicativi software o "Robot", ma lasciano entrare solamente "visitatori umani".
Viene in aiuto la classe HttpWebRequest con il parametro UserAgent da settare cosicchè l'applicativo potrà "diventare" un "visitatore umano" per questi tipi di siti.
Ma a volte la "cattura" del codice può impiegare più di un tempo previsto standard, per cui si dovranno impostare i vari timeout di risposta.

1 esempio:
string htmlCode="";
string strUrlNew = "http://www.example.com";

using (WebClient client = new WebClient())
{
 htmlCode = client.DownloadString(strUrlNew);
}

2 esempio:
    
private string DownloadContentSite(string url)
{
 string htmlCode = "";
 Byte[] bytes;
 Uri absoluteUri = new Uri(url.Trim());
 HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(absoluteUri);
 webRequest.Method = "GET";
 webRequest.AllowAutoRedirect = false;
 webRequest.Timeout = 60000;
 webRequest.ReadWriteTimeout = 60000;
 webRequest.Accept = "*/*";
 webRequest.UserAgent = "Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)";
 using (WebResponse webResponse = webRequest.GetResponse())
 {
  string contentType = webResponse.ContentType;
  using (Stream stream = webResponse.GetResponseStream())
  {
   using (MemoryStream memoryStream = new MemoryStream())
   {
    Byte[] buffer = new Byte[0x1000];
    Int32 bytesRead;
    while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0)
    {
     memoryStream.Write(buffer, 0, bytesRead);
    }
    bytes = memoryStream.ToArray();
   }
  }
 }

 htmlCode = System.Text.Encoding.UTF8.GetString(bytes);

 return htmlCode;
}