【问题标题】:Parse RSS with jQuery使用 jQuery 解析 RSS
【发布时间】:2010-09-18 14:33:09
【问题描述】:

我想使用 jQuery 来解析 RSS 提要。这可以通过开箱即用的基本 jQuery 库来完成,还是我需要使用插件?

【问题讨论】:

标签: jquery jquery-plugins rss feedparser


【解决方案1】:

Use jFeed - 一个 jQuery RSS/Atom 插件。根据文档,它很简单:

jQuery.getFeed({
   url: 'rss.xml',
   success: function(feed) {
      alert(feed.title);
   }
});

【讨论】:

  • 有任何真实世界使用的例子吗?即解析和显示而不是警报。还是像 $("#results").append(feed.title) 这么简单
  • 注意:下载中有各种很棒的例子
  • Anirudha,也许你可以试试 7-zip?它是免费的、开源的,可以打开多种文件类型,包括 tar/gzip。
  • 请注意此插件的最新版本可用on Github
  • jFeed 似乎不再积极维护(注的最后一次更改是 2 年前,许多开放的拉取请求似乎被忽略了),并且不适用于最新版本的 jQuery。跨度>
【解决方案2】:

除非您的 RSS 数据是私有的,否则请使用 Google AJAX Feed API。当然,它很快。

https://developers.google.com/feed/

【讨论】:

  • 一个好主意,但当您在需要使用对话框进行代理身份验证的防火墙内时不起作用。
  • Google Feed 已弃用,不再受支持。
【解决方案3】:

Using JFeed

function getFeed(sender, uri) {
    jQuery.getFeed({
        url: 'proxy.php?url=' + uri,
        success: function(feed) {
            jQuery(sender).append('<h2>'
            + '<a href="'
            + feed.link
            + '">'
            + feed.title
            + '</a>'
            + '</h2>');

            var html = '';

            for(var i = 0; i < feed.items.length && i < 5; i++) {

                var item = feed.items[i];

                html += '<h3>'
                + '<a href="'
                + item.link
                + '">'
                + item.title
                + '</a>'
                + '</h3>';

                html += '<div class="updated">'
                + item.updated
                + '</div>';

                html += '<div>'
                + item.description
                + '</div>';
            }

            jQuery(sender).append(html);
        }    
    });
}

<div id="getanewbrowser">
  <script type="text/javascript">
    getFeed($("#getanewbrowser"), 'http://feeds.feedburner.com/getanewbrowser')
  </script>
</div>

【讨论】:

    【解决方案4】:
    <script type="text/javascript" src="./js/jquery/jquery.js"></script>
    <script type="text/javascript" src="./js/jFeed/build/dist/jquery.jfeed.pack.js"></script>
    <script type="text/javascript">
        function loadFeed(){
            $.getFeed({
                url: 'url=http://sports.espn.go.com/espn/rss/news/',
                success: function(feed) {
    
                    //Title
                    $('#result').append('<h2><a href="' + feed.link + '">' + feed.title + '</a>' + '</h2>');
    
                    //Unordered List
                    var html = '<ul>';
    
                    $(feed.items).each(function(){
                        var $item = $(this);
    
                        //trace( $item.attr("link") );
                        html += '<li>' +
                            '<h3><a href ="' + $item.attr("link") + '" target="_new">' +
                            $item.attr("title") + '</a></h3> ' +
                            '<p>' + $item.attr("description") + '</p>' +
                            // '<p>' + $item.attr("c:date") + '</p>' +
                            '</li>';
                    });
    
                    html += '</ul>';
    
                    $('#result').append(html);
                }
            });
        }
    </script>
    

    【讨论】:

    • 不错的答案,但不幸的是,您在粘贴代码方面做得并不好。 ;-)
    【解决方案5】:

    我正在使用带有 yql 的 jquery 作为提要。您可以使用 yql 检索 twitter、rss、buzz。我从http://tutorialzine.com/2010/02/feed-widget-jquery-css-yql/ 阅读。这对我很有用。

    【讨论】:

      【解决方案6】:

      jFeed 有点过时了,只适用于旧版本的 jQuery。已经两年多了。

      zRSSFeed 可能不太灵活,但它很容易使用,并且可以与当前版本的 jQuery(当前为 1.4)一起使用。 http://www.zazar.net/developers/zrssfeed/

      这是来自 zRSSFeed 文档的一个简单示例:

      <div id="test"><div>
      
      <script type="text/javascript">
      $(document).ready(function () {
        $('#test').rssfeed('http://feeds.reuters.com/reuters/oddlyEnoughNews', {
          limit: 5
        });
      });
      </script>
      

      【讨论】:

      • 请注意,这仅适用于非本地提要,因为它使用 Google Feed API(Google 必须能够加载提要 xml)。
      【解决方案7】:

      jFeed 在 IE 中不起作用。

      使用zRSSFeed。 5 分钟就可以搞定了

      【讨论】:

      • 顺便说一句,zRssFeed 在内部使用 Google Feed RSS API。因此,如果想要自己做 HTML 布局,直接查看它会更容易。
      • 超级酷...唯一的问题是,如果他们在回调函数中提供提要对象而不是整个 html,那就太好了...
      • 仅供参考,任何想要使用此插件的人。开发者发布了以下内容。 “此插件已停止使用,由于插件回复的 Google Feeds API 已从服务中删除,因此将不再可用或支持。”来源:zazar.net/developers/jquery/zrssfeed
      【解决方案8】:

      警告

      The Google Feed API 已正式弃用并且不再有效


      不需要整个插件。这会将您的 RSS 作为 JSON 对象返回给回调函数:

      function parseRSS(url, callback) {
        $.ajax({
          url: document.location.protocol + '//ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=10&callback=?&q=' + encodeURIComponent(url),
          dataType: 'json',
          success: function(data) {
            callback(data.responseData.feed);
          }
        });
      }
      

      【讨论】:

      • 尝试过 jFeed,但它不起作用,这很好,不需要额外的库。
      • 请注意...使用 google api,提要被缓存,因此您不会获得最新最好的提要。
      • 缓存在哪里?如何删除缓存?
      • 这不是一个很好的答案。它依赖于第三方公司 [Google] 维护他们的服务。它不回答原始问题(“使用 jQuery 解析 RSS”),而是宣传 Google。如果 Google 放弃或修改了他们的 ajax API 怎么办?您的网站崩溃了。
      • @CharlesGoodwin Google 刚刚删除了这个 API! developers.google.com/feed/?hl=en
      【解决方案9】:

      对于我们这些迟来讨论的人来说,从 1.5 开始,jQuery 具有内置的 xml 解析功能,这使得在没有插件或 3rd 方服务的情况下很容易做到这一点。它有一个 parseXml 函数,并且在使用 $.get 函数时也会自动解析 xml。例如:

      $.get(rssurl, function(data) {
          var $xml = $(data);
          $xml.find("item").each(function() {
              var $this = $(this),
                  item = {
                      title: $this.find("title").text(),
                      link: $this.find("link").text(),
                      description: $this.find("description").text(),
                      pubDate: $this.find("pubDate").text(),
                      author: $this.find("author").text()
              }
              //Do something with item here...
          });
      });
      

      【讨论】:

      • XmlHttpRequest 错误:Access-Control-Allow-Origin 不允许来源
      • @jackocnr,是的,这就是这种方法的缺点。除非您有权在源服务器上设置 Access-Control-Allow-Origin 标头,否则您不能进行跨域请求。如果服务器支持 jsonp,那么这是你最好的选择。否则,您可能会在您的域中使用代理脚本来检索 xml,然后调用该脚本而不是外部服务器。
      • 这真的是唯一不依赖外部插件或服务的答案吗?
      • 为什么$this.find("link").text()总是返回空字符串''?
      • @JeffTian,很难说没有看到你的 xml。最明显的原因是 元素丢失或为空。
      【解决方案10】:

      I agree with @Andrew,使用 Google 是一种可靠的、可重用的方法,它的巨大好处是您可以返回 JSON 而不是 XML。使用 Google 作为代理的另一个优势是,可能阻止您直接访问其数据的服务不太可能阻止 Google。这是一个使用滑雪报告和条件数据的示例。这具有所有常见的现实世界应用程序:1)第三方 RSS/XML 2)JSONP 3)当您无法完全按照您想要的方式获取数据时,将字符串和字符串清理为数组 4)加载时将元素添加到DOM。希望这可以帮助一些人!

      <!-- Load RSS Through Google as JSON using jQuery -->
      <script type="text/javascript">
      
          function displaySkiReport (feedResponse) {
      
          // Get ski report content strings
          var itemString = feedResponse.entries[0].content;
          var publishedDate = feedResponse.entries[0].publishedDate;
      
          // Clean up strings manually as needed
          itemString = itemString.replace("Primary: N/A", "Early Season Conditions"); 
          publishedDate = publishedDate.substring(0,17);
      
          // Parse ski report data from string
          var itemsArray = itemString.split("/");
      
      
          //Build Unordered List
          var html = '<h2>' + feedResponse.entries[0].title + '</h2>';
          html += '<ul>';
      
          html += '<li>Skiing Status: ' + itemsArray[0] + '</li>';
          // Last 48 Hours
          html += '<li>' + itemsArray[1] + '</li>';
          // Snow condition
          html += '<li>' + itemsArray[2] + '</li>';
          // Base depth
          html += '<li>' + itemsArray[3] + '</li>';
      
          html += '<li>Ski Report Date: ' + publishedDate + '</li>';
      
          html += '</ul>';
      
          $('body').append(html);    
      
          }
      
      
          function parseRSS(url, callback) {
            $.ajax({
          url: document.location.protocol + '//ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=10&callback=?&q=' + encodeURIComponent(url),
          dataType: 'json',
          success: function(data) {
            callback(data.responseData.feed);
          }
            });
          }
      
          $(document).ready(function() {              
      
              // Ski report
              parseRSS("http://www.onthesnow.com/michigan/boyne-highlands/snow.rss", displaySkiReport);
      
          });
      
      </script>
      

      【讨论】:

      • 由于跨域问题,这将不起作用。你需要 JSONP。
      • 它对我有用。你测试了吗?很确定谷歌使用回调参数而不是 ajax 数据类型返回 jsonp。
      • 不确定投反对票的目的。三年后,此代码仍然有效。将其全部粘贴到控制台中,您将看到当前 (XML) 滑雪条件添加到此页面的页脚。
      【解决方案11】:

      zRSSfeed 建立在 jQuery 之上,简单的主题很棒。
      试一试。

      【讨论】:

        【解决方案12】:

        更新(2019 年 10 月 15 日)

        我将核心逻辑从 jquery-rss 提取到一个名为 Vanilla RSS 的新库中,该库使用 fetch API 并且可以在没有任何额外依赖项的情况下工作:

        const RSS = require('vanilla-rss');
        const rss = new RSS(
            document.querySelector("#your-div"),
            "http://www.recruiter.com/feed/career.xml",
            { 
              // options go here
            }
        );
        rss.render().then(() => {
          console.log('Everything is loaded and rendered');
        });
        
        

        原创

        发帖:

        您也可以使用jquery-rss,它带有漂亮的模板并且超级好用:

        $("#your-div").rss("http://www.recruiter.com/feed/career.xml", {
            limit: 3,
            layoutTemplate: '<ul class="inline">{entries}</ul>',
            entryTemplate: '<li><a href="{url}">[{author}@{date}] {title}</a><br/>{shortBodyPlain}</li>'
        })
        

        收益率(截至 2013 年 9 月 18 日):

        <div id="your-div">
            <ul class="inline">
            <entries></entries>
            </ul>
            <ul class="inline">
                <li><a href="http://www.recruiter.com/i/when-to-go-over-a-recruiter%e2%80%99s-head/">[@Tue, 10 Sep 2013 22:23:51 -0700] When to Go Over a Recruiter's Head</a><br>Job seekers tend to have a certain "fear" of recruiters and hiring managers, and I mean fear in the reverence and respect ...</li>
                <li><a href="http://www.recruiter.com/i/the-perfect-job/">[@Tue, 10 Sep 2013 14:52:40 -0700] The Perfect Job</a><br>Having long ago dealt with the "perfect resume" namely God's, in a previous article of mine, it makes sense to consider the ...</li>
                <li><a href="http://www.recruiter.com/i/unemployment-benefits-applications-remain-near-5-year-low-decline-again/">[@Mon, 09 Sep 2013 12:49:17 -0700] Unemployment Benefits Applications Remain Near 5-Year Low, Decline Again</a><br>As reported by the U.S. Department of Labor, the number of workers seeking unemployment benefits continued to sit near ...</li>
            </ul>
        </div>
        

        有关工作示例,请参阅 http://jsfiddle.net/sdepold/ozq2dn9e/1/

        【讨论】:

        • 请记住,jquery-rss 使用 Google Feed API,它会缓存 Feed,这可能会出现问题。不过,您可以通过添加垃圾 url 参数来欺骗它:stackoverflow.com/questions/13401936/…
        • 请提供一个不使用moment.js的格式化日期示例
        • 检查下面的 sn -p gist.github.com/sdepold/d1e5e0e7a66fc77930fe 它将生成类似这样的内容:“, [@2015-11-18]”
        • 只是想提一下 jquery-rss 没有使用 Google Feed API,而是一个名为 Feedr (github.com/sdepold/feedrapp) 的替代品,尽管原始 API 已关闭,但它们都可以正常工作。跨度>
        【解决方案13】:
        (function(url, callback) {
            jQuery.ajax({
                url: document.location.protocol + '//ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=10&callback=?&q=' + encodeURIComponent(url),
                dataType: 'json',
                success: function(data) {
                    callback(data.responseData.feed);
                }
            });
        })('http://news.hitb.org/rss.xml', function(feed){ // Change to desired URL
            var entries = feed.entries, feedList = '';
            for (var i = 0; i < entries.length; i++) {
                feedList +='<li><a href="' + entries[i].link + '">' + entries[i].title + '</a></li>';
            }
            jQuery('.feed > ul').append(feedList);
        });
        
        
        <div class="feed">
                <h4>Hacker News</h4>
                <ul></ul>
        </div>
        

        【讨论】:

          【解决方案14】:

          jFeed 很简单,有一个example 供您测试。但是,如果您要解析来自另一台服务器的提要,则需要在提要的服务器上允许 Cross Origin Resource Sharing (CORS)。您还需要check browser support

          我上传了the sample,但是当我通过http协议将示例中的url更改为example.com/feed.rss之类的东西时,仍然没有得到任何版本的IE支持。 IE 8 及更高版本应支持 CORS,但 jFeed 示例未呈现提要。

          最好的办法是使用 Google 的 API:
          https://developers.google.com/feed/v1/devguide

          见:
          https://github.com/jfhovinne/jFeed
          http://en.wikipedia.org/wiki/Cross-origin_resource_sharing
          http://en.wikipedia.org/wiki/Same_origin_policy
          http://caniuse.com/cors

          【讨论】:

            【解决方案15】:

            jQuery Feeds 是一个不错的选择,它具有内置模板系统并使用 Google Feed API,因此具有跨域支持。

            【讨论】:

              【解决方案16】:

              使用google ajax api,由谷歌缓存和任何你想要的输出格式。

              代码示例; http://code.google.com/apis/ajax/playground/#load_feed

              <script src="http://www.google.com/jsapi?key=AIzaSyA5m1Nc8ws2BbmPRwKu5gFradvD_hgq6G0" type="text/javascript"></script>
              <script type="text/javascript">
              /*
              *  How to load a feed via the Feeds API.
              */
              
              google.load("feeds", "1");
              
              // Our callback function, for when a feed is loaded.
              function feedLoaded(result) {
                if (!result.error) {
                  // Grab the container we will put the results into
                  var container = document.getElementById("content");
                  container.innerHTML = '';
              
                  // Loop through the feeds, putting the titles onto the page.
                  // Check out the result object for a list of properties returned in each entry.
                  // http://code.google.com/apis/ajaxfeeds/documentation/reference.html#JSON
                  for (var i = 0; i < result.feed.entries.length; i++) {
                    var entry = result.feed.entries[i];
                    var div = document.createElement("div");
                    div.appendChild(document.createTextNode(entry.title));
                    container.appendChild(div);
                  }
                }
              }
              
              function OnLoad() {
                // Create a feed instance that will grab Digg's feed.
                var feed = new google.feeds.Feed("http://www.digg.com/rss/index.xml");
              
                // Calling load sends the request off.  It requires a callback function.
                feed.load(feedLoaded);
              }
              
              google.setOnLoadCallback(OnLoad);
              </script>
              

              【讨论】:

              • 这是一个不错的选择,因为它不依赖 jquery!
              【解决方案17】:

              更新 [2016 年 4 月 25 日] 现在更好的编写和完全支持的版本具有更多选项和功能,托管在 GitHub.jQRSS

              我看到Nathan StrutzSelected Answer,但是,jQuery 插件页面链接仍然关闭,并且该站点的主页似乎没有加载。我尝试了其他一些解决方案,发现其中大多数不仅过时,而且 EASY!因此,我把帽子扔在那里并制作了自己的插件,并且这里有死链接,这似乎是提交答案的好地方。如果您在 2012 年(很快到 2013 年)寻找这个答案,您可能会像我一样注意到死链接和旧建议的挫败感。下面是我的 modern 插件示例的链接以及插件的代码!只需将代码复制到 JS 文件中并像任何其他插件一样将其链接到您的标题中。使用非常方便!

              jsFiddle

              插件代码
              2015 年 2 月 9 日 - 在向其发送命令之前检查 console 进行了早该更新!应该有助于解决旧的 IE 问题。

              (function($) {
                  if (!$.jQRSS) { 
                      $.extend({  
                          jQRSS: function(rss, options, func) {
                              if (arguments.length <= 0) return false;
              
                              var str, obj, fun;
                              for (i=0;i<arguments.length;i++) {
                                  switch(typeof arguments[i]) {
                                      case "string":
                                          str = arguments[i];
                                          break;
                                      case "object":
                                          obj = arguments[i];
                                          break;
                                      case "function":
                                          fun = arguments[i];
                                          break;
                                  }
                              }
              
                              if (str == null || str == "") {
                                  if (!obj['rss']) return false;
                                  if (obj.rss == null || obj.rss == "") return false;
                              }
              
                              var o = $.extend(true, {}, $.jQRSS.defaults);
              
                              if (typeof obj == "object") {
                                  if ($.jQRSS.methods.getObjLength(obj) > 0) {
                                      o = $.extend(true, o, obj);
                                  }
                              }
              
                              if (str != "" && !o.rss) o.rss = str;
                              o.rss = escape(o.rss);
              
                              var gURL = $.jQRSS.props.gURL 
                                  + $.jQRSS.props.type 
                                  + "?v=" + $.jQRSS.props.ver
                                  + "&q=" + o.rss
                                  + "&callback=" + $.jQRSS.props.callback;
              
                              var ajaxData = {
                                      num: o.count,
                                      output: o.output,
                                  };
              
                              if (o.historical) ajaxData.scoring = $.jQRSS.props.scoring;
                              if (o.userip != null) ajaxData.scoring = o.userip;
              
                              $.ajax({
                                  url: gURL,
                                  beforeSend: function (jqXHR, settings) { if (window['console']) { console.log(new Array(30).join('-'), "REQUESTING RSS XML", new Array(30).join('-')); console.log({ ajaxData: ajaxData, ajaxRequest: settings.url, jqXHR: jqXHR, settings: settings, options: o }); console.log(new Array(80).join('-')); } },
                                  dataType: o.output != "xml" ? "json" : "xml",
                                  data: ajaxData,
                                  type: "GET",
                                  xhrFields: { withCredentials: true },
                                  error: function (jqXHR, textStatus, errorThrown) { return new Array("ERROR", { jqXHR: jqXHR, textStatus: textStatus, errorThrown: errorThrown } ); },
                                  success: function (data, textStatus, jqXHR) {  
                                      var f = data['responseData'] ? data.responseData['feed'] ? data.responseData.feed : null : null,
                                          e = data['responseData'] ? data.responseData['feed'] ? data.responseData.feed['entries'] ? data.responseData.feed.entries : null : null : null
                                      if (window['console']) {
                                          console.log(new Array(30).join('-'), "SUCCESS", new Array(30).join('-'));
                                          console.log({ data: data, textStatus: textStatus, jqXHR: jqXHR, feed: f, entries: e });
                                          console.log(new Array(70).join('-'));
                                      }
              
                                      if (fun) {
                                          return fun.call(this, data['responseData'] ? data.responseData['feed'] ? data.responseData.feed : data.responseData : null);
                                      }
                                      else {
                                          return { data: data, textStatus: textStatus, jqXHR: jqXHR, feed: f, entries: e };
                                      }
                                  }
                              });
                          }
                      });
                      $.jQRSS.props = {
                          callback: "?",
                          gURL: "http://ajax.googleapis.com/ajax/services/feed/",
                          scoring: "h",
                          type: "load",
                          ver: "1.0"
                      };
                      $.jQRSS.methods = {
                          getObjLength: function(obj) {
                              if (typeof obj != "object") return -1;
                              var objLength = 0;
                              $.each(obj, function(k, v) { objLength++; })
                              return objLength;
                          }
                      };
                      $.jQRSS.defaults = {
                          count: "10", // max 100, -1 defaults 100
                          historical: false,
                          output: "json", // json, json_xml, xml
                          rss: null,  //  url OR search term like "Official Google Blog"
                          userip: null
                      };
                  }
              })(jQuery);
              

              使用

              //  Param ORDER does not matter, however, you must have a link and a callback function
              //  link can be passed as "rss" in options
              //  $.jQRSS(linkORsearchString, callbackFunction, { options })
              
              $.jQRSS('someUrl.xml', function(feed) { /* do work */ })
              
              $.jQRSS(function(feed) { /* do work */ }, 'someUrl.xml', { count: 20 })
              
              $.jQRSS('someUrl.xml', function(feed) { /* do work */ }, { count: 20 })
              
              $.jQRSS({ count: 20, rss: 'someLink.xml' }, function(feed) { /* do work */ })
              

              $.jQRSS('在此处搜索单词而不是链接', function(feed) { /* do work */ }) // TODO:需要修复

              选项

              {
                  count: // default is 10; max is 100. Setting to -1 defaults to 100
                  historical: // default is false; a value of true instructs the system to return any additional historical entries that it might have in its cache. 
                  output: // default is "json"; "json_xml" retuns json object with xmlString / "xml" returns the XML as String
                  rss: // simply an alternate place to put news feed link or search terms
                  userip: // as this uses Google API, I'll simply insert there comment on this:
                      /*  Reference: https://developers.google.com/feed/v1/jsondevguide
                          This argument supplies the IP address of the end-user on 
                          whose behalf the request is being made. Google is less 
                          likely to mistake requests for abuse when they include 
                          userip. In choosing to utilize this parameter, please be 
                          sure that you're in compliance with any local laws, 
                          including any laws relating to disclosure of personal 
                          information being sent.
                      */
              }
              

              【讨论】:

                【解决方案18】:

                The jQuery-rss project 非常轻量级,不会强加任何特定样式。

                语法可以很简单

                $("#rss-feeds").rss("http://www.recruiter.com/feed/career.xml")
                

                查看working example at http://jsfiddle.net/jhfrench/AFHfn/

                【讨论】:

                  【解决方案19】:

                  Superfeedr 有一个 jquery plugin,它做得很好。 您不会遇到任何跨域策略问题,并且更新会实时传播。

                  【讨论】:

                  • 为什么这个解决方案不会出现 CORS 问题?
                  【解决方案20】:

                  我建议你使用FeedEk。在 Google Feed API 被正式弃用后,大多数插件都无法使用。但 FeedEk 仍在工作。它非常易于使用,并且有许多自定义选项。

                  $('#divRss').FeedEk({
                     FeedUrl:'http://jquery-plugins.net/rss'
                  });
                  

                  有选项

                  $('#divRss').FeedEk({
                    FeedUrl:'http://jquery-plugins.net/rss',
                    MaxCount : 5,
                    ShowDesc : true,
                    ShowPubDate:true,
                    DescCharacterLimit:100,
                    TitleLinkTarget:'_blank',
                    DateFormat: 'MM/DD/YYYY',
                    DateFormatLang:'en'
                  });
                  

                  【讨论】:

                  • 我不确定你是否真的可以定义一个替代的 api 端点,但如果你可以的话,有可能用 feedrapp 替换 google feed api:github.com/sdepold/feedrapp(这也是现在 jquery-rss 的主干)
                  • 这不做解析。它使用 yahooapis 进行解析,然后只显示内容。
                  猜你喜欢
                  • 2016-01-17
                  • 1970-01-01
                  • 1970-01-01
                  • 2021-02-15
                  • 2023-03-31
                  • 1970-01-01
                  • 2019-07-02
                  • 1970-01-01
                  • 2012-01-04
                  相关资源
                  最近更新 更多