- Home
- Categorie
- La Community Connect.gt
- Tutto sulla Community
- [howto] creare sitemap con linux
-
Per le prove fatte finora la procedura sembra funzionare bene ...
-
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
-
grande ... così è sicuramente meglio
grazie
-
Se ci saranno aggiornamenti o modifiche posta pure il post qui che aggiorno il primo e pulisco il thread da post come il mio
-
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 ...
-
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
-
@robyweb:
è un problema di accenti ed apostrofi corretti, ` e ' sono diversi ed hanno funzioni diverse.
-
@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
-
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
-
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
-
Edit:
Inizia i messaggi con una maiuscola e termina con un punto.
-
Anche a me da un errore alla linea 30!!!
./sitemap.sh: line 30: tree: command not foundin 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>
-
Edit:
Inizia i messaggi con una maiuscola e termina con un punto.
-
cosa vuol dire
Inizia i messaggi con una maiuscola e termina con un punto.???
-
@enricogalli said:
Anche a me da un errore alla linea 30!!!
./sitemap.sh: line 30: tree: command not found
[..]
non so che fare!Ciao enricogalli, devi installare "tree", un piccolo programma di circa 30KB che serve per elencare i file della directory (che in questo caso sono le pagine del sito su cui generare la sitemap) in formato ad albero.