2016-04-02 5 views
0

私はYQL APIを使用するjQueryのプラグインを使用して、3つのRSSフィードを試して表示します。FeedEkjQuery with YQLランダムにヌルを返すRSSフィード

大抵の場合は問題ありませんが、しばらくの間、3つのフィードのいずれかからresults: nullを取得しますが、通常は2番目と3番目のものから呼び出されます。私はフィード自体をチェックしていて、何の問題も見せていないし、ヤフーコンソールでもテストしているし、問題はない。 というコールの制限の問題ではありません。テスト中に私のIPから1日に300コールしかかかりません。

は私が診断を有効にして、私はそれを見ることができる唯一のことは、 result: nullフィードが、それは infoセクションで、次のメッセージを持っていると異なっている Using encoding from response content-type header (UTF-8) as XML document does not specify encoding.ここ

は私が

SELECT channel.item FROM feednormalizer WHERE output="rss_2.0" AND url ="http://feeds.arstechnica.com/arstechnica/index" LIMIT 8 
を作ってるんだ呼び出しがありますここ

は、プラグインコード

/* 
* FeedEk jQuery RSS/ATOM Feed Plugin v3.0 with YQL API (Engin KIZIL http://www.enginkizil.com) 
* http://jquery-plugins.net/FeedEk/FeedEk.html https://github.com/enginkizil/FeedEk 
* Author : Engin KIZIL http://www.enginkizil.com 
*/ 

(function ($) { 
    $.fn.FeedEk = function (opt) { 
     var def = $.extend({ 
      MaxCount: 5, 
      ShowDesc: true, 
      ShowPubDate: true, 
      DescCharacterLimit: 0, 
      TitleLinkTarget: "_blank", 
      DateFormat: "", 
      DateFormatLang:"en" 
     }, opt); 

     var id = $(this).attr("id"), i, s = "", dt; 
     $("#" + id).empty(); 
     if (def.FeedUrl == undefined) return; 
     $("#" + id).append('<div style="width:100%;text-align:center;color:#424242;"><div class="loader"></div></div>'); 

     var YQLstr = 'SELECT channel.item FROM feednormalizer WHERE output="rss_2.0" AND url ="' + def.FeedUrl + '" LIMIT ' + def.MaxCount; 

     $.ajax({ 
      url: "https://query.yahooapis.com/v1/public/yql?q=" + encodeURIComponent(YQLstr) + "&format=json&diagnostics=true&callback=?", 
      dataType: "json", 
      success: function (data) { 
       $("#" + id).empty(); 
       if (!(data.query.results.rss instanceof Array)) { 
        data.query.results.rss = [data.query.results.rss]; 
       } 
       $.each(data.query.results.rss, function (e, itm) { 
        s += '<li><div class="itemTitle">' + itm.channel.item.title + '</div>'; 

        if (def.ShowPubDate){ 
         dt = new Date(itm.channel.item.pubDate); 
         s += '<div class="itemDate">'; 
         if ($.trim(def.DateFormat).length > 0) { 
          try { 
           moment.lang(def.DateFormatLang); 
           s += moment(dt).format(def.DateFormat); 
          } 
          catch (e){s += dt.toLocaleDateString();} 
         } 
         else { 
          s += dt.toLocaleDateString(); 
         } 
         s += '</div>'; 
        } 
        if (def.ShowDesc) { 
         s += '<div class="itemContent">'; 
         if (def.DescCharacterLimit > 0 && itm.channel.item.description.length > def.DescCharacterLimit) { 
          s += itm.channel.item.description.substring(0, def.DescCharacterLimit) + '...'; 
         } 
         else { 
          s += itm.channel.item.description; 
         } 
         s += '</div>'; 
        } 
       }); 
       $("#" + id).append('<ul class="feedEkList">' + s + '</ul>'); 
      } 
     }); 
    }; 
})(jQuery); 

され、最終的にXMLは失敗しましたYQLから返さ唯一の解決策は、私が思い付くことができますいくつかのより多くの実験を行った後、結果

/**/ 
jQuery112204319277675822377_1459586267516({ 
    "query": { 
     "count": 0, 
     "created": "2016-04-02T08:37:48Z", 
     "lang": "en-US", 
     "diagnostics": { 
      "publiclyCallable": "true", 
      "url": { 
       "execution-start-time": "1", 
       "execution-stop-time": "59", 
       "execution-time": "58", 
       "content": "http://feeds.arstechnica.com/arstechnica/index" 
      }, 
      "info": "Using encoding from response content-type header (UTF-8) as XML document does not specify encoding.", 
      "user-time": "60", 
      "service-time": "58", 
      "build-version": "0.2.430" 
     }, 
     "meta": { 
      "url": { 
       "id": "http://feeds.arstechnica.com/arstechnica/index", 
       "status": "200", 
       "headers": { 
        "header": [{ 
         "name": "Content-Type", 
         "value": "text/xml; charset=UTF-8" 
        }, { 
         "name": "ETag", 
         "value": "m+oG6+UhrscSbLRLhGlL3lvlwNo" 
        }, { 
         "name": "Last-Modified", 
         "value": "Sat, 02 Apr 2016 07:32:51 GMT" 
        }, { 
         "name": "Content-Encoding", 
         "value": "gzip" 
        }, { 
         "name": "Expires", 
         "value": "Sat, 02 Apr 2016 07:40:36 GMT" 
        }, { 
         "name": "Cache-Control", 
         "value": "private, max-age=0" 
        }, { 
         "name": "X-Content-Type-Options", 
         "value": "nosniff" 
        }, { 
         "name": "X-XSS-Protection", 
         "value": "1; mode=block" 
        }, { 
         "name": "Server", 
         "value": "ATS" 
        }, { 
         "name": "Date", 
         "value": "Sat, 02 Apr 2016 08:37:48 GMT" 
        }, { 
         "name": "Age", 
         "value": "0" 
        }, { 
         "name": "Connection", 
         "value": "close" 
        }, { 
         "name": "Via", 
         "value": "http/1.1 ec2.ycs.bf1.yahoo.net (ApacheTrafficServer [cSsNfU])" 
        } 
        ] 
       } 
      } 
     }, 
     "results": null 
    } 
}); 

答えて

1

はYQLを提供することに時間がかかるフィードを好きではないということです。低速で高需要のフィードは、この問題を示すようです。

APIコードにはコンソールの機能を持たないコードがタイムアウトしていて喜んで待っていると感じています。

残念ながら、唯一の解決方法は、使用するフィードに注意することです。