Visualizzazione risultati 1 fino 8 di 8

Discussione: Lettura tag meta

  1. #1
    Guest

    Predefinito Lettura tag meta

    Salve a tutti, potete aiutarmi a capire come modificare questo script:

    Codice PHP:
    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;
    }
    In questo momento legge il content di un tag sviluppato così:
    <meta name="title" content="testo" />

    Vorrei leggere content anche di questo tag
    <meta content="testo" name="title" />

  2. #2
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Devi prima matchare il tag <meta(.*?)> e poi recuperi le coppie chiave valore dalla sottostringa.


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  3. #3
    Guest

    Predefinito

    Scusa puoi spiegarti meglio? oppure farmi un esempio? Non sono pratico

  4. #4
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Una cosa del genere:

    Codice PHP:
    $this->metas = array();
    if (
    preg_match_all('/<meta(.*?)>/i', $this->source, $metas)) {
    foreach (
    $metas[1] as $meta) {
    $res = array();
    preg_match_all('/(\w+)="(.*?)"/', PREG_SET_ORDER, $attrs);
    foreach (
    $attrs as $attr) {
    $res[$attr[1]] = $attr[2];
    }
    }
    $this->metas[] = $res;
    }
    }


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  5. #5
    Guest

    Predefinito

    Ciao scusa ancora il disturbo, ho questa classe che dovrebbe leggere alcune informazioni da una pagina.

    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(.*?)>/i', $this->source, $metas))
    {
    foreach (
    $metas[1] as $meta)
    {
    $res = array();
    preg_match_all('/(\w+)="(.*?)"/', PREG_SET_ORDER, $attrs);
    foreach (
    $attrs as $attr)
    {
    $res[$attr[1]] = $attr[2];
    }
    }
    $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($link));
    $link_title1 = $hp->getTitle('Nessun titolo');
    $link_title2 = $hp->getMeta('title', 'Nessun titolo');
    $link_description = $hp->getMeta('description', 'Nessuna descrizione');
    Il problema è che non funziona. Puoi aiutarmi a capire il perchè o ad aiutarmi a sistemare la classe?

  6. #6
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Dire che non funziona è troppo vago.


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  7. #7
    Guest

    Predefinito

    Non c'è molto da dire, non mi restituisce nessun errore, mi legge il testo dentro a <title></title> ma non i <meta></meta>.

    Non riesco a capire il problema principalmente perchè non capisco bene il codice

    Edit:

    Rieccomi, invece di impazzire ed utilizzare quella classe ho deciso di provare a scrivere una funzione tutta mia.

    Codice PHP:
    function get_meta($source, $meta)
    {
    if (!
    preg_match("~^(?:f|ht)tps?://~i", $source))
    {
    $source = "http://".$source;}

    if(
    filter_var($source, FILTER_VALIDATE_URL))
    {
    $meta_tag = get_meta_tags($source);
    if(
    $meta == "title")
    {
    preg_match("/<title>([^>]*)<\/title>/i", $source, $title1);
    $title1 = strip_tags($title1[1]);
    $title2 = $meta_tag["title"];

    if(
    $title1 > $title2)
    {
    $return = $title1;}
    else
    {
    $return = $title2;}

    if(
    strlen($return) == 0)
    {
    $return = "Nessun Titolo";}
    }
    else if(
    $meta == "description")
    {
    $return = $meta_tag["description"];

    if(
    strlen($return) == 0)
    {
    $return = "Nessuna descrizione";}
    }
    else if(
    $meta == "favicon")
    {
    $return = "http://www.google.com/s2/favicons?domain=".$source;
    }
    else
    {
    $return = "";}

    return(
    $return);
    }
    }
    La parte della favicon non funziona ancora, appena ho del tempo ci lavoro. Cosa ne dite? è fatta bene?
    Ultima modifica di saitfainder : 08-05-2012 alle ore 15.23.06 Motivo: Usa il tasto Edita

  8. #8
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Citazione Originalmente inviato da mysolution Visualizza messaggio
    Non c'è molto da dire, non mi restituisce nessun errore, mi legge il testo dentro a <title></title> ma non i <meta></meta>.
    Almeno così avremmo capito cosa doveva fare. Far perdere un sacco di tempo per decifrare il tuo codice, capire cosa dovrebbe fare e cosa invece fa non è carino.

    Citazione Originalmente inviato da mysolution Visualizza messaggio
    La parte della favicon non funziona ancora, appena ho del tempo ci lavoro. Cosa ne dite? è fatta bene?
    Se funziona è fatta bene


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •