2012-04-18 8 views
0

これは私が昨日尋ねたquestionです。私は必要なデータを得ることができました。最終的なデータはこのようなものです。 linkに従ってください。wikimedia apiがjsonストリングからrelavantデータを取得しています

私はすべてのインフォボックスのデータを

       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}} 

occuringは私のインフォボックスデータを終了します。

jsonを使用しないと、はるかに単純なようです。助けてください

+0

Wikitextの解析はHTMLを解析するよりも悪いです:-) – Bergi

答えて

1

DBpediaを試しましたか? Afaikはテンプレート使用情報を提供します。 Templatetigerというツールサーバーツールもあり、スタティックダンプ(ライブではない)からテンプレートを抽出します。

はしかし、私は一度、JavaScriptでウィキテキストからテンプレートを抽出するための小さなスニペットを書いた:

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 
}); 

それは1レベルのネストされたテンプレートを備え、それでも非常にエラーが発生しやすいです。 regexpでwikitextを解析することは、htmlでそれをやろうとすると悪いことです:-)

parse-tree from the apiapi.php?action=query&prop=revisions&rvprop=content&rvgeneratexml=1&titles=...を照会する方が簡単かもしれません。 そのparsetreeから簡単にテンプレートを抽出することができます。

関連する問題