维基媒体API从JSON字符串获取相关数据



这是我昨天问的问题。我能够获得所需的数据。最终数据是这样的。请点击此链接。

我尝试使用以下代码来获取所有信息框数据

                                content = content.split("}}n");
                                for(k in content)
                                {
                                    if(content[k].search("Infobox")==2)
                                    {
                                        var infobox  = content[k];
                                        alert(infobox); 
                                        infobox = infobox.replace("{{","");
                                        alert(infobox);
                                        infobox = infobox.split("n|");
                                        //alert(infobox[0]);
                                        var infohtml="";
                                        for(l in infobox)
                                        {
                                            if(infobox[l].search("=")>0)
                                            {
                                                var line = infobox[l].split("=");
                                                infohtml = infohtml+"<tr><td>"+line[0]+"</td><td>"+line[1]+"</td></tr>";
                                            }
                                        }
                                        infohtml="<table>"+infohtml+"</table>";
                                        $('#con').html(infohtml);
                                        break;
                                    }
                                }

我最初认为每个元素都包含在 {{ }} 中。所以我写了这段代码。但我看到的是,我无法用这个获得整个信息框数据。有这个元素

{{Sfn|National Informatics Centre|2005}}

发生结束我的信息框数据。

不使用 json 似乎要简单得多。请帮助我

你试过DBpedia吗?Afaik 他们提供模板使用信息。还有一个名为 Templatetiger 的工具服务器工具,它从静态转储(非实时)中提取模板。

但是,我曾经写过一个小片段来从javascript中的wiki文本中提取模板:

var title; // of the template
var wikitext; // of the page
var templateRegexp = new RegExp("{{\s*"+(title.indexOf(":")>-1?"(?:Vorlage:|Template:)?"+title:title)+"([^[\]{}]*(?:{{[^{}]*}}|\[?\[[^[\]]*\]?\])?[^[\]{}]*)+}}", "g");
var paramRegexp = /s*|[^{}|]*?((?:{{[^{}]*}}|[?[[^[]]*]?])?[^[]{}|]*)*/g;
wikitext.replace(templateRegexp, function(template){
    // logabout(template, "input ");
    var parameters = template.match(paramRegexp);
    if (!parameters) {
        console.log(page.title + " ohne Parameter:n" + template);
        parameters  = [];
        }
    var unnamed = 1;
    var p = parameters.reduce(function(map, line) {
        line = line.replace(/^s*|/,"");
        var i = line.indexOf("=");
        map[line.substr(0,i).trim() || unnamed++] = line.substr(i+1).trim();
        return map;
    }, {});
    // you have an object "p" in here containing the template parameters
});

它具有一级嵌套模板,但仍然非常容易出错。用正则表达式解析维基文本就像试图在html上解析一样邪恶:-)

从 API 查询解析树可能更容易:api.php?action=query&prop=revisions&rvprop=content&rvgeneratexml=1&titles=....从该解析树中,您将能够轻松提取模板。

相关内容

  • 没有找到相关文章

最新更新