Re[3]: Простой генератор sitemap под винду
От: Somescout  
Дата: 14.12.19 11:43
Оценка: 24 (2)
Здравствуйте, Евгений Музыченко, Вы писали:

param(
    [string]
    $RootURL = "/",
    [Parameter(Mandatory=$true)]
    [string]
    $Path,
    [string[]]
    $AllowedExtensions,
    [string]
    $OutFile
)

$result = @(
    '<?xml version="1.0" encoding="UTF-8"?>',
    '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">')

$result += Get-ChildItem -LiteralPath $Path -Recurse | % { 
    if ($AllowedExtensions -and $_.Extension -notin $AllowedExtensions) {
        return
    }

    $localPath = (($_.FullName.Substring($Path.Length+1) -split '\\') | % { [System.Web.HttpUtility]::UrlEncode($_) }) -join "/"

    "`t<url>"
    "`t`t<loc>$RootURL$localPath</loc>"
    "`t`t<lastmod>{0:s}Z</lastmod>" -f $_.LastWriteTimeUTC
    "`t</url>"
}

$result += "</urlset>"

if ($OutFile) { 
    $Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False
    [System.IO.File]::WriteAllLines($OutFile, $Result, $Utf8NoBomEncoding)
} else {
    return $result
}


Сохранить в Generate-Sitemap.ps1 и использовать примерно так:
<path-to-script>\Generate-SiteMap -Path <путь к корню сайта> -RootURL "http://example.com/" -AllowedExtensions '.png', '.jpg', '.pdf' -OutFile sitemap.xml

Слэш в конце RootURL обязателен
AllowedExtesions можно не указвать - тогда будут обработаны все файлы

Перед первым запуском возможно из под админа потребуется выполнить команду:

Set-ExecutionPolicy RemoteSigned

По умолчанию в powershell запрещено выполнение любых скриптов, это переключает защиту в режим проверки подписи для скриптов запускаемых из внешнего источника
ARI ARI ARI... Arrivederci!
Re[9]: Простой генератор sitemap под винду
От: Somescout  
Дата: 17.01.20 19:46
Оценка: 4 (1)
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Здравствуйте, Somescout, Вы писали:


S>>Странно, можете привести командную строку?


ЕМ>Generate-Sitemap.ps1 -Path "C:\Tmp\sitemap\vac" -RootURL "https://vac.muzychenko.net/" -OutFile sitemap.xml


ЕМ>Самому странно. Глянул пару страниц с доками на PS — вроде все правильно.


1) Добавьте после params(...) (перед $result = @):
[System.Reflection.Assembly]::LoadWithPartialName("System.Web") | Out-Null


2) Скрипт находится в текущем каталоге? Если да, попробуйте .\Generate-Sitemap.ps1
ARI ARI ARI... Arrivederci!
Re[10]: Простой генератор sitemap под винду
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 17.01.20 19:59
Оценка: +1
Здравствуйте, Somescout, Вы писали:

S>1) Добавьте после params(...) (перед $result = @):

S>
[System.Reflection.Assembly]::LoadWithPartialName("System.Web") | Out-Null


Добавил, ничего не изменилось.

S>2) Скрипт находится в текущем каталоге?


Пока только так и запускал.

S>Если да, попробуйте .\Generate-Sitemap.ps1


Попробовал — тоже никакой разницы.

В любом случае спасибо, я все равно собирался хотя бы в общих чертах разобраться с PS, хоть он мне на вид нравится еще меньше, чем убогий "язык" cmd.exe. Тот хоть исторически убог, а вот зачем они с нуля наворотили такой ужасный синтаксис...
Re[12]: Простой генератор sitemap под винду
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 19.01.20 14:22
Оценка: +1
Здравствуйте, Somescout, Вы писали:

S>Честно говоря у меня нет идей — за несколько лет ежедневной работы с PS с такой проблемой не встречался.


Я посмотрел свойства процесса, и обнаружил, что ни FAR, из которого запускаю, ни cmd.exe не передают ему командную строку — только имя файла. У меня вообще команда Open для типа .ps1 изначально был связан с NotePad — уж не знаю, как оно так связалось. Я ее связал с powershell.exe через стандартный гуйный File Type Associations — оно прописало в Command/Open 'powershell.exe "%1"'. Добавление "%*" к этой строке эффекта не дает — более того, я испортил имя файла во всех вхождениях Command/Open и Command/0, найденных в HKLM\Software\Classes, а powershell.exe продолжает автоматически запускаться на .ps1. Явно где-то что-то кэшируется, надо попробовать перелогиниваться/перегружаться.

S>А что именно не нравится в синтаксисе?


Имена переменных, начинающиеся с доллара, типы в квадратных скобках, операторы "-eq" и т.п. вместо нормальных знаков сравнения, и еще до фига чего. Я понимаю, что драли с нечеловеческого башевского недоязыка, но тогда уж и драли бы один-в-один, для совместимости. А свое собственное могли бы сделать и поизящнее.

P.S. Забыл добавить, что пытался запускать и через

powershell.exe -File xxx -Path yyy

В этом случае жалуется, что ей неизвестен параметр "Path". То есть, явно где-то съедается префиксное тире.

И проверил в виртуалке с Win7 — там .ps1 так же был по умолчанию связан с NotePad.

Какие после всего этого могут быть доводы против того, что это поделие убого?

P.P.S. В виртуалке версия 1.0 по вышеприведенной командной строке с -File нормально передает параметры, а на хосте версия 5.1 съедает тире. Ужас.
Отредактировано 19.01.2020 15:19 Евгений Музыченко . Предыдущая версия . Еще …
Отредактировано 19.01.2020 14:42 Евгений Музыченко . Предыдущая версия .
Простой генератор sitemap под винду
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 05.12.19 19:08
Оценка:
Посоветуйте, пожалуйста, простой оффлайновый генератор XML-sitemap под Win32, желательно командно-строковый (консольный). Чтобы тупо обходил дерево локальных каталогов, начиная с заданного корня, и строил список с датой изменения каждого файла.

Попробовал Open Sitemap Generator — он зачем-то проявляет избыточный интеллект, пытаясь строить список по URL, причем обходя его по ссылкам, и из-за кривой реализации теряет часть файлов. Добывать даты изменения файлов не умеет — ставит только явно заданные.

Еще попробовал Smart Offline Sitemap Generator — он умеет обходить локальное дерево, но дату изменения почему-то ставит тоже только явно заданную, вместо того, чтобы брать ее из атрибутов файла.

Или это так принято — помечать все файлы на сайте, как только что обновленные, чтобы обмануть поисковики?
sitemap generator offline windows win32
Re: Простой генератор sitemap под винду
От: Somescout  
Дата: 13.12.19 16:35
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Посоветуйте, пожалуйста, простой оффлайновый генератор XML-sitemap под Win32, желательно командно-строковый (консольный). Чтобы тупо обходил дерево локальных каталогов, начиная с заданного корня, и строил список с датой изменения каждого файла.


ЕМ>Попробовал Open Sitemap Generator — он зачем-то проявляет избыточный интеллект, пытаясь строить список по URL, причем обходя его по ссылкам, и из-за кривой реализации теряет часть файлов. Добывать даты изменения файлов не умеет — ставит только явно заданные.


ЕМ>Еще попробовал Smart Offline Sitemap Generator — он умеет обходить локальное дерево, но дату изменения почему-то ставит тоже только явно заданную, вместо того, чтобы брать ее из атрибутов файла.


ЕМ>Или это так принято — помечать все файлы на сайте, как только что обновленные, чтобы обмануть поисковики?


А не проще ли на том же powershell накидать скрипт? Это минут 10 займёт (если нужен просто xml по файлам с заданной структурой).

Есть вот такой пример (https://www.johndcook.com/blog/2008/05/27/powershell-script-to-make-an-xml-sitemap/) он примитивный и работает без рекурсии, но переделать его на рекурсивный обход особой проблемы не составляет.
ARI ARI ARI... Arrivederci!
Re[2]: Простой генератор sitemap под винду
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 14.12.19 10:54
Оценка:
Здравствуйте, Somescout, Вы писали:

S>А не проще ли на том же powershell накидать скрипт? Это минут 10 займёт (если нужен просто xml по файлам с заданной структурой).


Минут 10 это займет лишь в том случае, когда такие вещи делаешь регулярно, и помнишь все необходимые мелочи. Мне казалось, столь типовые вещи должны быть в готовом виде.
Re[3]: Простой генератор sitemap под винду
От: Somescout  
Дата: 14.12.19 11:16
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

S>>А не проще ли на том же powershell накидать скрипт? Это минут 10 займёт (если нужен просто xml по файлам с заданной структурой).


ЕМ>Минут 10 это займет лишь в том случае, когда такие вещи делаешь регулярно, и помнишь все необходимые мелочи.


Если вас устраивает простой xml (как приведённый по ссылке) — то давайте сделаю скрипт.

ЕМ>Мне казалось, столь типовые вещи должны быть в готовом виде.


А насколько эта вещь вообще нужна для статичных сайтов, ведь поисковик может просто запросить HEAD чтобы узнать об изменении файла. А для динамических сайтов sitemap так просто не построишь.
ARI ARI ARI... Arrivederci!
Re[4]: Простой генератор sitemap под винду
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 14.12.19 11:39
Оценка:
Здравствуйте, Somescout, Вы писали:

S>Если вас устраивает простой xml (как приведённый по ссылке) — то давайте сделаю скрипт.


Спасибо, буду благодарен. Нужен именно простой XML с именами файлов и временами последнего изменения. Подправить по мелочи смогу, но на PS я до сих ничего не писал, всегда обходился скриптами cmd.exe (до недавних времен приходилось гонять и на XP).

S>А насколько эта вещь вообще нужна для статичных сайтов, ведь поисковик может просто запросить HEAD чтобы узнать об изменении файла.


Иногда добавляю/убираю файлы, перемещаю между каталогами и т.п. Если гуглу не важно время, указанное в sitemap, то можно и его руками править. Но в своих инструкциях гугл предлагает перезаливать sitemap при изменениях на сайте — не знаю, насколько это реально помогает.
Re[4]: Простой генератор sitemap под винду
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 16.01.20 22:06
Оценка:
Здравствуйте, Somescout, Вы писали:

S>Сохранить в Generate-Sitemap.ps1 и использовать примерно так:


Спасибо! Только сейчас дошли руки попробовать — PS 1.0 в моей Win7 ругается на оператор "-notin". Попытался поставить PS 3.0 отсюда — и KB2506143, и KB2506146 утверждают, что они not applicable to your computer.

Как его обновить до 3.0 в семерке?
Re[5]: Простой генератор sitemap под винду
От: Ops Россия  
Дата: 16.01.20 22:29
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Спасибо! Только сейчас дошли руки попробовать — PS 1.0 в моей Win7 ругается на оператор "-notin". Попытался поставить PS 3.0 отсюда — и KB2506143, и KB2506146 утверждают, что они not applicable to your computer.


ЕМ>Как его обновить до 3.0 в семерке?


Он вообще-то давно 5-й, и есть PS Core, который 6 вот-вот 7-й выйдет.

https://docs.microsoft.com/ru-ru/powershell/scripting/install/installing-windows-powershell
https://docs.microsoft.com/ru-ru/powershell/scripting/install/installing-powershell-core-on-windows
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[5]: Простой генератор sitemap под винду
От: Somescout  
Дата: 16.01.20 23:26
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Здравствуйте, Somescout, Вы писали:


S>>Сохранить в Generate-Sitemap.ps1 и использовать примерно так:


ЕМ>Спасибо! Только сейчас дошли руки попробовать — PS 1.0 в моей Win7 ругается на оператор "-notin". Попытался поставить PS 3.0 отсюда — и KB2506143, и KB2506146 утверждают, что они not applicable to your computer.


ЕМ>Как его обновить до 3.0 в семерке?


С этой страницы (прямая ссылка)
ARI ARI ARI... Arrivederci!
Re[6]: Простой генератор sitemap под винду
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 17.01.20 11:54
Оценка:
Здравствуйте, Somescout, Вы писали:

S>С этой страницы (прямая ссылка)


Спасибо. В виртуалке они почему-то не ставятся, но на хосте встали и 3.0, и 5.1. Но оба почему-то требуют ввести Path:

cmdlet Generate-Sitemap.ps1 at command pipeline position 1
Supply values for the following parameters:
Path:


Хотя он явно задан в командной строке. Если ввожу путь на этот запрос, то высыпает неимоверное количество различных ошибок и, похоже, при этом зацикливается.

Пойду изучать PowerShell.

Кстати, мне одному он кажется уродливым?
Re[7]: Простой генератор sitemap под винду
От: Somescout  
Дата: 17.01.20 18:01
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Хотя он явно задан в командной строке. Если ввожу путь на этот запрос, то высыпает неимоверное количество различных ошибок и, похоже, при этом зацикливается.


ЕМ>Пойду изучать PowerShell.


Странно, можете привести командную строку?
ARI ARI ARI... Arrivederci!
Re[8]: Простой генератор sitemap под винду
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 17.01.20 18:14
Оценка:
Здравствуйте, Somescout, Вы писали:

S>Странно, можете привести командную строку?


Generate-Sitemap.ps1 -Path "C:\Tmp\sitemap\vac" -RootURL "https://vac.muzychenko.net/" -OutFile sitemap.xml

Самому странно. Глянул пару страниц с доками на PS — вроде все правильно.
Re[11]: Простой генератор sitemap под винду
От: Somescout  
Дата: 19.01.20 03:13
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Пока только так и запускал.


ЕМ>Попробовал — тоже никакой разницы.


Честно говоря у меня нет идей — за несколько лет ежедневной работы с PS с такой проблемой не встречался. Если совсем ничего не выйдет, могу глянуть через тимвьювер.

ЕМ>В любом случае спасибо, я все равно собирался хотя бы в общих чертах разобраться с PS, хоть он мне на вид нравится еще меньше, чем убогий "язык" cmd.exe. Тот хоть исторически убог, а вот зачем они с нуля наворотили такой ужасный синтаксис...


А что именно не нравится в синтаксисе? Именно с синтаксисом там всё достаточно логично сделали.
ARI ARI ARI... Arrivederci!
Re[12]: Простой генератор sitemap под винду
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 20.01.20 09:41
Оценка:
Здравствуйте, Somescout, Вы писали:

S>Честно говоря у меня нет идей


Все, победил — проблема действительно была в виндовых настройках типов/протоколов, которые еще частично закэшированы, отчего не сразу меняются при перенастройке без повторного входа в учетку.

Скрипт работает, еще раз спасибо. Еще чуть подправлю, чтобы не собирал служебные файлы FrontPage, и буду использовать.
Re[4]: Простой генератор sitemap под винду
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 06.07.20 21:40
Оценка:
Здравствуйте, Somescout, Вы писали:

Спасибо, воспользовался твоим скриптом. С п.1 из этого
Автор: Somescout
Дата: 17.01.20
дополнения завелся в 10ке без каких-либо приседаний.

Единственно, параметр -Path <путь к корню сайта> не заработал с относительным путем, но я не стал разбираться, с абсолютным заработало, да и пока и ладно. Будет время, глянь

Да, еще. Расширение .PS1 вроде как у меня не ассоциировано с исполняемыми файлами, поэтому запускаю как [tt]powershell <всё остальное как сказано>[tt].
Запускаю из батника. Без указания powershell'а скрипт открывался в блокноте
Маньяк Робокряк колесит по городу
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.