• User Attivo

    [howto] creare sitemap con linux

    Essendo utente linux straconvinto sentivo un pò la mancanza di tool per creare una sitemap in modo semplice che non avessero limiti di url etc etc (probabilmente c'è ma io non l'ho trovato)

    così ho deciso di trovare un sistema rapido e semplice per creare una sitemap (niente di che viste le mie conoscenze informatiche)

    riporto di seguito un breve howto che magari può tornare utile a chi usa linux e non si trova bene con i tool online

    Per utilizzare questa procedura è necessario un sistema linux, il comando wget e il programma tree (piccolissimo) installato.

    Il tutto si svolge da shell ...

    create un file e chiamatelo ComeViPare scriveteci dentro questo:

    QUESTA È LA VERSIONE AGGIORNATA DELLO SCRIPT

    
    
     #!/bin/bash
    
    #---INIZIO PARTE DA MODIFICARE
    
    site=**www.sito.it**
    #indirizzo del sito senza http://
    nodir=**/dir2,/dir2**
    #elenco delle directory da escludere , separate da una virgola
    accettati=**.html,.php,.asp** delle estensioni da prendere, separate da una virgola
    esclusi=**.css,.jpg,.gif,.txt** delle estensioni da NON prendere, separate da una virgola
    data=**2007-03-21**
    #data utlimo aggiornamento in questo formato YYYY-MM-DD
    freq=**weekly**
    #frequenza aggiornamento - valori possibili:
    #always,hourly,daily,weekly,monthly,yearly,never
    prio=**0.5**
    #priorita da 0.0 a 1.0
    
    #---FINE PARTE DA MODIFICARE
    
    wget -m -X $nodir  http://$site --accept $accettati --reject $esclusi
    
    cd $site
    
    echo '<?xml version="1.0" encoding="UTF-8"?>
    <urlset xmlns="http://www.google.com/schemas/sitemap/0.84">' >> ../sitemap.xml;
    
    arr=(`tree -i -f |grep [.html][.php]`)
    for (( I=0 ; I<${#arr
    * } ; I++ ))
            do
    echo "<url>
        <loc>http://$site${arr*:1}</loc>
        <lastmod>$data</lastmod>
        <changefreq>$freq</changefreq>
        <priority>$prio</priority>
    </url>" >> ../sitemap.xml
    done
    echo "</urlset>" >> ../sitemap.xml
    
    cd ..
    
    rm -rf $site 
    #questo comando elimina la cartella creata in cui viene scaricato il sito
    
    exit 0          
    
    
    

    lo script svolgerà tutte le operazioni necessarie:
    1)scarica la struttura del sito (quindi attenzione allo spazio)
    2)estrae la struttura delle pagine
    3)crea il file sitemap.xml (in base alle impostazioni specificate nella parte da modificare ...vedi sotto)
    4)cancella la cartella in cui ha scaricato il sito

    L'operazione potrebbe essere abbastanza lunga (in base alle dimensioni del sito) e soprattutto potrebbe occupare molto spazio qundi attenzione a ciò che fate !

    lo script va modificato (nei commenti c'è scritto come fare)in base alle proprie esigenze quindi
    dovete modificare la parte da personalizzare

    una volta fatto questo cambiate i permessi di questo scriptino con

    
    chmod 777 ComeViPare
    
    ```e infine date un bel
    

    ./ComeViPare

    
    vi troverete lì bello pronto un file sitemap.xml 
    
    tenete conto che lo script genera la prima pagina del sito  in versione con index
    ad esempio: 
    h-ttp://w-ww.nomedelsito.com/index.html
    
    quindi se non vi piace (come a me) modificatela ad esempio con h-ttp://w-ww.nomedelsito.com

  • Community Manager

    Ciao robyweb,

    trovo il tuo post molto interessante ed utile. Ora vediamo se qualche tester ci vuole dare una mano.

    Corro subito a segnalarlo nel Forum di Linux 😉

    Grazie 🙂


  • User Attivo

    Volevo modificare il primo post ma non riesco ...

    comunque mi sono dimenticato di questo:

    Lo scriptino sopra considera solo pagine con estensione .html o .php

    in caso di estensioni diverse tipo .asp o .htm basta modificare questa linea

    
    arr=(`tree -i -f |grep [.html][.php]`)
    
    ```e aggiungere/modificare/togliere le estensioni desiderate ....

  • User Attivo

    imparo ora cosa e' un "sitemap", ma cosi' a primo acchitto mi viene la domanda? le istruzioni "wget" non sarebbe meglio includerle nello script in modo da rendere il tutto piu' automatico?


  • Community Manager

    @robyweb said:

    Volevo modificare il primo post ma non riesco ...

    Piccolo OT, per limitare la modifica dei post in totale (che poi non si capisce niente), abbiamo messo un limite di tempo.

    Comunque, via pvt, modifichiamo tutti i post 🙂


  • User Attivo

    @olaola said:

    imparo ora cosa e' un "sitemap", ma cosi' a primo acchitto mi viene la domanda? le istruzioni "wget" non sarebbe meglio includerle nello script in modo da rendere il tutto piu' automatico?

    sicuramente si ... non l'ho fatto perchè così si può personalizzare più semplicemente il comando con le opzioni volute ...


  • User Attivo

    Ciao robyweb,
    guarda, di linux non è che ne mastico tanto, sinceramente non posso darti una gran mano in questo. Vediamo se qualche utente + esperto di me in questo settore ci può autare..

    A presto
    Gianni 🙂


  • User Attivo

    Per le prove fatte finora la procedura sembra funzionare bene ...


  • User Attivo

    Invece di salvare tutti i file e poi cancellarli successivamente, si può utilizzare direttamente l'stdout (standard output) di wget, giocando un po' con grep ed awk. Questo ci permette di fare il tutto (url grabbing e creazione della sitemap) con un unico script abbastanza piccolo, che volendo può anche essere messo in cronjob per l'esecuzione. Avrei voluto utilizzare insieme le opzioni -r e --spider per wget, ma a quanto pare è possibile farlo solo con una nuova versione in fase alpha, sicuramente non presente sulla maggior parte delle installazioni. Utilizzo invece -m insieme a --delete-after, cancellando così immediatamente tutti i file che vengono scaricati, tanto ci serve solo manipolarne gli indirizzi. La directory che wget crea comunque, vuota quindi, verrà cancellata alla fine delle operazioni. Uso anche l'opzione -erobots=off, ignorando così robots.txt che altrimenti finirà nella sitemap.
    Le uniche opzioni che andrebbero modificate dall'utente si trovano all'inizio del codice e comprendono url del sito e le varibili tipiche della sitemap (data ultima modifica, frequenza d'aggiornamento, priorità,...).

    
    #!/bin/bash
    
    #Varibili modificabili dall'utente
    url="http://www.ilmiosito.it/"
    data="2006-12-31"
    freq="daily"
    prio="0.5"
    
    #Da qui non andrebbe modificato niente
    lista=`wget -erobots=off -m --delete-after $url --reject .jpg,.css 2>&1 |grep $url |awk '{print $2 " "}'`
    IFS=" "
    array=($lista)
    
    echo '<?xml version="1.0" encoding="UTF-8"?>
    <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' >> sitemap.xml;
    
    for ((i=0;i<${#array* };i++)); do
            echo "< url>
            <loc>${array*:1}</loc>
            <lastmod>$data</lastmod>
            <changefreq>$freq</changefreq>
            <priority>$prio</priority>
    </url>" >> sitemap.xml
    done
    
    echo "</urlset>" >> sitemap.xml
    
    rmdir ${url#http://}
    exit 0
    
    

    Ovviamente questo è solo un esempio, da wget ho escluso i file .jpg e .css ma poi ognuno può sceglierne altri in base alle proprie necessità. Occhio ad accenti ed apostrofi che non sono tutti uguali 😉
    Se qualcosa non è chiara chiedete pure 😄


  • User Attivo

    grande ... così è sicuramente meglio

    grazie


  • Community Manager

    Se ci saranno aggiornamenti o modifiche posta pure il post qui che aggiorno il primo e pulisco il thread da post come il mio 😄


  • User Attivo

    Nicola a me il tuo script da questo errore:

     
    ./pro: command substitution: line 13: syntax error near unexpected token `|'
    ./script: command substitution: line 13: `|grep $url |awk '{print $2 " "}''
    ./script: line 17: syntax error near unexpected token `newline'
    ./script: line 17: `<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' >> '
    
    ```inoltre nello script manca l'opzione -X per specificare le cartelle da non scansionare ...

  • User Attivo

    OK, ho riassunto tutti i passaggi in uno script unico

    
    #!/bin/bash
    
    site=**www.sito.com**
    #indirizzo del sito senza http://
    nodir=**/dir1,/dir2**
    #elenco delle directory da escludere , separate da una virgola
    accettati=**.html,.php** delle estensioni da prendere, separate da una virgola
    esclusi=**.css,.jpg** delle estensioni da NON prendere, separate da una virgola
    data=**2006-12-31**
    #data utlimo aggiornamento in questo formato YYYY-MM-DD
    freq=**daily**
    #frequenza aggiornamento - valori possibili:
    #always,hourly,daily,weekly,monthly,yearly,never
    prio=**0.5**
    #priorità da 0.0 a 1.0
    
    wget -m -X $nodir  http://$site --accept $accettati --reject $esclusi
    
    cd $site
    
    echo '<?xml version="1.0" encoding="UTF-8"?>
    <urlset xmlns="http://www.google.com/schemas/sitemap/0.84">' >> ../sitemap.xml;
    
    arr=(`tree -i -f |grep [.html][.php]`)
    for (( I=0 ; I<${#arr
    * } ; I++ ))
            do
    echo "<url>
        <loc>$site${arr*:1}</loc>
        <lastmod>$data</lastmod>
        <changefreq>$freq</changefreq>
        <priority>$prio</priority>
    </url>" >> ../sitemap.xml
    done
    echo "</urlset>" >> ../sitemap.xml
    
    cd ..
    
    rm -rf $site 
    #questo comando elimina la cartella creata in cui viene scaricato il sito
    
    exit 0
    
    
    ```le parti da personalizzare sono quelle in neretto
    
    Questa versione dello script alla fine del processo elimina direttamente la cartella che viene creata per scaricare il sito, quindi, alla fine del processo ci trovaremo semplicemente un file nominato sitemap.xml  nella cartella in cui c'è lo script stesso
    TUTTAVIA la cartella viene comunque creata e successivamente eliminata quindi è necessario avere abbastanza spazio

  • User Attivo

    @robyweb:
    è un problema di accenti ed apostrofi corretti, ` e ' sono diversi ed hanno funzioni diverse.


  • User Attivo

    @Nicola said:

    @robyweb:
    è un problema di accenti ed apostrofi corretti, ` e ' sono diversi ed hanno funzioni diverse.

    si scusa si vede che nel copia incolla ha combinato qualche casino


  • User Attivo

    Dopo alcuni test credo che questa possa considerarsi una versione abbastanza corretta e funzionale (prima erano presenti alcuni errori)

    
    
     #!/bin/bash
    
    #---INIZIO PARTE DA MODIFICARE
    
    site=**www.sito.it**
    #indirizzo del sito senza http://
    nodir=**/dir2,/dir2**
    #elenco delle directory da escludere , separate da una virgola
    accettati=**.html,.php,.asp** delle estensioni da prendere, separate da una virgola
    esclusi=**.css,.jpg,.gif,.txt** delle estensioni da NON prendere, separate da una virgola
    data=**2007-03-21**
    #data utlimo aggiornamento in questo formato YYYY-MM-DD
    freq=**weekly**
    #frequenza aggiornamento - valori possibili:
    #always,hourly,daily,weekly,monthly,yearly,never
    prio=**0.5**
    #priorita da 0.0 a 1.0
    
    #---FINE PARTE DA MODIFICARE
    
    wget -m -X $nodir  http://$site --accept $accettati --reject $esclusi
    
    cd $site
    
    echo '<?xml version="1.0" encoding="UTF-8"?>
    <urlset xmlns="http://www.google.com/schemas/sitemap/0.84">' >> ../sitemap.xml;
    
    arr=(`tree -i -f |grep [.html][.php]`)
    for (( I=0 ; I<${#arr
    * } ; I++ ))
            do
    echo "<url>
        <loc>http://$site${arr*:1}</loc>
        <lastmod>$data</lastmod>
        <changefreq>$freq</changefreq>
        <priority>$prio</priority>
    </url>" >> ../sitemap.xml
    done
    echo "</urlset>" >> ../sitemap.xml
    
    cd ..
    
    rm -rf $site 
    #questo comando elimina la cartella creata in cui viene scaricato il sito
    
    exit 0          
    
    
    ```le parti da personalizzare sono sempre quelle in neretto
    
    Questa versione dello script alla fine del processo elimina direttamente la cartella che viene creata per scaricare il sito, quindi, alla fine del processo ci trovaremo semplicemente un file nominato sitemap.xml nella cartella in cui c'è lo script stesso
    TUTTAVIA la cartella viene comunque creata e successivamente eliminata quindi è necessario avere abbastanza spazio
    
    tenete conto che lo script genera la prima pagina del sito  in versione con index
    ad esempio: 
    h-ttp://w-ww.nomedelsito.com/index.html
    
    quindi se non vi piace (come a me)modificatela ad esempio con h-ttp://w-ww.nomedelsito.com

  • User Newbie

    Ciao ho trovato questo script per linux che uso da pochi mesi, molto interessante solo che mi da questo problema una volta lanciato: sitemapfdb.sh: 30: Syntax error: "(" unexpected la riga nello script è questa: arr=(tree -i -f |grep [.html][.php][.htm]) come posso risolvere? grazie


  • User Newbie

    Edit:

    Inizia i messaggi con una maiuscola e termina con un punto.


  • User Newbie

    Anche a me da un errore alla linea 30!!!
    ./sitemap.sh: line 30: tree: command not found

    in pratica è la linea
    arr=(tree -i -f |grep [.html][.php][.asp])

    non so che fare!

    la sitemap viene generata ma solo fino a questo punto

    <?xml version="1.0" encoding="UTF-8"?>
    <urlset xmlns="hxxp://wxw.google.com/schemas/sitemap/0.84">
    </urlset>
    

  • User

    Edit:

    Inizia i messaggi con una maiuscola e termina con un punto.