2017-04-04 6 views
0

Ich versuche, Daten aus Wikipedia mithilfe der API abzurufen. HierJavascript Wikipedia Zusammenfassung Extraktionsfehler

ist die Schnapp des Anfangscode:

$(document).ready(function() { 
 
    var searchTerm = document.title; 
 
    $.getJSON("https://en.wikipedia.org/w/api.php?action=parse&page=" + searchTerm + '&prop=text&format=json&callback=?', function(json) { 
 
    $('#wikiInfo').html(json.parse.text['*']); 
 
    $("#wikiInfo").find("a:not(.references a)").attr("href", function() { 
 
     return "http://www.wikipedia.org" + $(this).attr("href"); 
 
    }); 
 
    $("#wikiInfo").find("a").attr("target", "_blank"); 
 
    }); 
 
});
<title>Fire</title> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<div id="wikiInfo"> &nbsp; </div>

aber das gibt mir die ganze Seite, und ich bin auf der Suche nach etwas, das mir nur die Zusammenfassung des Wiki geben Seite. Ich sah online und die vorgeschlagene Lösung war wie einige der Anfangsparameter und machen den JS Aussehen zu ändern:

var searchTerm = document.title; 
$.getJSON("https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exintro=&titles=" +searchTerm +'&callback=?', function(json) { 
    $('#wikiInfo').html(json.parse.text['*']); 
    $("#wikiInfo").find("a:not(.references a)").attr("href", function(){ return "http://www.wikipedia.org" + $(this).attr("href");}); 
    $("#wikiInfo").find("a").attr("target", "_blank"); 
}); 

, ich den Fehler stehen nun jedoch:

Uncaught TypeError: Cannot read property 'text' of undefined 
    at Object.success (wikis.html:9) 
    at c (jquery.min.js:3) 
    at Object.fireWith [as resolveWith] (jquery.min.js:3) 
    at k (jquery.min.js:5) 
    at HTMLScriptElement.n.onload.n.onreadystatechange (jquery.min.js:5) 

Könnte jemand mir bitte helfen raus mit was genau geändert werden muss? Ich bin neu im Umgang mit JSON-Daten und mit APIs

Antwort

1

Sie können den Seitenauszug für die Zusammenfassung greifen. Der einzige Nachteil ist, dass der Extrakt im Klartext ist.

Ich habe etwas von Ihrem Code am Ende in jQuery Plugins für die einfache Wiederverwendung gedreht.

var apiUrl = 'https://en.wikipedia.org/w/api.php'; 
 

 
(function($) { 
 
    $.fn.fixWikiLinks = function() { 
 
    this.find('a:not(.references a)').attr('href', function() { 
 
     return 'http://www.wikipedia.org' + $(this).attr('href'); 
 
    }); 
 
    return this; 
 
    }; 
 
    $.fn.setAnchorTargetsBlank = function() { 
 
    this.find('a').attr('target', '_blank'); 
 
    return this; 
 
    }; 
 
})(jQuery); 
 

 
$(document).ready(function() { 
 
    var searchTerm = document.title; 
 
    var params = { 
 
    "format"  : "json", 
 
    "action"  : "query", 
 
    "prop"  : "extracts", 
 
    "exintro"  : null, 
 
    "explaintext" : null, 
 
    "titles"  : searchTerm, 
 
    "callback" : "?" 
 
    }; 
 

 
    $.ajax({ 
 
    url: apiUrl + '?' + $.param(params), 
 
    cache: true, 
 
    dataType: 'jsonp', 
 
    success: function(json) { 
 
     var pages = json['query']['pages']; 
 
     var pageIds = Object.keys(pages); 
 

 
     if (pageIds.length > 0) { 
 
     var initialPageId = pageIds[0]; 
 
     var page = pages[initialPageId]; // Get first page. 
 
     var extract = page['extract']; 
 

 
     $('#wikiInfo').html(extract).fixWikiLinks().setAnchorTargetsBlank(); 
 
     } 
 
    } 
 
    }); 
 
});
<title>Fire</title> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<div id="wikiInfo"> &nbsp; </div>

+0

Vielen Dank! Das funktioniert für mich :) – Appstarter