venerdì 22 agosto 2014

Ricerca con Google Api e c# da una pagina aspx

Con queste semplici righe è possibile connettersi alle Google Api tramite c# ed eseguire una ricerca con Google.
Si può creare ad esempio un pulsante che punti sul metodo e restituisca i risultati su di una listBox, una textBox per inserire la ricerca.
Per curiosità ho inserito nel webConfig l'inidirizzo di Google, ma ciò non toglie che si può facilmente inserire nel sorgente c#.
Non dimenticarsi di scaricare la libreria Newtonsoft.Json.dll e inserirla nella directory "bin" dell'applicazione insieme con il file Newtonsoft.Json.xml

//Nel WebConfig inserire l'url delle Google Api
<configuration>
  <appSettings>
  <add key="GoogleUrl" value="http://ajax.googleapis.com/ajax/services/search/web?v=1.0&rsz=2&q={0}&hl={1}&start={2}"/>

  
//Creare ad esempio il Model
public class SearchResultData
{
 public string url;
 public string title;
 public string content;
 public FindingEngine engine;

 public enum FindingEngine { google };

 public SearchResultData(string url, string title, string content, FindingEngine engine)
 {
  this.url = url;
  this.title = title;
  this.content = content;
  this.engine = engine;
 }
}

//Nel sorgente della pagina aspx.cs inserire le seguenti righe 
public string googleUrl = ConfigurationManager.AppSettings["GoogleUrl"].ToString();
 
public List<SearchResultData> GoogleSearch(string search_expression, string lang)
    {
 var url_template = googleUrl;
 if (lang.Equals(""))
  lang = SpiderObj.Languages.Code.codeEN;
 Uri search_url;
 var results_list = new List<SearchResultData>();
 int[] offsets = { 0, 8, 16, 24, 32 };
 try{
  foreach (var offset in offsets)
  {
   search_url = new Uri(string.Format(url_template, search_expression, lang, offset));
   var page = new WebClient().DownloadString(search_url);
   JObject objJson = (JObject)JsonConvert.DeserializeObject(page);

   var results_query =
     from result in objJson["responseData"]["results"].Children()
     select new SearchResultData(
      url: result.Value<string>("url").ToString(),
      title: result.Value<string>("title").ToString(),
      content: result.Value<string>("content").ToString(),
      engine: SearchResultData.FindingEngine.google
      );

   foreach (var result in results_query)
    results_list.Add(result);
  }
 }
 catch (Exception ex)
 {
  log.Error(ex);
  throw new Exception("");
 }
 return results_list;
    }

mercoledì 2 luglio 2014

Nota su copyright: linguaggi di programmazione, esempi e non solo

Mi è capitato di ricevere email su aggiunta di linguaggi di programmazione ed esempi non solo sul blog, ma anche su di una mia app "Code" presente sul market Android.
Purtroppo non tutti i creatori di linguaggi di programmazione rilasciano codice ed esempi in libera diffusione, ma applicano delle regole di copyright.
Ovviamente non posso leggere tutte le regole perchè sono numerosissime, ma credo sempre di agire in buon senso e fare il possibile.
Se però, come scrivo normalmente nelle app, venissero violate delle norme su contenuti o proprietà di alcuni linguaggi o imperfezioni di scrittura, posso provvedere alla rimozione o risoluzione dell'anomalia.
Mi è capitato anche di ricevere un'email doveva veniva richiesta la rimozione di alcune mie app in alcune nazioni perchè avevo utilizzato una parola o meglio l'associazione di più parole che violavano la proprietà intellettuale di chi aveva utilizzato le stesse per altri scopi (il tutto documentato ovviamente).
Che dire, a me è sembrata una po' esagerata la storia, giusta richiesta ma un po' esagerata.
Comunque ho provveduto alla rimozione delle app in alcune nazioni e rinominate le stesse app riutilizzandole in altri paesi.
Saggio consiglio: occhio ai nomi che usate!

martedì 24 giugno 2014

Upload di file multipli in .Net con c#

Con poche righe di codice è possibile eseguire upload di file multipli in un sito web su piattaforma .Net con linguaggio c#.
E' molto importante ricordare nel "form" la proprietà enctype="multipart/form-data" e nell'oggetto "input" la proprietà multiple="multiple"
Nell'esempio è presente la parte client/html (Default.aspx), il codice associato (Default.aspx.cs) e le immagini d'aiuto.

Default.aspx
<asp:%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>asp:
<asp:html xmlns="http://www.w3.org/1999/xhtml">asp:
<asp:head runat="server">asp:
    <asp:title>asp:<asp:/title>asp:
<asp:/head>asp:
<asp:body>asp:
    <asp:form id="form1" runat="server" enctype="multipart/form-data"  method="post" >asp:
        <asp:table cellpadding="2" cellspacing="1" width="740px">asp:
            <asp:tr>asp:
                <asp:td width="120px">asp:
                    <asp:input type="file" id="File1" multiple="multiple" name="File1" runat="server" />asp:
                <asp:/td>asp:
            <asp:/tr>asp:
            <asp:tr>asp:
                <asp:td align="left">asp:
                    <asp:asp:Button id="Manual" Text="Upload" runat="server" OnClick="Upload_Click"  />asp:
                <asp:/td>asp:
            <asp:/tr>asp:
            <asp:tr>asp:
                <asp:td colspan="4">asp:
                    <asp:asp:ListBox ID="list_message" name="list_message" runat="server" width="600px" Height="200px">asp:<asp:/asp:ListBox>asp:
                <asp:/td>asp:
            <asp:/tr>asp:
        <asp:/table>asp:
    <asp:/form>asp:
<asp:/body>asp:
<asp:/html>asp:
Default.aspx.cs
public partial class _Default : System.Web.UI.Page
{
    string pathFileUploaded = "c:\\temp\\";

    protected void Page_Load(object sender, EventArgs e)
    {}
 
    protected void Upload_Click(object sender, System.EventArgs e)
    {
        if ((File1.PostedFile != null) && (File1.PostedFile.ContentLength >asp: 0))
        {
            HttpFileCollection uploadedFiles = Request.Files;
            for (int i = 0; i <asp: uploadedFiles.Count; i++)
            {
                HttpPostedFile userPostedFile = uploadedFiles[i];
                try
                {
                    if (userPostedFile.ContentLength >asp: 0)
                    {
                        string fn = System.IO.Path.GetFileName(userPostedFile.FileName);
                        try
                        {
                            userPostedFile.SaveAs(pathFileUploaded + fn);
                            list_message.Items.Add(userPostedFile.FileName + " inviato.");
                        }
                        catch (Exception ex)
                        {
                           list_message.Items.Add("Errore: " + ex.Message);
                        }
                    }
                }
                catch (Exception Ex)
                {
                   list_message.Items.Add("Errore: " + Ex.Message);
                }
            }
        }
        else
        {
            list_message.Items.Add("Selezionare almeno 1 file.");
        }
    }
}