0

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

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

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

例如,拿破仑·波拿巴在维基百科上有这个英文页面 http://en.wikipedia.org/wiki/Napoleon

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

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

那么,如果我们知道英语,是否有一种编程方式来访问法语 url?

4

3 回答 3

0

我很确定有一种 wikipedia-api 方法可以做到这一点,但我忍不住发布了一个 Freebase 答案。使用mqlreadAPI 和以下内容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. 在“查询”的值内,包含不可打印的字符串(以及一些可打印的,例如逗号、括号等)将需要“以 Freebase 方式”转义:使用美元符号和 4 个十六进制数字,这样"("成为"$0028".

  4. 当然,您需要在响应字符串中进行反向取消转义。

祝你好运!

于 2013-08-30T05:18:11.883 回答
0

跨维基链接现在存储在维基数据中。例如http://www.wikidata.org/wiki/Q517 您可以使用 MediaWiki API 访问它们或下载 Wikidata 转储。 http://www.wikidata.org/wiki/Wikidata:Data_access

如果您还需要来自 Freebase 的其他信息,则 Freebase API 很好,但如果您只想直接获取跨维基链接,则会为您提供更完整的覆盖范围(148 种语言的 Wikipedias 与 Freebase 中的约 30 种语言)

于 2013-08-30T12:43:28.537 回答
-1

好吧,有时链接中唯一改变的是语言的快捷方式,例如:

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

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

访问该站点时,大写/小写“J”并没有什么不同,因为无论如何调用 http://fr.wikipedia.org/wiki/Steve_jobs都是成功的..

但是对于维基百科上不属于个性的所有内容,没有上述类似链接的可能性很大。

你的数据库大吗?如果它不是太大,我会手动输入链接,因为对于这种“愚蠢”的情况,最终这比大算法更有效。

于 2013-08-30T02:08:16.897 回答