如何从Perl中的MediaWiki :: API中提取重定向标题列表?

时间:2017-08-11 14:36:50

标签: perl mediawiki-api hash-of-hashes

我尝试使用MediaWiki API来获取某个维基百科标题的所有重定向,我想我几乎就在那里,但我迷失在哈希和数组的复杂数据结构中。

如何提取重定向标题列表?

在我查询' Japan'的示例中并且应该得到一个如下所示的列表:

'JPN',"Land der aufgehenden Sonne","Das Land der aufgehenden 
Sonne","Zipango","\x{65e5}\x{672c}","R\x{ec}b\x{11b}n"

(一个附带问题:为什么我不能在所有情况下获得UTF-8字符串?)

以下代码改编自MediaWiki::API文档。

use MediaWiki::API;
use warnings;
binmode STDOUT, ':utf8';
use JSON;
use Data::Dumper;

my $LANG="de";

my $mw = MediaWiki::API->new( { api_url => 'https://en.wikipedia.org/w/api.php' }  );
my $mw_LANG = MediaWiki::API->new( { api_url => "https://$LANG.wikipedia.org/w/api.php" }  );

my $wikititle ="Japan";

my $alltitles = $mw_LANG->api( {
 action => 'query',
 titles => $wikititle,
 prop => 'redirects',
 format => 'json',
} )
|| die $mw_LANG->{error}->{code} . ': ' . $mw_LANG->{error}->{details};

#just print to know how the structure looks like
print Dumper($alltitles);

my ($pageid,$langlinks) = each ( %{ $alltitles->{query}->{pages} } );
print "pageid $pageid\n";#yes works:  this prints the page id

问题:如何获取redirect-array中的实际标题?

  my $relinks = $alltitles->{'query'}->{'pages'}->{$pageid}->{'redirects'}; #no does not work!

  foreach my $el ( @{ $relinks->{'title'} } ) {
    print " $el $el->{'*'}\n";
  }

0 个答案:

没有答案