
Originariamente inviata da
luisa227
Non so se sia la sezione corretta, in caso negativo vi prego di indirizzarmi nella sezione pi� indicata.
http://www.albonazionalegestoriambie...ncludiCP=false
Devo estrarre su un foglio di calcolo (Open Office Calc) alcuni dati dal sito scritto sopra (che, se ho capito bene dall'estensione aspx, usa il linguaggio Asp.net , che io non conosco) e precisamente dovrei estrarre il nome azienda, le categorie (solo alcune) e le scadenze (che si trovano cliccando sul pulsante dettagli). Ovviamente il sito non � mio quindi non ho altri tipi di info rispetto a quanto detto sopra.
Qualcuno hai idea se sia fattibile un'estrapolazione del genere e come? Grazie
Ciao Luisa,
per fare quello che vuoi tu, visto che ricevi i dati via json, devi chiamare direttamente la fonte dei dati, non la pagina stessa.
In questo caso (il primo link) se fai un controllo con fiddler ti accorgerai che al click sulla ricerca (o chiamando il link alla pagina con i parametri) i dati vengono caricati da "http://www.albonazionalegestoriambientali.it/Services/GetRicerche.asmx/GetImpresePerSezioneProvincia", con una chiamata POST. Quindi puoi tranquillamente utilizzare una HttpWebRequest per fare altrettanto. Ad esempio :
codice:
public class JSONDataReader
{
public class Result
{
public Content d { get; set; }
}
public class Content
{
public int NumeroRecordTotali { get; set; }
public List<Imprese> ListaImprese { get; set; }
}
public class Imprese
{
public string Cap { get; set; }
public string Categorie { get; set; }
public string CodiceFiscale { get; set; }
public string Comune { get; set; }
public string Denominazione { get; set; }
public string IdImpresa { get; set; }
public string NumeroIscrizione { get; set; }
public string Progressivo { get; set; }
public string ProvinciaIscrizione{ get; set; }
public string Sezione{ get; set; }
public string SiglaProvincia{ get; set; }
public string Via{ get; set; }
}
public JSONDataReader(string url,string parameters,string fileName)
{
SendRequest<Result>((Result, err) =>
{
if (err != null)
return;
var imprese = Result.d.ListaImprese;
//imprese contiene i dati estrappolati.
Type type = typeof(Imprese);
var properties = type.GetProperties();
var names = properties.Select(s => s.Name);
var header = string.Join(";", names);
var sb = new StringBuilder(header);
sb.Append(Environment.NewLine);
foreach (var impresa in imprese)
{
foreach (var name in names)
{
var pi = properties.Single(s => s.Name == name);
sb.Append(pi.GetValue(impresa));
sb.Append(";");
}
sb.Append(Environment.NewLine);
}
File.WriteAllText(fileName, sb.ToString());
},
url,
parameters);
}
public static void SendRequest<T>(Action<T, Exception> action, string url, string objJson)
{
string responseString = string.Empty;
byte[] byteArray = Encoding.UTF8.GetBytes(objJson);
var request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "application/json";
request.BeginGetRequestStream(new AsyncCallback((asynchronousResult) =>
{
HttpWebRequest req1 = (HttpWebRequest)asynchronousResult.AsyncState;
Stream postStream = req1.EndGetRequestStream(asynchronousResult);
postStream.Write(byteArray, 0, objJson.Length);
postStream.Dispose();
req1.BeginGetResponse(new AsyncCallback((asynchronousResult1) =>
{
try
{
HttpWebRequest req2 = (HttpWebRequest)asynchronousResult1.AsyncState;
HttpWebResponse response = (HttpWebResponse)req2.EndGetResponse(asynchronousResult1);
Stream streamResponse = response.GetResponseStream();
StreamReader streamRead = new StreamReader(streamResponse);
responseString = streamRead.ReadToEnd();
T result = (T)Newtonsoft.Json.JsonConvert.DeserializeObject(responseString, typeof(T));
action(result, null);
streamResponse.Dispose();
streamRead.Dispose();
response.Dispose();
}
catch (WebException e)
{
action(default(T), e);
}
}), request);
}), request);
}
}
Questa classe recupera i dati delle imprese e crea un csv contenente i dati incolonnati. E la usi così:
codice:
new JSONDataReader(
"http://www.albonazionalegestoriambientali.it/Services/GetRicerche.asmx/GetImpresePerSezioneProvincia",
"{\"lang\":\"it\",\"siglaProvincia\":\"SS\",\"idRegione\":\"20\",\"includiCP\":\"false\",\"paginaCorrente\":\"1\",\"risultatiPerPagina\":\"50\"}",
"test.csv");