首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从维基百科API中获取图像,.svg扩展除外

从维基百科API中获取图像,.svg扩展除外
EN

Stack Overflow用户
提问于 2018-07-25 05:07:07
回答 1查看 215关注 0票数 0

我正在尝试从我的PHP页面中的Wikipedia API中提取图像。但是我在.svg扩展中得到了一些不必要的图像。有什么方法可以避免.svg扩展,还是只包括来自.jpg请求的.jpg扩展?我可以看到一个名为mediatype的变量,但它不起作用。

我使用以下api请求url:

代码语言:javascript
复制
 https://en.wikipedia.org/w/api.php?&redirects=1&action=query&titles=Basilica%20Cistern&prop=images&format=json&imlimit=15

我得到的回应如下:

代码语言:javascript
复制
{
  "continue": {
    "imcontinue": "1365761|Peacock-eyed_column_in_the_Basilica_Cistern_in_Istanbul,Turkey,January_20,2014.jpg ",
    "continue ": " || "
  },
  "query": {
    "pages": {
      "1365761": {
        "pageid": 1365761,
        "ns": 0,
        "title": "Basilica Cistern",
        "images": [{
            "ns": 6,
            "title": "File:20131203 Istanbul 269.jpg"
          },
          {
            "ns": 6,
            "title": "File:Archaeological site icon (red).svg"
          },
          {
            "ns": 6,
            "title": "File:Basilica Cistern.jpg"
          },
          {
            "ns": 6,
            "title": "File:Basilica Cistern Constantinople 2007.jpg"
          },
          {
            "ns": 6,
            "title": "File:Basilica Cistern Constantinople 2007 011.jpg"
          },
          {
            "ns": 6,
            "title": "File:Basilica cistern Art.jpg"
          },
          {
            "ns": 6,
            "title": "File:Carp at the Basilica Cistern, Istanbul 2007.JPG"
          },
          {
            "ns": 6,
            "title": "File:Commons-logo.svg"
          },
          {
            "ns": 6,
            "title": "File:Head of Medusa, Basilica Cistern, Constantinople 01.jpg"
          },
          {
            "ns": 6,
            "title": "File:Head of Medusa, Basilica Cistern, Constantinople 02.jpg"
          },
          {
            "ns": 6,
            "title": "File:Location map Istanbul.png"
          }
        ]
      }
    }
  }
}

PHP代码:

代码语言:javascript
复制
function getResults($json){

$results = array();

$json_array = json_decode($json, true);

foreach($json_array['query']['pages'] as $page){
    if(count($page['images']) > 0){
        foreach($page['images'] as $image){

            $title = str_replace(" ", "_", $image["title"]);
            $imageinfourl = "https://en.wikipedia.org/w/api.php?&action=query&titles=".$title."&prop=imageinfo&iiprop=url&format=json";
            $imageinfo = curl($imageinfourl);
            $iamge_array = json_decode($imageinfo, true);
            $image_pages = $iamge_array["query"]["pages"];


            foreach($image_pages as $a){

                $results[] = $a["imageinfo"][0]["url"];
            }
        }
    }
}

return $results;

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-25 05:31:35

在API中看不到任何东西。我想也许您可以使用imimages参数,但它只适用于匹配整个title,例如

代码语言:javascript
复制
...&imimages=File%3A20131203%20Istanbul%20269.jpg

你能做的就是过滤结果

代码语言:javascript
复制
// snip
if(count($page['images']) > 0) {
    $jpgs = array_filter($page['images'], function($img) {
        return strtolower(pathinfo($img['title'], PATHINFO_EXTENSION)) === 'jpg';
    });

    foreach($jpgs as $image) {
        // and continue

另外,只需检查foreach循环中的扩展即可

代码语言:javascript
复制
foreach($page['images'] as $image) {
    if (strtolower(pathinfo($img['title'], PATHINFO_EXTENSION)) !== 'jpg') {
        continue;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51511154

复制
相关文章

相似问题

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