首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从MediaWiki接口获取主镜像?

如何从MediaWiki接口获取主镜像?
EN

Stack Overflow用户
提问于 2012-08-28 02:57:46
回答 4查看 4K关注 0票数 5

你好,我正在使用Curl从维基百科获取信息,我只想接收关于主体图像的信息,我不想接收一篇文章的所有图像。例如..如果我想获取有关英语(http://en.wikipedia.org/wiki/English_language)的所有图像的信息,我应该访问这个网址:http://en.wikipedia.org/w/api.php?action=query&titles=English_Language&prop=images,但我收到的是人们使用英语的国家的标志:

代码语言:javascript
复制
<?xml version="1.0"?> <api>   <query>
    <normalized>
      <n from="English_language" to="English language" />
    </normalized>
    <pages>
      <page pageid="8569916" ns="0" title="English language">
        <images>
          <im ns="6" title="File:Anglospeak(800px)Countries.png" />
          <im ns="6" title="File:Anglospeak.svg" />
          <im ns="6" title="File:Circle frame.svg" />
          <im ns="6" title="File:Commons-logo.svg" />
          <im ns="6" title="File:Flag of Argentina.svg" />
          <im ns="6" title="File:Flag of Aruba.svg" />
          <im ns="6" title="File:Flag of Australia.svg" />
          <im ns="6" title="File:Flag of Bolivia.svg" />
          <im ns="6" title="File:Flag of Brazil.svg" />
          <im ns="6" title="File:Flag of Canada.svg" />

我只需要关于主体图像的信息。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-08-29 06:26:48

正如其他人所指出的那样,维基百科的文章并没有真正的“主图像”,所以你的第一个问题将是如何在给定页面上使用的不同图像之间做出选择。一些可能的选择标准可能是:

  • 文章中最大的图片。
  • 第一张图片超出了一些特定的最小尺寸,例如60×60像素。
  • 第一张图片直接在文章的源文本中引用,而不是通过模板引用。

对于前两个选项,您需要通过action=parse获取页面呈现的HTML代码,并使用HTML解析器在代码中查找img标记,如下所示:

http://en.wikipedia.org/w/api.php?action=parse&page=English_language&prop=text|images

(不能直接从API获取页面上使用的图像大小的原因是,这些信息实际上并没有存储在MediaWiki数据库中的任何地方。)

对于最后一个选项,您需要的是文章的源wikitext,可以通过prop=revisionsrvprop=content获得

http://en.wikipedia.org/w/api.php?action=query&titles=English_language&prop=revisions|images&rvprop=content

请注意,infoboxes中的许多图像都被指定为模板的参数,因此仅解析[[Image:...]]语法将会遗漏其中的一些图像。更好的解决方案可能是通过prop=images获取页面上使用的所有图像的列表(您可以在相同的查询中这样做,如上所述),然后在wikitext中查找它们的名称(带或不带Image: / File:前缀)。

请记住MediaWiki自动规范化页面(和图像)名称的各种方式:最值得注意的是,下划线映射到空格,连续的空格折叠为一个空格,名称的第一个字母大写。如果您决定这样做,下面是一些示例PHP代码,它们将把一个文件名列表转换为一个regexp,它应该与wikitext中的任何一个文件名相匹配:

代码语言:javascript
复制
foreach ($names as &$name) {
    $name = trim( preg_replace( '/[_\s]+/u', ' ', $name ) );
    $name = preg_quote( $name, '/' );
    $name = preg_replace( '/^(\\\\?.)/us', '(?i:$1)', $name );
    $name = preg_replace( '/\\\\? /u', '[_\s]+', $name );
}
$regexp = '/' . implode( '|', $names ) . '/u';

例如,当给定列表时:

代码语言:javascript
复制
Anglospeak(800px)Countries.png
Anglospeak.svg
Circle frame.svg
Commons-logo.svg
Flag of Argentina.svg
Flag of Aruba.svg

生成的regexp将为:

代码语言:javascript
复制
/(?i:A)nglospeak\(800px\)Countries\.png|(?i:A)nglospeak\.svg|(?i:C)ircle[_\s]+frame\.svg|(?i:C)ommons\-logo\.svg|(?i:F)lag[_\s]+of[_\s]+Argentina\.svg|(?i:F)lag[_\s]+of[_\s]+Aruba\.svg/u
票数 1
EN

Stack Overflow用户

发布于 2015-01-12 19:20:57

我就是这么让它工作的.

代码语言:javascript
复制
$.getJSON("http://en.wikipedia.org/w/api.php?action=query&format=json&callback=?", {
    titles: "India",
    prop: "pageimages",
    pithumbsize: 150
  },
  function(data) {
    var source = "";
    var imageUrl = GetAttributeValue(data.query.pages);
    if (imageUrl == "") {
      $("#wiki").append("<div>No image found</div>");
    } else {
      var img = "<img src=\"" + imageUrl + "\">"
      $("#wiki").append(img);
    }
  }
);

 function GetAttributeValue(data) {
  var urli = "";
  for (var key in data) {
    if (data[key].thumbnail != undefined) {
      if (data[key].thumbnail.source != undefined) {
        urli = data[key].thumbnail.source;
        break;
      }
    }
  }
  return urli;
}



<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<html>

<head></head>

<body>
  <div id="wiki"></div>
</body>

</html>
票数 3
EN

Stack Overflow用户

发布于 2012-08-28 03:05:25

您可以使用imlimit parameter将查询限制为文章中的第一个图像

http://en.wikipedia.org/w/api.php?action=query&titles=English_Language&redirects&prop=images&imlimit=1

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12147886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档