首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript Wikipedia摘要提取错误

Javascript Wikipedia摘要提取错误
EN

Stack Overflow用户
提问于 2017-04-04 15:19:11
回答 1查看 154关注 0票数 0

我试图使用API从维基百科获取数据。

下面是初始代码的快照:

代码语言:javascript
复制
$(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");
  });
});
代码语言:javascript
复制
<title>Fire</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div id="wikiInfo"> &nbsp; </div>

然而,这给了我整个页面,我正在寻找的东西,将只给我的Wiki网页的摘要。我在线查看了一下,建议的解决方案是更改一些初始参数,并使JS看起来像:

代码语言:javascript
复制
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");
});

然而,现在我面临的错误是:

代码语言:javascript
复制
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)

有人能帮我解决哪些需要改变的地方吗?我对处理JSON数据和使用API很陌生

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-04 15:53:40

您可以抓取摘要的页面摘要。唯一的缺点是摘录是纯文本。

为了便于重用,我最后将您的一些代码转换为jQuery插件。

代码语言:javascript
复制
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();
      }
    }
  });
});
代码语言:javascript
复制
<title>Fire</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div id="wikiInfo"> &nbsp; </div>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43211304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档