Истории-страшилки про Perl-программиста, с подсказками и разоблачениями
Программисту понадобилась классификация слов и понятий,
и он решил использовать Википедию как источник категорий.
Разбирать ответ API Википедии предполагалось вот такой функцией:
use XML::LibXML::XPathContext ;
use XML::LibXML ;
=head2 parse_wikipedia_categories_xml
Получает на вход скаляр -- xml, полученный из API Википедии
Пример:
http://en.wikipedia.org/w/api.php?action=query&prop=categories&titles=XML&format=xml&cllimit=100
<?xml version="1.0"?>
<api>
<query>
<pages>
<page pageid="34138" ns="0" title="XML">
<categories>
<cl ns="14" title="Category:All articles containing potentially dated statements" />
<cl ns="14" title="Category:Application layer protocols" />
<cl ns="14" title="Category:Articles containing potentially dated statements from 2009" />
...
</categories>
</page>
</pages>
</query>
</api>
Результат был бы
[
'Category:All articles containing potentially dated statements',
'Category:Application layer protocols',
'Category:Articles containing potentially dated statements from 2009',
...
]
=cut
sub parse_wikipedia_categories_xml
{
my $xml = shift ;
my $xml_doc = XML::LibXML -> new () -> parse_string ( $doc );
my $xc = XML::LibXML::XPathContext -> new ( $xml_doc );
return [ map { $_ -> to_literal } @ { $xc -> find ( "/api/query/pages/page/categories/cl/@title" )}];
}
Но что-то здесь не так…
Что?