当前位置: 首页 > 知识库问答 >
问题:

如何获取任何wiki页面的第一个图像

樊熠彤
2023-03-14

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

所以用旋度来做这个没有意义。我试过wiki api

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

但我无法给出其他参数来对该列表进行排序。通常,此api返回的第一个图像不是您在页面顶部看到的主图像。有时图像与页面上下文的距离太远。

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

共有3个答案

卓麒
2023-03-14

看起来图像是按字母顺序返回的。。。。奇怪的

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

https://en.wikipedia.org/w/api.php?action=parse

不幸的是,只有第一个图像可用,但至少它是正确的。

南宫建白
2023-03-14
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";
邵轶
2023-03-14

要经常对主图像进行很好的猜测,请使用MediaWiki扩展PageImages提供的prop=pageImages:

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

其目的是返回与文章关联的单个最合适的缩略图,尝试仅返回有意义的图像,例如,不返回来自维护模板、存根或标志图标的图像。目前,它使用页面中使用的第一个非无意义图像。

(文本由sa 3.0抄送;作者列表)

引用MediaWiki API文档:

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

返回值:

{
    "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"
            }
        }
    }
}

其他例子:

  • 文章“巴拉克·奥巴马”的主要图像,高度或宽度限制在300像素
  • 文章“德国”的主要形象
 类似资料:
  • 我们可以通过使用管道字符在单个wiki api调用中获得不同页面的文本提取 ( | ). 例如:http://en.wikipedia.org/w/api.php?format=json 通过使用这个api调用,我们可以以文本格式获取谷歌和雅虎的数据。在这里,我们在一个api调用中获得谷歌和雅虎的数据。 我想在一个wiki api调用中获得Google和Yahoo的图像URL。是否有任何方法可以在

  • 当我调用wiki API访问图像URL时,会得到如下图像URL, 如何从wiki API获取此文件的正确URL?

  • 所以我有适当的代码来删除所有帖子的第一个图像(这是因为我在引入特色图像之前在每个帖子的顶部放了一个图像,一旦创建了特色图像,我就把代码放在适当的位置来删除第一个图像所以我不必回去手动操作)。我试图让它为AMP页面工作,但还没能弄清楚。 这是普通页面的功能。 由于这并没有删除AMP页面上的第一个图像,我尝试了这样的东西,其中有一些正确的元素,但不起作用。 关于如何让AMP内容工作,有什么想法吗?

  • 我有一个要求,以显示视频(卡)在几行缩略图,并集中在第一个缩略图。我使用嵌套贴图进行显示。代码基本上在视频数组上迭代并返回几行视频。 我们如何关注渲染的第一个元素?我认为我们需要得到第一个元素的ref来聚焦。但是我们如何在这里设置ref并在另一个函数中引用它呢?

  • 问题内容: 我曾经用过,但是抛出了一个错误…有什么办法得到所有东西? 问题答案: 您可以尝试: 如果您还想捕获html标签,可以将它们连接到html,如下所示:

  • 我想展示一个IP的两个第一范围。例如,我127.0.0.1。我想得到127.0并使用这个例子: show show 我怎么能那样做? 我尝试了,但它显示了整个IP地址。