如何获取任何维基页面的第一张图片

时间:2012-04-20 14:47:41

标签: php mediawiki wikimedia

我需要在任何给定的Wiki页面中获取第一个图像/主图像。我可以使用刮削工具来做到这一点。但我使用curl来删除页面。但可能是由于互联网连接速度缓慢,需要很长时间才能废弃一个维基页面。除此之外,我需要根据用户的查询同时显示至少7-8个不同的wiki图像。

因此没有必要使用curl。 我试过wiki api

https://en.wikipedia.org/w/api.php?action=query&titles=India&prop=images&imlimit=1

但是我没有其他参数来排序这个列表。通常这个api返回的第一个图像不是您在页面顶部看到的主图像。有时图像距离页面的上下文太远。

我需要为每个wiki标题只显示一个图像。提前致谢。

4 个答案:

答案 0 :(得分:3)

api.php?action=query&titles=India&prop=images

为您提供按字母顺序排序的所有图像的完整列表。您可以在非api页面上从文档顺序中检索第一个图像。可能如果你将两者结合起来,你将获得最大的收益:

$topic = 'India';
$url = sprintf('http://en.wikipedia.org/wiki/%s', urlencode($topic));
$options = array(
    'http' => array(
        'user_agent' => 'Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.102011-10-16 20:23:50',
    )
);
$context = stream_context_create($options);
libxml_set_streams_context($context);
$doc = new DOMDocument();
$doc->loadHTMLFile($url);
$xp = new DOMXPath($doc);
$result = $xp->query('(//img[@class = "thumbimage"])[1]');
$image = ($result && $result->length) ? $result->item(0) : NULL;
echo $doc->saveXML($image), "\n";

答案 1 :(得分:3)

要经常对“主要图片”进行非常好的猜测,请使用MediaWiki extension "PageImages"提供的prop=pageimages

  

PageImages扩展程序收集有关a上使用的图像的信息   页。

     

它的目的是返回相关的最合适的缩略图   一篇文章,试图只返回有意义的图像,例如不   来自维护模板,存根或标志图标的那些。目前它   使用页面中使用的第一个无意义的图像。

     

(文字为cc-by-sa 3.0; list of authors

用法

引用MediaWiki API documentation

Returns information about images on the page, such as thumbnail and
presence of photos.
Parameters:

piprop
    Which information to return:

    thumbnail
        URL and dimensions of image associated with page, if any.
    name
        Image title.

    Values (separate with "|"): thumbnail, name
    Default: thumbnail|name

pithumbsize
    Maximum thumbnail dimension. 
    Default: 50

pilimit
    Properties of how many pages to return. 
    No more than 50 (100 for bots) allowed.
    Default: 1

picontinue
    When more results are available, use this to continue. 

实施例

https://en.wikipedia.org/w/api.php?action=query&titles=India&prop=pageimages&pithumbsize=300

返回值:

{
    "query": {
        "pages": {
            "14533": {
                "pageid": 14533,
                "ns": 0,
                "title": "India",
                "thumbnail": {
                    "source": "https://upload.wikimedia.org/wikipedia/commons/thumb/b/b8/Political_map_of_India_EN.svg/256px-Political_map_of_India_EN.svg.png",
                    "width": 256,
                    "height": 300
                },
                "pageimage": "Political_map_of_India_EN.svg"
            }
        }
    }
}

进一步的例子:

答案 2 :(得分:2)

似乎图像按字母顺序返回......很奇怪。

无论如何,这可能会更好:

https://en.wikipedia.org/w/api.php?action=parse&text={{Barack_Obama}}&prop=images

不幸的是,只有第一张图片可以使用,但至少它是正确的。

答案 3 :(得分:0)

$wikipage = file_get_contents('http://en.wikipedia.org/wiki/Cats');
preg_match_all('/<img[^<]+?>/', $wikipage, $matches);

通常主视图将是锁定后的第二场比赛(http://upload.wikimedia.org/wikipedia/commons/thumb/f/fc/Padlock-silver.svg/20px-Padlock-silver.svg .PNG)