【问题标题】:get https link for mediawiki link using mediawiki api使用 mediawiki api 获取 mediawiki 链接的 https 链接
【发布时间】:2012-12-10 22:33:42
【问题描述】:

我正在尝试处理用户输入,例如

  • wikt:foo
  • 酒吧#hi there

获取输入的https链接,如

我正在尝试以最少手动、最干净的方式来执行此操作,因此我可以将我的脚本上传到某个地方并展示给人们,而不会因为它的低质量而感到羞耻。这意味着:

  • 如果我获得的是 http 链接而不是 https,我宁愿不硬编码 s/^http/^https/ 替换。
  • 如果我得到一个不完整的链接,我宁愿不使用正则表达式来添加缺失的东西。

到目前为止,我找到了两个解决方案,但每个都有缺陷。

解析查询

使用 canonicalurl magic word 在 {{canonicalurl:user_input_here}} 上运行解析查询。但是它只提供 http,而不是 https 链接。

#!/usr/bin/perl
use strict;
use warnings;
use MediaWiki::API;
use Data::Dumper;

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

my $info_ref = $mw->api ( {
    action      => 'parse',
    prop        => 'text',
    text        => '{{canonicalurl:Hello}}',
} ) or die $mw->{error}->{code} . ': ' . $mw->{error}->{details};
my $html = $info_ref->{parse}{text}{'*'};
print Dumper $html;

信息查询

使用信息查询。但是它不适用于部分,即“Foo#bar”输入将获得链接到“Foo”的输出。

#!/usr/bin/perl
use strict;
use warnings;
use MediaWiki::API;

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

sub get_url_by_title(){
  my $title = shift;

  my $info_ref = $mw->api ( {
    action      => 'query',
    prop        => 'info',
    inprop      => 'url',
    iwurl       => 1,
    titles     => $title,
  } ) or die $mw->{error}->{code} . ': ' . $mw->{error}->{details};

    if (exists $info_ref->{query}{pages}){
      return (values $info_ref->{query}{pages})[0]{'fullurl'};
    }
    elsif (exists $info_ref->{query}{interwiki}){
      return (values  $info_ref->{query}{interwiki})[0]{'url'};
    }
}

【问题讨论】:

    标签: perl https mediawiki mediawiki-api


    【解决方案1】:

    Canonical url 指的是 wiki 的规范 url 类型。在 Wikimedia 的当前配置中,这是 http。 (如果有一天这种情况发生变化,我不会感到惊讶)。您可以查看的是 {{fullurl:Pagename}}。如果 http 和 https 都有效,它将以“//”开头的 url 响应。否则它将以正常的 url 响应。

    信息查询(您的第二种方法)可能会更好,因为它不调用解析器(这对服务器来说工作量要少一些,尽管这并不重要)。之后总是可以将目标(或 # 号之后称为 no a days 的任何部分)放到 url 的末尾。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多