ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)
Суббота, 14 декабря, 2024

Bash Script — Создание списка URL — адресов из карты сайта в WordPress

Bash Script - Создание карты сайта в WordPress

Иногда вам может понадобится список URL — адресов всех постов, страниц и категории вашего WordPress или WooCommerce сайта.

Bash Script — Создание списка URL — адресов из карты сайта в WordPress

Обновить все пакеты и установить пакет xml2 на Debian и Ubuntu

sudo apt update
sudo apt install wget xml2 -y

 

После установки основных инструментов, вы можете перейти к скрипту.

Основной скрайбер карты сайта

Этот скрипт обрабатывает ваш post-sitemap.xml и page-sitemap.xml

#!/usr/bin/env bash
# Purpose: WordPress URL sitemap scraper
# Author: AndreyEx
# Source: AndreyEx https://andreyex.ru

# Сайт для извлечения файлов
SITE=https://andreyex.ru

# Извлечение post-sitemap.xml
wget -q $SITE/post-sitemap.xml -O postsitemap.xml

#Разобрать xml файл и сохранить его в posts.txt
xml2 < postsitemap.xml | grep /url/loc= | sed 's/.*=//' > posts.txt

#Скачать страницу карты сайта
wget -q $SITE/page-sitemap.xml -O pagesitemap.xml

#разобрать xml сайт и сохранить его в pages.txt
xml2 < pagesitemap.xml | grep /url/loc= | sed 's/.*=//' > pages.txt

 

У вас появятся 2 файла: posts.txt и pages.txt.

Множественный Sitemaps

Если у вас есть несколько файлов карт сайта в формате post-sitemap1.xml, этот скрипт поможет извлечь все URL-адреса из каждого суб-файла.

Вы должны предоставить номера от 1..6

#!/usr/bin/env bash
# WordPress URL sitemap scraper for multiple post-sitemaps
# Author AndreyEx from AndreyEx https://andreyex.ru

# Сайт для извлечения файлов
SITE=https://andreyex.ru

# для нескольких файлов, в данном случае 6
for i in {1..6}
do
    wget -q $SITE/post-sitemap$i.xml -O postsitemap.xml
    #Парсинг xml файла из posts-$i.txt
    xml2 < postsitemap.xml | grep /url/loc= | sed 's/.*=//' > posts-$i.txt
done

 

Если вы хотите совместить (объединить) несколько файлов: posts-1.txt, posts-2.txt, posts-n.txt в allposts.txt, это можно сделать так

cat posts-*.txt > allposts.txt

 

Вы также можете использовать sed вместо того, чтобы объединить файлы в один

sed -n w"allposts.txt" posts-{1..6}.txt

 

Конвертировать все файлы Sitemap

Это соединит все карты сайта в текстовый файл, независимо от того, сколько у вас sitemaps есть.

#!/usr/bin/env bash
# Purpose: WordPress URL sitemap scraper
# Author: AndreyEx 
# Source: AndreyEx https:/andreyex.ru

# Сайт
SITEMAPBASE=https://andreyex.ru

# Имя главной карты сайта
SITEMAPXML=sitemap_index.xml

# Грабинг sitemap.xml
wget -q $SITEMAPBASE/$SITEMAPXML -O /tmp/sitemap.xml

# включение карты сайта в множество sub-sitemaps
SITEMAPARRAY=($(xml2 < /tmp/sitemap.xml | grep /sitemapindex/sitemap/loc= | sed 's#.*=##'))

# цикл по масиву, захватить sub-sitemap и превратить его в текстовый файл
for SITEMAPELEMENT in ${SITEMAPARRAY[@]}; do
    echo $SITEMAPELEMENT
    wget -q $SITEMAPELEMENT -O /tmp/tempsitemap.xml
    SITEMAPTXTNAME=$(echo $SITEMAPELEMENT | sed "s#$SITEMAPBASE/##" | sed "s#.xml##")
    echo $SITEMAPTXTNAME
    xml2 < /tmp/tempsitemap.xml | grep /url/loc= | sed 's/.*=//' > $SITEMAPTXTNAME.txt
done

 

Если вы хотите совместить (объединить) несколько файлов: posts-sitemap1.txt, posts-sitemap2.txt, postssitemap-n.txt в allposts.txt, это можно сделать так

cat post-sitemap*.txt > allposts.txt

 

Теперь у вас есть список постов, страниц, категорий из карты сайта.

Exit mobile version