4

我正在尝试从media:contentRSS 提要中的每个帖子中检索图像(以及其他内容):http: //bits.blogs.nytimes.com/feed/

我尝试了此链接(以及许多其他链接)jQuery XML 解析如何获取元素属性 ,但我仍然遇到错误。

还有一个 PHP 文件(见底部),但我认为这不是问题所在。

我尝试了几种变体,最终得到<img src="undefined" alt="image">

这就是日志所说的TypeError: 'undefined' is not an object (evaluating '$item.find('media\\:content').attr('url').text')

这是来自 RSS 提要的 XML 示例(我正在尝试获取 url="this value" 中的内容) <media:content url="http://graphics8.nytimes.com/images/2011/11/30/technology/bits-daily-report/bits-daily-report-thumbStandard.jpg" medium="image" width="75" height="75"></media:content>

这是我嵌入了 jQuery 的 HTML。感谢您提供所有解决方案、指示和建议。我现在遇到了障碍。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<title>Your Site Title</title>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>

<script type="text/javascript">
$(document).ready(function(){

function get_rss_feed() {

// RSS Feed Var
var rssUrl = 'http://bits.blogs.nytimes.com/feed/';

//clear the content in the div for the next feed.
$("#feedContent").empty();

//use the JQuery get to grab the URL from the selected item, put the results in to an argument for parsing in the inline function called when the feed retrieval is complete
$.get('rss.php?url='+rssUrl, function(d) {

    //find each 'item' in the file and parse it
    $(d).find('item').each(function() {

        //name the current found item this for this particular loop run
        var $item = $(this);
        // grab the post title
        var title = $item.find('title').text();
        // grab the post's URL
        var link = $item.find('link').text();
        // next, the description
        var description = $item.find('description').text();
        //don't forget the pubdate
        var pubDate = $item.find('pubDate').text();
        var media = $item.find('media\\:content').attr('url').text();

            // now create a var 'html' to store the markup we're using to output the feed to the browser window
        var html = "<div class=\"entry\"><h2 class=\"postTitle\">" + title + "<\/h2>";
        html += "<em class=\"date\">" + pubDate + "</em>";
        html += "<p class=\"description\">" + description + "</p>";
        html += "<img src=\"" + media + "\" alt=\"image\"/>";
        html += "<a href=\"" + link + "\" target=\"_blank\">Read More >><\/a><\/div>";

        //Send Results to a div
        $('#rss').append($(html));  
    });
});

};
get_rss_feed();

  });
</script>
</head>

<body>
<h1>RSS TEST</h1>
<!-- Your RSS DIV -->
<div id="rss"></div>

</body>
</html>

这是我的PHP

<?php

  ob_start();

  $curl = curl_init($_GET['url']);

  curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($curl, CURLOPT_HEADER, false);

  $xml = curl_exec($curl);  
  header("Content-Type: text/xml");
  echo $xml; // Results

  $output = ob_get_clean();

  curl_close($curl);
  echo $output;

  ob_end_flush();


?>
4

1 回答 1

6

这:

var media = $item.find('media\\:content').attr('url').text();

应该是这样的:

 var media = $item.find('media\\:content, content').attr('url'):

编辑(添加其他更改):

我变了:

$(d).find('item').each(function() {

到:

$(d).find('item').each(function(index) {

我添加了(限制为三个提要项):

if (index >= 3) { return false }

我补充说(如果没有定义为空白图像的图像):

if (typeof mediatest === 'undefined') { var mediatest = 'blank.png' };

一切都很好......至少到目前为止:)

于 2012-09-21T14:54:24.713 回答