Посоветуйте, пожалуйста, простой оффлайновый генератор XML-sitemap под Win32, желательно командно-строковый (консольный). Чтобы тупо обходил дерево локальных каталогов, начиная с заданного корня, и строил список с датой изменения каждого файла.
Попробовал Open Sitemap Generator — он зачем-то проявляет избыточный интеллект, пытаясь строить список по URL, причем обходя его по ссылкам, и из-за кривой реализации теряет часть файлов. Добывать даты изменения файлов не умеет — ставит только явно заданные.
Еще попробовал Smart Offline Sitemap Generator — он умеет обходить локальное дерево, но дату изменения почему-то ставит тоже только явно заданную, вместо того, чтобы брать ее из атрибутов файла.
Или это так принято — помечать все файлы на сайте, как только что обновленные, чтобы обмануть поисковики?
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Посоветуйте, пожалуйста, простой оффлайновый генератор XML-sitemap под Win32, желательно командно-строковый (консольный). Чтобы тупо обходил дерево локальных каталогов, начиная с заданного корня, и строил список с датой изменения каждого файла.
ЕМ>Попробовал Open Sitemap Generator — он зачем-то проявляет избыточный интеллект, пытаясь строить список по URL, причем обходя его по ссылкам, и из-за кривой реализации теряет часть файлов. Добывать даты изменения файлов не умеет — ставит только явно заданные.
ЕМ>Еще попробовал Smart Offline Sitemap Generator — он умеет обходить локальное дерево, но дату изменения почему-то ставит тоже только явно заданную, вместо того, чтобы брать ее из атрибутов файла.
ЕМ>Или это так принято — помечать все файлы на сайте, как только что обновленные, чтобы обмануть поисковики?
А не проще ли на том же powershell накидать скрипт? Это минут 10 займёт (если нужен просто xml по файлам с заданной структурой).
Здравствуйте, Somescout, Вы писали:
S>А не проще ли на том же powershell накидать скрипт? Это минут 10 займёт (если нужен просто xml по файлам с заданной структурой).
Минут 10 это займет лишь в том случае, когда такие вещи делаешь регулярно, и помнишь все необходимые мелочи. Мне казалось, столь типовые вещи должны быть в готовом виде.
Здравствуйте, Евгений Музыченко, Вы писали:
S>>А не проще ли на том же powershell накидать скрипт? Это минут 10 займёт (если нужен просто xml по файлам с заданной структурой).
ЕМ>Минут 10 это займет лишь в том случае, когда такие вещи делаешь регулярно, и помнишь все необходимые мелочи.
Если вас устраивает простой xml (как приведённый по ссылке) — то давайте сделаю скрипт.
ЕМ>Мне казалось, столь типовые вещи должны быть в готовом виде.
А насколько эта вещь вообще нужна для статичных сайтов, ведь поисковик может просто запросить HEAD чтобы узнать об изменении файла. А для динамических сайтов sitemap так просто не построишь.
Здравствуйте, Somescout, Вы писали:
S>Если вас устраивает простой xml (как приведённый по ссылке) — то давайте сделаю скрипт.
Спасибо, буду благодарен. Нужен именно простой XML с именами файлов и временами последнего изменения. Подправить по мелочи смогу, но на PS я до сих ничего не писал, всегда обходился скриптами cmd.exe (до недавних времен приходилось гонять и на XP).
S>А насколько эта вещь вообще нужна для статичных сайтов, ведь поисковик может просто запросить HEAD чтобы узнать об изменении файла.
Иногда добавляю/убираю файлы, перемещаю между каталогами и т.п. Если гуглу не важно время, указанное в sitemap, то можно и его руками править. Но в своих инструкциях гугл предлагает перезаливать sitemap при изменениях на сайте — не знаю, насколько это реально помогает.
Сохранить в 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 запрещено выполнение любых скриптов, это переключает защиту в режим проверки подписи для скриптов запускаемых из внешнего источника
Здравствуйте, Somescout, Вы писали:
S>Сохранить в Generate-Sitemap.ps1 и использовать примерно так:
Спасибо! Только сейчас дошли руки попробовать — PS 1.0 в моей Win7 ругается на оператор "-notin". Попытался поставить PS 3.0 отсюда — и KB2506143, и KB2506146 утверждают, что они not applicable to your computer.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Спасибо! Только сейчас дошли руки попробовать — PS 1.0 в моей Win7 ругается на оператор "-notin". Попытался поставить PS 3.0 отсюда — и KB2506143, и KB2506146 утверждают, что они not applicable to your computer.
ЕМ>Как его обновить до 3.0 в семерке?
Он вообще-то давно 5-й, и есть PS Core, который 6 вот-вот 7-й выйдет.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Здравствуйте, Somescout, Вы писали:
S>>Сохранить в Generate-Sitemap.ps1 и использовать примерно так:
ЕМ>Спасибо! Только сейчас дошли руки попробовать — PS 1.0 в моей Win7 ругается на оператор "-notin". Попытался поставить PS 3.0 отсюда — и KB2506143, и KB2506146 утверждают, что они not applicable to your computer.
ЕМ>Как его обновить до 3.0 в семерке?
Здравствуйте, Somescout, Вы писали:
S>С этой страницы (прямая ссылка)
Спасибо. В виртуалке они почему-то не ставятся, но на хосте встали и 3.0, и 5.1. Но оба почему-то требуют ввести Path:
cmdlet Generate-Sitemap.ps1 at command pipeline position 1
Supply values for the following parameters:
Path:
Хотя он явно задан в командной строке. Если ввожу путь на этот запрос, то высыпает неимоверное количество различных ошибок и, похоже, при этом зацикливается.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Хотя он явно задан в командной строке. Если ввожу путь на этот запрос, то высыпает неимоверное количество различных ошибок и, похоже, при этом зацикливается.
ЕМ>Пойду изучать PowerShell.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Здравствуйте, Somescout, Вы писали:
S>>Странно, можете привести командную строку?
ЕМ>Generate-Sitemap.ps1 -Path "C:\Tmp\sitemap\vac" -RootURL "https://vac.muzychenko.net/" -OutFile sitemap.xml
ЕМ>Самому странно. Глянул пару страниц с доками на PS — вроде все правильно.
1) Добавьте после params(...) (перед $result = @):
Добавил, ничего не изменилось.
S>2) Скрипт находится в текущем каталоге?
Пока только так и запускал.
S>Если да, попробуйте .\Generate-Sitemap.ps1
Попробовал — тоже никакой разницы.
В любом случае спасибо, я все равно собирался хотя бы в общих чертах разобраться с PS, хоть он мне на вид нравится еще меньше, чем убогий "язык" cmd.exe. Тот хоть исторически убог, а вот зачем они с нуля наворотили такой ужасный синтаксис...
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Пока только так и запускал.
ЕМ>Попробовал — тоже никакой разницы.
Честно говоря у меня нет идей — за несколько лет ежедневной работы с PS с такой проблемой не встречался. Если совсем ничего не выйдет, могу глянуть через тимвьювер.
ЕМ>В любом случае спасибо, я все равно собирался хотя бы в общих чертах разобраться с PS, хоть он мне на вид нравится еще меньше, чем убогий "язык" cmd.exe. Тот хоть исторически убог, а вот зачем они с нуля наворотили такой ужасный синтаксис...
А что именно не нравится в синтаксисе? Именно с синтаксисом там всё достаточно логично сделали.
Здравствуйте, 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 съедает тире. Ужас.
Здравствуйте, Somescout, Вы писали:
S>Честно говоря у меня нет идей
Все, победил — проблема действительно была в виндовых настройках типов/протоколов, которые еще частично закэшированы, отчего не сразу меняются при перенастройке без повторного входа в учетку.
Скрипт работает, еще раз спасибо. Еще чуть подправлю, чтобы не собирал служебные файлы FrontPage, и буду использовать.
дополнения завелся в 10ке без каких-либо приседаний.
Единственно, параметр -Path <путь к корню сайта> не заработал с относительным путем, но я не стал разбираться, с абсолютным заработало, да и пока и ладно. Будет время, глянь
Да, еще. Расширение .PS1 вроде как у меня не ассоциировано с исполняемыми файлами, поэтому запускаю как [tt]powershell <всё остальное как сказано>[tt].
Запускаю из батника. Без указания powershell'а скрипт открывался в блокноте