Создайте URL-адрес для модуля , выполнив поиск следующим образом: "http://search.cpan.org/perldoc?Term::Size".
Получите URL-адрес с помощью LWP. Обратите внимание, что приведенный выше URL-адрес вернетсяответ HTTP перенаправления на РАЗЛИЧНЫЙ URL: http://search.cpan.org/~ferreira/Term-Size-0.207/Size.pm
- это ссылка на последнюю версию модуля.
ПРИМЕЧАНИЕ : эти шаги (#1- # 4) необходимы по двум причинам:
a. Постоянная ссылка основного выпуска (http://search.cpan.org/dist/Term-Size
) относится только к последней версии.
b. Гораздо более серьезная проблема заключается в том, что модуль может быть частью большего дистрибутива. Модули сами по себе не имеют дат выпуска - только релизы делают . Например, для "XML :: Parser :: Style :: Tree" это часть XML-Parser
дистрибутива и, следовательно, URL должен иметь префикс http://search.cpan.org/~msergeant/XML-Parser-2.36
, который вы не можете автоматически вычислить без шагов # 1- # 4.
Это критическое различие, к сожалению, не очевидно в вашем примере, потому что вы просто повезли ввыбор модуля, который разделяет свое имя с именем дистрибутива
Измените этот URL, заменив «последнюю» версию, которую вы автоматически получили из перенаправления (0.207), на свою собственную (скажем, 0.203).Вы получаете http://search.cpan.org/~ferreira/Term-Size-0.203/Size.pm
Измените этот URL, чтобы удалить специфичный для модуля суффикс, например, "Size.pm" - вы получите http://search.cpan.org/~ferreira/Term-Size-0.203/
, который является URL для выпуска этой версии.
Альтернативный подход состоит в том, чтобы получить URL-адрес релиза, фактически захватывая страницу модуля через WWW :: Mechanize, анализируя HTML-код HTML :: TreeParser или регулярное выражение и находя относительную ссылку на выпуск в фрагменте HTML-кода.выглядит вот так - это ВТОРАЯ a href
ссылка в элементе DIV
с id=premalink
:
<a name="_top"></a>
<div class=path>
<div id=permalink class="noprint"><a href="/perldoc?Term::Size">permalink</a>
</div>
<a href="/~ferreira/">Adriano Ferreira</a> >
<a href="/~ferreira/Term-Size-0.203/">Term-Size-0.203</a> >
Term::Size
</div>
Теперь у вас есть URL-адрес страницы релиза для ВАШЕЙ версии (http://search.cpan.org/~ferreira/Term-Size-0.203/
)
Извлеките страницу выпуска правильной версии с помощью WWW :: Mechanize и выполните синтаксический анализ с помощью HTML :: TreeParser или любого другого любимого модуля HTML-анализатора, либо gasp регулярное выражениеТо, что вы ищете, представляет собой набор HTML, который выглядит следующим образом:
<table>
<tr>
<td class=label>This Release</td>
<td class=cell>Term-Size-0.203</td>
<td><small> [<a href="/CPAN/authors/id/F/FE/FERREIRA/Term-Size-0.203.tar.gz">Download</a>]
[<a href="/src/FERREIRA/Term-Size-0.203/">Browse</a>] </small></td>
<td><small>21 May 2006</small>
</td>
</tr>
Из этого HTML совершенно очевидно, что вам нужно извлечь содержимое четвертого элемента <td>
из строки <tr>
, первая ячейка которойсодержит слово «This Release».
Снимите с него теги <small>
и вы получите дату выпуска.