所以,我正在构建一个应用程序,我在数据库中显示有关主题的信息,在数据库中,维基百科上有一个链接到该主题。
现在,我们想要为应用程序构建多语言界面(添加法语)。 我们的主要数据有法语版本。 但对于维基百科链接,我们只有英文链接。
但维基百科本身,在一个主题的页面上,有不同语言的相同主题的链接。
因此,例如,Napoleon Bonaparte在维基百科上有这个英文页面 http://en.wikipedia.org/wiki/Napoleon
但是如果你访问那个页面,你会看到拿破仑上其他语言的链接,并且有一个像这样的法语链接
http://fr.wikipedia.org/wiki/Napol%C3%A9on_Ier
那么,如果我们知道英语,是否有以编程方式访问法语网址?
答案 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"]
一些注意事项:
确保从Google获取API密钥以用于任何非测试用途。否则,您将与其他人共享配额,并且随时都无法用完。在此处阅读更多内容:https://developers.google.com/freebase/v1/mqlread
当然,您需要正确地对query
部分进行URI转义。
在“query”的值中,包含非printables的字符串(以及一些printables很好,例如逗号,parens等)将需要以“Freebase方式”转义:使用美元符号和4个十六进制数字,表示"("
变为"$0028"
。
当然,您需要在响应字符串中执行反向解除转义。
答案 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无论如何都是成功的..
但对于维基百科上没有个性的一切,没有类似上述类似链接的可能性很大。
您的数据库是否很大?如果它不是太大我会手动输入链接,因为最终这对于这种“哑”的情况来说比一个大算法更有效。