Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di grin
    Registrato dal
    Aug 2004
    Messaggi
    1,629

    Creare snippet alla Google

    Ciao,

    qualcuno saprebbe come creare snippet con php come fa Google nelle sue serp?
    Credo bisognerebbe usare implode(), preg_match() e substr().

    praticamente avendo come:

    Codice PHP:
    $str "Realizzazione siti internet, creazione siti web, applicazioni web, software, siti internet Milano, internet service provider, web design, creazione siti, software, internet";

    $keyword "siti internet"
    vorrei ricevere come return:

    Realizzazione siti internet, creazione siti web, applicazioni web, software, siti internet Milano, internet service provider, web design, creazione siti, ...

    Sto iniziando ad avere mal di testa.. ovviamente vorrei truncare l'output ad un numero determinato di parole/caratteri..

    Qualche idea? Grazie

  2. #2
    return preg_replace ( '/' . $keyword . '/i' , '$i' , $str ) ;
    Chiamatemi sven se volete non ho voglia di fare una nuova email per una nuova registrazione xD
    Mac Future User , Ventilatore for PC Cooler user , - dry is coming -

  3. #3
    Utente di HTML.it L'avatar di grin
    Registrato dal
    Aug 2004
    Messaggi
    1,629
    Originariamente inviato da bonaprogram
    return preg_replace ( '/' . $keyword . '/i' , '$i' , $str ) ;
    Ciao bonaprogram e grazie per interesse.

    cmq il codice da te suggerito mi ritorna:

    Realizzazione $i, creazione siti web, applicazioni web, software, $i Milano, internet service provider, web design, creazione siti, software, internet

    Forse perchè faccio

    Codice PHP:
    echo preg_replace'/' $keyword '/i' '[b]$i[/b]' $str ); 
    Direi che ci siamo quasi, ma come faccio il conteggio delle parole che stanno vicino a keyword?
    Perche se keyword fosse web design vorrei che mi ritornasse una cosa del genere:

    ... internet Milano, internet service provider, web design, creazione siti, software, internet ...

    Cioè mostrare solo 5 parole che stanno prima e dopo $keyword.. Perchè la $str potrebbe contenere fino a centinaia di parole..
    E' fattibile con PHP senza impazzire troppo?

  4. #4
    scusa, errore di battitura
    return preg_replace ( '/' . $keyword . '/i' , "$1" , $str ) ;
    $1 e non $i
    Chiamatemi sven se volete non ho voglia di fare una nuova email per una nuova registrazione xD
    Mac Future User , Ventilatore for PC Cooler user , - dry is coming -

  5. #5
    Direi che ci siamo quasi, ma come faccio il conteggio delle parole che stanno vicino a keyword?
    Perche se keyword fosse web design vorrei che mi ritornasse una cosa del genere:

    ... internet Milano, internet service provider, web design, creazione siti, software, internet ...

    Cioè mostrare solo 5 parole che stanno prima e dopo $keyword.. Perchè la $str potrebbe contenere fino a centinaia di parole..
    E' fattibile con PHP senza impazzire troppo?
    non capisco... vuoi dare un limite di caratteri alla keyword ?
    Chiamatemi sven se volete non ho voglia di fare una nuova email per una nuova registrazione xD
    Mac Future User , Ventilatore for PC Cooler user , - dry is coming -

  6. #6
    Utente di HTML.it L'avatar di grin
    Registrato dal
    Aug 2004
    Messaggi
    1,629
    Originariamente inviato da bonaprogram
    non capisco... vuoi dare un limite di caratteri alla keyword ?
    vorrei dare un limite alle parole che stanno accanto alla keyword...

    Cioe vorrei troncare le parti di sinistra e di destra al massimo di 5 parole. Esempio:

    $str = "Questa parte contiene molte parole ma che non sono molto rilevanti e qui invece abbiamo la keyword web design che ci serve e quindi la dobbiamo evidenziare con bold e ricevere una cosa simile (vedi sotto)";

    ... qui invece abbiamo la keyword web design che ci serve e quindi ...

    vedi, invece di ritornare tutta la parte sinistra e destra - facciamo ritornare solo 5 parole (sia da sinistra che da destra).

    Spero di essere stato piu' chiaro.

    Grazie per il tuo aiuto

  7. #7
    Codice PHP:
    function snippet $str $keyword $words )
    {
        
    $left_str '' $right_str '' ;
     
        
    $ts explode $keyword $str ) ;

        
    $left_words array_reverse explode ' ' $ts[0] ) ) ;
        
    $right_words explode ' ' $ts[1] ) ;
        
        for ( 
    $i $i <= $words $i++ )
        {
            
    $left_str .= $left_words[$words-$i] . ' ' ;
            
    $right_str .= $right_words[$i] . ' ' ;
        }
        
        return 
    '... ' $left_str '[b]' $keyword '[/b] ' $right_str ' ...' ;
    }

    echo 
    'stringa_completa: ' $str '
    ;

    echo 
    'stringa_trattata:' .  snippet $str$keyword) ; 
    credo si possa fare anche utilizzando le sole espressioni regolari... ma con quelle non riesco ancora a fare cose del genere
    Chiamatemi sven se volete non ho voglia di fare una nuova email per una nuova registrazione xD
    Mac Future User , Ventilatore for PC Cooler user , - dry is coming -

  8. #8
    Utente di HTML.it L'avatar di grin
    Registrato dal
    Aug 2004
    Messaggi
    1,629
    bonaprogram sei semplicemente geniale!

    E' proprio quello che mi serviva, se in qualche modo posso esserti utile puoi contarci!

    Grazie di nuovo e buona serata!

  9. #9
    Utente di HTML.it L'avatar di grin
    Registrato dal
    Aug 2004
    Messaggi
    1,629
    bonaprogram, ciao di nuovo,

    sto tentando di riportare alcune modifiche al tuo codice, senza successo pero'..

    Praticamente ho visto che non faceva explode per i chars insensitive, quindi ho trovato questa funzione in internet explodei:

    Codice PHP:
    function explodei($separator$string$limit false )
    {
       
    $len strlen($separator);
       for ( 
    $i 0; ; $i++ )
       {
           if ( (
    $pos stripos$string$separator )) === false || ($limit !== false && $i $limit ) )
           {
               
    $result[$i] = $string;
               break;
           }
           
    $result[$i] = substr$string0$pos );
           
    $string substr$string$pos $len );
       }
       return 
    $result;

    che funziona benino (per php < 5.0 bisognerebbe anche aggiungere la funzione stripos:

    Codice PHP:
    if (!function_exists("stripos")) {
      function 
    stripos($str,$needle,$offset=0)
      {
          return 
    strpos(strtolower($str),strtolower($needle),$offset);
      }

    Ora la ricerca della $keyword è indipendente dal tipo di caratteri (maiuscolo/minuscolo) ma ho riscontrato un'inconveniente (se ho $keyword = "quattro"; mi mette in output una cosa del genere: Uno, Due, Tre, quattro, Cinque etc.. cioè non rispetta il tipo della parola da ricercare (in questo caso non la lascia con la Q maiuscola ma inserisce il valore della $keyword.
    E' possibile che non cambi la parola originale (quella evidenziata con $keyword) ?

    Poi sono curioso se fosse possibile determinare se la parte di sinistra o destra necessitano di "..." Ad esempio se la $keyword si trova all'inizio della stringa (cioè non viene tagliata nessuna parte allora sarebbe logico non mostrare "..." all'inizio.. la stessa cosa per la fine della stringa..

    Si potrebbe creare due snippet contemporanamente? Ho provato con $keyword = array("key1", "key2"); ma ovviamente explode() non ha sopportato..

    Ovviamente non sei obbligato a risolvere tutti questi punti per me, ti chiedo solo se mi confermi che ci sia possibilità di una risoluzione - così continuero a rompermi la testa

    Grazie di nuovo per il tuo aiuto!

  10. #10
    piccola modifica con tanto di controlli:
    Codice PHP:
    $str "keyword web design che ci serve e quindi la dobbiamo evidenziare con bold e ricevere una cosa simile (vedi sotto)";
    $keyword "WEB design" ;

    function 
    snippet $str $keyword $words )
    {
        
    $left_str '' $right_str '' $output_string '' $ts = array ( ) ; $ikey = array ( ) ;
        
        if ( 
    preg_match '/(' $keyword ')/i' $str $ikeys ) )
        {
            
    $ts explode $ikeys[1] , $str ) ;
        }
        else
        {
            return 
    'Keyword non trovata' ;
        }
     
        if ( 
    count $ts ) )
        {
            
    $left_words array_reverse explode ' ' $ts[0] ) ) ;
            
    $right_words explode ' ' $ts[1] ) ;
            
            for ( 
    $i $i <= $words $i++ )
            {
                
    $left_str .= isset ( $left_words[$words-$i] ) ? $left_words[$words-$i] . ' ' '' ;
                
    $right_str .= isset ( $right_words[$i] ) ? $right_words[$i] . ' ' '' ;
            }

            
    $output_string $left_str '[b]' $ikeys[1] . '[/b] ' $right_str ;

            
    $output_string = ( strlen $left_str ) < strlen implode ' ' $left_words ) . ' ' ) ) ? '... ' $output_string $output_string ;
            
    $output_string = ( strlen $right_str ) < strlen implode ' ' $right_words ) . ' ' ) ) ? $output_string ' ...' $output_string ;
     
            return 
    $output_string;
        }
        else
        {
            return 
    'Keyword non trovata' ;
        }
    }

    echo 
    'stringa_completa: ' $str '
    ;

    echo 
    'stringa_trattata:' .  snippet $str$keyword) ; 
    Chiamatemi sven se volete non ho voglia di fare una nuova email per una nuova registrazione xD
    Mac Future User , Ventilatore for PC Cooler user , - dry is coming -

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.