11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
ok, allora dato che l'url si trova in un proprio campo è più semplice.

Dovrai effettuare una richiesta HTTP a quell'url (usando per esempio la classe WebClient) per ottenere il contenuto della pagina web. Poi, usando espressioni regolari, estrarrai da quel contenuto le informazioni che ti interessano.

Ecco un esempio che dovrai perfezionare:
https://dotnetfiddle.net/X6u1ky

ciao,
Moreno

Enjoy learning and just keep making
81 messaggi dal 30 giugno 2013
www.topgan.it
Ciao Moreno
Dunque io ho creato una pagina in App_Code con il nome CercaSito.cs con il codice da te scritto.
1) come passo la variabile con il link che sostituisca quello fisso "http://www.topgan.it"?
2) nella pagina che voglio visualizzare il risultato come richiamo la class?
Io ho provato cosi:
using (var generator = new Program()){qui la variabile del link}
ma mi da errore:Descrizione: (Errore durante la compilazione di una risorsa necessaria per soddisfare la richiesta. Rivedere i dettagli relativi all'errore e modificare in modo appropriato il codice sorgente.

Messaggio di errore del compilatore: CS1674: 'Program': il tipo utilizzato in un'istruzione using deve essere convertibile in modo implicito in 'System.IDisposable')
Dove sbaglio?

Giuseppe TopGan
Admministratore & Creatore
https://www.topgan.it & https://topgan.altervista.org/forum
81 messaggi dal 30 giugno 2013
www.topgan.it
A Ciao
Rieccoci
Ho provato in quest'altro modo inserendo tutto nella pagina che deve visualizzare in questo modo:
@{
        var url = new Uri("risultati.Link_Sito");
    var regexpTitolo = new Regex("<title.*?>(.+?)</title>");
    var regexpDescrizione = new Regex("<meta name=\"description\" content=\"(.+?)\"/>");
    var regexpImmagine = new Regex("src=\"(.+?\\.jpg)\"");
    
    using (var client = new WebClient()){
      var contenuto = client.DownloadString(url);
      
      var titolo = Cerca(regexpTitolo, contenuto);
      var descrizione = Cerca(regexpDescrizione, contenuto);
      var immagine = new Uri(url, Cerca(regexpImmagine, contenuto));
      
      Console.WriteLine("titolo: {0}", titolo);
      Console.WriteLine("descrizione: {0}", descrizione);
      Console.WriteLine("immagine: {0}", immagine);
    }
private static string Cerca(Regex regexp, string contenuto){
    var match = regexp.Match(contenuto);
    if (match == null) return null;
    
    return match.Groups[1].Value;
    
  }
}

Ma mi dice che manca una prendesi } ma in non riesco a trovarla dove sia mancante
Modificato da TopGan il 04 maggio 2016 09.20 -

Giuseppe TopGan
Admministratore & Creatore
https://www.topgan.it & https://topgan.altervista.org/forum
11.886 messaggi dal 09 febbraio 2002
Contributi

inserendo tutto nella pagina che deve visualizzare in questo modo:

mmh, meglio di no, altrimenti ogni volta che visiti quella pagina dovrai stabilire una connessione al sito per scaricare quelle informazioni.

Dovresti eseguire quel codice quando salvi il post, in modo che il titolo, la descrizione e l'url dell'immagine vadano a finire in appositi campi nel tuo database, così che siano subito pronti da mostrare quando gli utenti del tuo sito visitano la pagina.

Il codice che ti ho fornito non va copiato pari pari, perché io l'ho mandato in esecuzione in un'applicazione console, mentre tu hai un'applicazione web.
Prova a capire cosa fa il codice, non copiarlo tale e quale.

Per esempio, i Console.WriteLine nel tuo caso non hanno senso perché tu i valori di titolo, descrizione ed immagine non devi stamparli su console ma devi salvarli nel database.

Il metodo Cerca, magari spostalo in una classe in cui tieni dei metodi di utilità, oppure puoi farne a meno e fare così per ognuno dei 3 valori.
string titolo = null;
var matchTitolo = regexpTitolo.Match(contenuto);
if (matchTitolo != null){
  titolo = matchTitolo.Groups[1].Value;
}


ciao,
Moreno

Enjoy learning and just keep making
81 messaggi dal 30 giugno 2013
www.topgan.it
Ciao Moreno
BrightSoul ha scritto:
mmh, meglio di no, altrimenti ogni volta che visiti quella pagina dovrai stabilire una connessione al sito per scaricare quelle informazioni.

Era proprio quello che volevo fare senza salvare nulla ma Ok le memorizzo nel data base.
Allora mi dici di analizzare il codice e lo fatto ma non sono sicuro se e giusto. provo a spiegarlo passo passo:
var url = new Uri("http://www.topgan.it/"); // variebile che contiene il mio link

var regexpTitolo = new Regex("<title.*?>(.+?)</title>"); // variabile che identifica il titolo

cosi anche le altre due "descrizione e immagine". Adesso sono proprio queste che il mio sistema non riconosce ed in particolare new Regex che mi dice:
Errore di compilazione

Descrizione: Errore durante la compilazione di una risorsa necessaria per soddisfare la richiesta. Rivedere i dettagli relativi all'errore e modificare in modo appropriato il codice sorgente.

Messaggio di errore del compilatore: CS0246: Impossibile trovare il tipo o il nome dello spazio dei nomi 'Regex'; probabilmente manca una direttiva using o un riferimento a un assembly
Continuo con la descrizione:
using (var client = new WebClient()){
var contenuto = client.DownloadString(url);// carica tutta la pagina del link e la memorizza nella variabile contenuto 
    }

In seguito il metodo per cercare il titolo la descrizione e l'immagine nella variabile contenuto che adesso ho provato con il secodo.
Eccoti il codice come è cambiato:
@{
  
    var url = new Uri("http://www.topgan.it/");
    var regexpTitolo = new Regex("<title.*?>(.+?)</title>");
    var regexpDescrizione = new Regex("<meta name=\"description\" content=\"(.+?)\"/>");
    var regexpImmagine = new Regex("src=\"(.+?\\.jpg)\"");
    
    using (var client = new WebClient()){
      var contenuto = client.DownloadString(url);
    }
string titolo = null;
var matchTitolo = regexpTitolo.Match(contenuto);
if (matchTitolo != null){
  titolo = matchTitolo.Groups[1].Value;
}
string descrizione = null;
var matchDescrizione = regexpDescrizione.Match(contenuto);
if (matchDescrizione != null){
  descrizione = matchDescrizione.Groups[1].Value;
}
string immagine = null;
var matchImmagine = regexpImmagine.Match(contenuto);
if (matchImmagine != null){
  immagine = matchImmagine.Groups[1].Value;
}  
}

Modificato da TopGan il 05 maggio 2016 00.14 -

Giuseppe TopGan
Admministratore & Creatore
https://www.topgan.it & https://topgan.altervista.org/forum

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.