ciao a tutti, ho un problema ma non sono sicuro che riguardi java. Ho visto su g+ che quando inserisco un link in un form il sito riesce ad estrarre il nome e la descrizione della pagina. Come posso ricreare lo script?
ciao a tutti, ho un problema ma non sono sicuro che riguardi java. Ho visto su g+ che quando inserisco un link in un form il sito riesce ad estrarre il nome e la descrizione della pagina. Come posso ricreare lo script?
Up, in rete non ho trovato niente
Chi conosce Javascript sa che non e' possibile... dato che il linguaggio puo' interagire solo con le pagine del sito a cui appartiene lo script, non con altri domini (scusa la semplificazione)
Se indichi quale linguaggio lato server (ASP, PHP, JSP, altro...) puoi/vuoi usare ti sposto
Il guaio per i poveri computers e' che sono gli uomini a comandarli.
Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
Consultate la discussione in rilievo: script / discussioni utili
Usate la funzione di Ricerca del Forum
In effetti non conosco javascript mi occupo principalmente di programmazione lato server.
Puoi spostarmi in php? vediamo cosa mi dicono...
Ciao, inannzitutto, dipende cosa intendi per descrizione, infatti il nome della pagina puoi averlo direttamente dal link, ovvero se il link è tipo: http://sito.it/reply.php, il nome della pagina è direttamente reply, e puoi prenderlo tranquillamente con qualche banale funzione php.
Se ti serve la descrizione o qualsiasi altra cosa che non puoi prendere dal link, devi implementare una funzione più complessa, ovvero devi simulare di aprire la pagina tramite browser per vedere il contenuto, questo puoi farlo con cURL, o con fopen, a seconda se il tuo hosting lo permette o meno.
Praticamente io dovrei scaricare il meta title e il meta description. Comunque ora guardo le funzioni che mi hai dato
Prova con qualcosa del genere (l'ho scritta ora quindi controlla che non vi siano errori e migliorala)
Ti scrivo qui le due espressioni sperando che non le modifichi:Codice PHP:
class htmlParser
{
protected $title;
protected $metas;
protected $source;
public function __construct($source)
{
if (!is_string($source))
{
throw new Exception('Il sorgente della pagina deve essere una stringa');
}
$this->source = $source;
}
public function getSource()
{
return $this->source;
}
public function getTitle($default = null)
{
if (!$this->title)
{
if (preg_match("/<title>([^>]*)<\/title>/i", $this->source, $title))
{
$this->title = strip_tags($title[1]);
}
else
{
$this->title = $default;
}
}
return $this->title;
}
public function getMetas()
{
if (!$this->metas)
{
if (preg_match_all("/<meta[^>]+name=\"([^\"]*)\"[^>]" . "+content=\"([^\"]*)\"[^>]+>/i", $this->source, $metas))
{
$count = count($metas[0]);
$res = array();
for ($i = 0; $i < $count; $i++)
{
$res[strtolower(trim($metas[1][$i]))] = trim($metas[2][$i]);
}
$this->metas = $res;
}
else
{
$this->metas = array();
}
}
return $this->metas;
}
public function getMeta($meta, $default = null)
{
if ($this->hasMeta($meta))
{
return $this->metas[strtolower($meta)];
}
return $default;
}
public function hasMeta($meta)
{
if (!$this->metas)
{
$this->getMetas();
}
return (bool) isset($this->metas[strtolower($meta)]);
}
}
$hp = new htmlParser(file_get_contents('http://www.sitochevuoitu.it'));
echo 'Titolo => ' . $hp->getTitle('Nessun titolo') . '
';
echo 'Descrizione => ' . $hp->getMeta('description', 'Nessuna descrizione');
"/<title>([^>]*)<\/title>/i"
"/<meta[^>]+name=\"([^\"]*)\"[^>]" . "+content=\"([^\"]*)\"[^>]+>/i"
"Dai diamanti non nasce niente, dal letame nascon fiori."
Fabrizio De Andrè
Ciao grazie mille per lo script, anche se è un pò complesso per i miei standard .
Ho provato ad eseguire la classe, ma questa blocca la pagina e mi restituisce questo errore:
[06-Apr-2012 06:30:31 UTC] PHP Warning: file_get_contents() [function.file-get-contents]: Filename cannot be empty in index.php on line 1568
[06-Apr-2012 06:30:31 UTC] PHP Fatal error: Uncaught exception 'Exception' with message 'Il sorgente della pagina deve essere una stringa' in function.in.php:12
Stack trace:
#0 index.php(1568): htmlParser->__construct(false)
#1 index.php(3013): Page_All('3', 20)
#2 {main}
thrown in function.in.php on line 12
Il warning viene generato perchè come argomento a file_get_contents(ARGOMENTO) non passi nulla... devi mettere l'indirizzo del sito che intendi parsare. L'eccezione viene sollevata di conseguenza, perchè il costruttore si aspetta una stringa e non false. Ovviamente per ottenere il sorgente non sei costretto ad utilizzare file_get_contents(), ma puoi anche ad esempio utilizzare curl (preferibile, cosi puoi gestire eventuali redirect o pagine non trovate). Qualunque soluzione intendi adottare, l'importante è che il costruttore della classe riceva l'effettivo sorgente della pagina di tuo interesse.
"Dai diamanti non nasce niente, dal letame nascon fiori."
Fabrizio De Andrè
Avevo messo il link corretto... cmq ora funziona mostra la descrizione ma non il titolo
Restituisce questo errore:
[06-Apr-2012 10:58:50 UTC] PHP Warning: preg_match() [function.preg-match]: Unknown modifier 't' in function.in.php on line 27