维基数据查询服务 - 获取页面的创建日期

Bin*_*ven 5 python imdb sparql wikipedia-api wikidata

我正在寻找一种方法来获取英语维基百科上的所有电影,以及它们的创建日期。对我来说,电影是附加了 IMDB ID 的页面。所以,这是我到目前为止的查询:

SELECT DISTINCT ?item_label ?imdb_id  (year(?dateCreation) as ?AnneeCreation) WHERE {
      ?item wdt:P345 $imdb_id.
      filter STRSTARTS(?imdb_id,"tt")
  OPTIONAL{
    ?item wdt:P571 ?dateCreation.           
  }

      SERVICE wikibase:label { bd:serviceParam wikibase:language "en".}  
      ?article schema:about ?item ; schema:isPartOf <https://en.wikipedia.org/> ; schema:name ?item_label
    }
Run Code Online (Sandbox Code Playgroud)

问题是大多数页面没有 P571 属性,所以我想知道是否有更好的方法来获取创建日期?也许通过修订历史或其他什么,我找不到这样的选项。

任何帮助将不胜感激!

And*_*one 3

因此,正如评论所指出的,维基数据属性(以及一些罕见的例子,如特色文章标志)描述了基本概念,而不是维基百科页面元数据。正如 @AKSW 指出的那样,与 Wikipedia API 对话的能力有限,但我的理解是,这对于大量文章来说效果不佳(请注意,示例代码中有 LIMIT 50 )

然而,一切并没有失去!我最近在维基百科上的性别和删除中制定了一种方法来大规模地处理大量文章最近,我使用一些横向思维,制定了一种方法,

第一步:找出您的维基数据查询。tt 前缀的 IMDB 标签可能适用于电影以外的事物(例如电视剧集、体育广播),因此另一种方法可能是进行 P31/P279 类型/类别搜索来查找所有“电影或电影子类”的事物。您还需要添加一个过滤器,明确表示“并且只有英文维基百科中的一篇文章”,我看到您已经完成了。请注意,这为您提供了 WP 文章的名称,而不是 Wikidata 项目的“标签”,这是不同的,因此您可以删除(耗时的)标签服务子句。你最终会得到类似https://w.wiki/FH4(这仍然使用 tt- 前缀方法并获得 180k 结果)或https://w.wiki/FH8(P31/P279 过滤器加上 tt- 前缀) ,136k 个结果)

运行此查询,将结果 TSV 保存在某处,然后继续执行步骤 2。这里我们将使用的工具是PetScan,它旨在链接来自维基百科类别、维基百科元数据、维基数据查询等的数据。

将 SPARQL 查询输入选项卡 4(“其他来源”),并在此选项卡底部说出“使用 wiki:enwiki”。这将迫使它输出从此查询链接的维基百科文章的数据。

现在点击“执行”,等待一会儿(我测试时花了大约 100 秒)并检查结果。您将看到我们获得标题(WP 文章)、页面 ID、命名空间(希望始终为“(文章)”、字节大小和上次触摸日期。这些都不是创建日期...

...除了其中之一。PageID 是按顺序分配的,因此它们本质上是创建时间时间戳。这里有一些关于边缘情况的细微差别 - 例如,如果我在 2010 年创建了一个名为“示例(电影)”的重定向,并在 2015 年手动编辑了该重定向以成为名为“示例(电影)”的真实文章,它将显示为创建于 2010 年。删除和重新创建的页面,或者具有复杂的页面移动历史记录的页面(不过,简单的页面移动应该保留 ID)也可能会出现奇怪的结果。但是,一般来说,对于 95% 的项目,pageID 将反映其首次在 wiki 上创建的时间。例如,431900000是在2014年7月1日上午11点14分创建的;531900000于2017年2月14日下午6点29分创建;等等。

回到 PetScan - 让我们拉下所有这些项目。在 PetScan 中,转到最后一个选项卡并选择 TSV。重新运行搜索并保存结果文件。

现在,我们拥有一个包含 Wikidata ID、IMDB ID 和 WP 页面标题(以及您想要从 WD 查询恢复的任何其他内容)的 TSV;我们还有另一个带有 WP 页面标题和页面 ID 的。您可以使用 WP 页面标题将它们链接在一起,从而从“维基数据中的结果”转到“页面 ID”。清理它们并按照你喜欢的方式链接它们 - 我是在 bash 中完成的,你可能想使用更明智的东西,比如 python。

现在您可以将 PageID 转换为创建日期。对于我所做的工作,我只对六个月的 bin 感兴趣,因此我只是计算出每年 1 月 1 日和 7 月 1 日创建的任意 pageID,并计算它们之间的 ID。您可以做同样的事情,或者使用 API 来查找各个 pageID 并获取创建时间戳 - 具体取决于您想要获得的内容。

这比仅仅使用查询服务要复杂一些,并且它“可能”会为具有复杂历史的一两篇文章提供虚假结果,但它基本上会让您执行您最初要求的操作。