获取维基百科链接链接

时间:2013-08-30 01:43:58

标签: web wikipedia wikipedia-api

所以,我正在构建一个应用程序,我在数据库中显示有关主题的信息,在数据库中,维基百科上有一个链接到该主题。

现在,我们想要为应用程序构建多语言界面(添加法语)。 我们的主要数据有法语版本。 但对于维基百科链接,我们只有英文链接。

但维基百科本身,在一个主题的页面上,有不同语言的相同主题的链接。

因此,例如,Napoleon Bonaparte在维基百科上有这个英文页面 http://en.wikipedia.org/wiki/Napoleon

但是如果你访问那个页面,你会看到拿破仑上其他语言的链接,并且有一个像这样的法语链接

http://fr.wikipedia.org/wiki/Napol%C3%A9on_Ier

那么,如果我们知道英语,是否有以编程方式访问法语网址?

3 个答案:

答案 0 :(得分:0)

我很确定有一种wikipedia-api方法可以做到这一点,但我无法抗拒发布Freebase的答案。使用mqlread API和以下MQL

{
  "en:key": {
    "namespace": "/wikipedia/en",
    "value": "Lake"
  },
  "fr:key": {
    "namespace": "/wikipedia/fr",
    "value": null,
    "limit": 1
  }
}

......你可以得到你想要的东西。 MQL基本上说:“给定/wikipedia/en/Lake对象,/wikipedia/fr命名空间中的同一对象是什么?答案当然是/wikipedia/fr/Lac

在REST中,这是:

https://www.googleapis.com/freebase/v1/mqlread?query={ "en:key": { "namespace": "/wikipedia/en", "value": "Lake" }, "fr:key": { "namespace": "/wikipedia/fr", "value": null, "limit": 1 } }

(非转义,为了清晰起见,还有空格)

回复:

{"result": {"en:key": {"value": "Lake", "namespace": "/wikipedia/en"}, "fr:key": {"value": Lac", "namespace": "/wikipedia/fr"}}}

...所以你想要response["result"]["fr:key"]["value"]

一些注意事项:

  1. 确保从Google获取API密钥以用于任何非测试用途。否则,您将与其他人共享配额,并且随时都无法用完。在此处阅读更多内容:https://developers.google.com/freebase/v1/mqlread

  2. 当然,您需要正确地对query部分进行URI转义。

  3. 在“query”的值中,包含非printables的字符串(以及一些printables很好,例如逗号,parens等)将需要以“Freebase方式”转义:使用美元符号和4个十六进制数字,表示"("变为"$0028"

  4. 当然,您需要在响应字符串中执行反向解除转义。

  5. 祝你好运!

答案 1 :(得分:0)

interwiki链接现在存储在Wikidata中。例如http://www.wikidata.org/wiki/Q517您可以使用MediaWiki API访问它们,也可以下载Wikidata转储。 http://www.wikidata.org/wiki/Wikidata:Data_access

如果您还需要Freebase提供的其他信息,Freebase API也不错,但是如果您只是希望直接获取它的interwiki链接将为您提供更全面的覆盖(148种语言维基百科,而Freebase为30)

答案 2 :(得分:-1)

嗯,有时候,从链接中唯一改变的就是语言的快捷方式,例如:

http://en.wikipedia.org/wiki/Steve_jobs

http://fr.wikipedia.org/wiki/Steve_Jobs

大写/小写'J'没有通过访问网站而产生差异,因为呼叫 http://fr.wikipedia.org/wiki/Steve_jobs无论如何都是成功的..

但对于维基百科上没有个性的一切,没有类似上述类似链接的可能性很大。

您的数据库是否很大?如果它不是太大我会手动输入链接,因为最终这对于这种“哑”的情况来说比一个大算法更有效。