Linux cкрипт для генерации карты сайта в xml формате

Основные возможности:

  • Автоматическая подстановка даты последней модификации файла;
  • Подстановка периодичности обновления и приоритета для каждого файла согласно таблицы или по умолчанию.

Описание:

Cкрипт sitemap.sh разработан для автоматизации процесса генерации карты сайта в xml формате.

  • Данный скрипт помогает создавать и обновлять карту сайта.
  • Запуск скрипта осуществляется в ручном режиме.
  • Может быть расположен как на сайте ( требуется ssh доступ), так и на локальном зеркале сайта ( с последующим копированием сгенерированной карты на сайт).

Пример cкрипта sitemap.sh для автоматизации генерации карты сайта в xml формате

(Скачать файл можно будет здесь. ЗЫ Не тыкать! Жать правой кнопкой: сохранить ссылку как…)

Условия:

  • Скрипт и файлы sitemap_s.xml, sitemap_b.xml, files.txt расположены либо в корневом каталоге локального зеркала сайта на Linux хосте, или у хостера с наличием ssh доступа.

    При размещении скрипта на сайте у хостера, необходимо позаботиться о расположении скрипта (например расположить в домашний каталог, Но не в корень сайта.) и раскоментировать в скрипте переход в корневой каталог сайта перед получением списка файлов #cd ~myhome/mywwwroot и заменить относительный пути к файлам sitemap_s.xml, sitemap_b.xml, files.txt на полные (~myhome/sitemap_s.xml и т.д.)

  • Предположим, что сайт состоит из нескольких html файлов в корневом каталоге (задан строковым параметром Base) , несколько файлов html в каталоге первого (задан строковым параметром BaseS) и второго уровня и т.д (задан строковым параметром BS). Максимальный уровень сканируемого каталога задан числовым параметром HeightBS.

  • Если имеются html файлы, которые необходимо скрыть от скрипта, положим, что их имена начинаются со знака «_» (подчеркивание), в скрипте учтено как [!_] при получении списка файлов.

  • Приоритеты и периодичность изменения конкретных файлов записана в таблицу files.txt (Имя файла таблицы задано строковым параметром Fname). Файлы отсутствующие в таблице примут параметры по умолчанию: Frequ и Prior.

Текст:

#!/bin/sh
Base='http:\/\/my.host.ru\/'
BaseS='docs/'
BS='*/'
HeightBS=2
i=1
#cd ~myhome/mywwwroot
Files=`ls [!_]*.html`
Files=$Files' '`ls $BaseS[!_]*.html`
while [ $i -le $HeightBS ]
do
    BaseS=$BaseS$BS
    Files=$Files' '`ls $BaseS[!_]*.html`
    i=`expr $i + 1`
done
 
Fname='files.txt'
#Fname='~myhome/files.txt'
Fsitemap_s='sitemap_s.xml'
#Fsitemap_s='~myhome/sitemap_s.xml'
Fsitemap_ss='sitemap.xml'
Frequ='monthly'
Prior='0.2'
 
function sitemap() {
#Параметры:
#$1 - Files
#$2 - Fname
#$3 - Fsitemap_s
#$4 - Fsitemap_ss
#$5 - Frequ
#$6 - Prior
 
	Freqn=`grep ^$1 $2 | awk {'print $2'}`
	if [ "$Freqn" = "" ]; then
	    Freqn=$5
	fi
	Freq='s/FREQ/'$Freqn'/'
	Prion=`grep ^$1 $2 | awk {'print $3'}`
	if [ "$Prion" = "" ]; then
	    Prion=$6
	fi
        Prio='s/PRIO/'$Prion'/'
	sedURL=`echo $1 | sed 's/\//\\\ /g' | sed 's/ /\//g'`
	Urlf='s/URL/'$Base$sedURL'/'
	LDate='s/DATA/'`ls -l $1 --time-style='+%Y-%m-%d' | awk {'print $6'}`'/'
	sed -e $Urlf -e $LDate -e $Freq -e $Prio $3 >> $4
 
}
 
cat sitemap_b.xml > $Fsitemap_ss
#cat ~myhome/sitemap_b.xml > $Fsitemap_ss
for Url in $Files
do
	sitemap $Url $Fname $Fsitemap_s $Fsitemap_ss $Frequ $Prior
done
echo "</urlset>" >> $Fsitemap_ss
 
exit

Пример файла files.txt:

Позволяет указать конкретные параметры приоритета и периодичности изменения.Синтаксис: ИмяФайла Периодичность Приоритет

Текст:

index.html weekly 0.8
docs/prod1/item1/index.html weekly 0.4
docs/prod1/item2/index.html weekly 0.4
docs/prod2/item1/index.html weekly 0.4
docs/prod2/item2/index.html weekly 0.4
docs/prod1/index.html weekly 0.6
docs/prod2/index.html weekly 0.6

Пример файлов sitemap_s.xml и sitemap_b.xml:

Текст:

sitemap_b.xml

	<?xml version="1.0" encoding="utf-8"?>
	<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

sitemap_s.xml

	<url>
	<loc>URL</loc>
	<lastmod>DATA</lastmod>
	<changefreq>FREQ</changefreq>
	<priority>PRIO</priority>
	</url>

Результат выполнения скрипта:

Текст:

sitemap.xml

	<?xml version="1.0" encoding="utf-8"?>
	<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
	<url>
	<loc>http://my.host.ru/index.html</loc>
	<lastmod>2008-06-18</lastmod>
	<changefreq>weekly</changefreq>
	<priority>0.8</priority>
	</url>
	<url>
	<loc>http://my.host.ru/docs/prod1/item1/index.html</loc>
	<lastmod>2008-06-18</lastmod>
	<changefreq>weekly</changefreq>
	<priority>0.4</priority>
	</url>
	<url>
	<loc>http://my.host.ru/docs/prod1/item2/index.html</loc>
	<lastmod>2008-06-20</lastmod>
	<changefreq>weekly</changefreq>
	<priority>0.4</priority>
	</url>
	<url>
	<loc>http://my.host.ru/docs/prod2/item1/index.html</loc>
	<lastmod>2008-06-20</lastmod>
	<changefreq>weekly</changefreq>
	<priority>0.4</priority>
	</url>
	<url>
	<loc>http://my.host.ru/docs/prod2/item2/index.html</loc>
	<lastmod>2008-06-20</lastmod>
	<changefreq>weekly</changefreq>
	<priority>0.4</priority>
	</url>
	<url>
	<loc>http://my.host.ru/docs/prod1/index.html</loc>
	<lastmod>2008-06-20</lastmod>
	<changefreq>weekly</changefreq>
	<priority>0.6</priority>
	</url>
	<url>
	<loc>http://my.host.ru/docs/prod2/index.html</loc>
	<lastmod>2008-06-20</lastmod>
	<changefreq>weekly</changefreq>
	<priority>0.6</priority>
	</url>
	</urlset>

Комментарии закрыты.