3

ブロガーにランダムな投稿を表示したいと思います。

グーグルからJavaScriptを入手して試してみましたが、ランダムな投稿の数が正しくありません(10のはずですが、4、2などの場合もあります)。何が起こっているのかを確認しようとしたところ、json.feed.entry [500] がエラーをスローすることがわかりました。

これが私が使用したjavascriptです

<script type="text/javascript">

function randomposts(json) {
  var randarray = new Array();
  var l=0;
  var flag;
  var numofpost=10;

  var total = parseInt(json.feed.openSearch$totalResults.$t,10);

  for(var i=0;i < numofpost;) {
    flag=0;
    randarray.length=numofpost;
    l=Math.floor(Math.random()*total);
    for(j in randarray){
      if(l==randarray[j]){
        flag=1;}
    }
    if(flag==0&&l!=0){
      randarray[i++]=l;
    }
  }
  // correct output
  // alert(randarray);

  document.write('<ul>');

  // dummy for testing 500 limit 
  //for (var x = 0; x < numofpost; x++) {
  //  randarray[x]= 495 + x;
  //}

  for(var n in randarray){
    var p=randarray[n];
    var entry=json.feed.entry[p-1];
    var posttitle = entry.title.$t;
    for(var k=0; k < entry.link.length; k++){
      if(entry.link[k].rel=='alternate'){
        document.write('<li> ' + posttitle.link(entry.link[k].href) + '</li>');

      }
    }
  }
  document.write('</ul>');
}
</script>
<script src="/feeds/posts/default?alt=json-in-script&start-index=1&max-results=1000&callback=randomposts" type="text/javascript"></script>

現在var total = 500;、最初の 500 件の投稿に対してのみランダムが機能するように設定しています。

この問題を解決するには?

更新: try catch ブロックを追加しましたが、エラーはTypeError: Cannot read property 'title' of undefined です

更新 2: 次の図は、コンソールのスナップショットです。json.feed.entry 500 は未定義です。 コンソールのスナップショット

4

4 に答える 4

2

そのため、ランダム化されたインデックスのフィード エントリが null のようです。その場合は、別の条件を追加して、ランダム化されたインデックスのすべてのエントリが null にならないようにします。

交換:

if(flag==0&&l!=0){

と:

if(flag==0&&l!=0&&json.feed.entry[l-1]!=null){
  randarray[i++]=l;
}

問題が解決することを願っています。

よろしく、

PP

編集:次に、フィードの URL を 2 回呼び出すことができます。

<script type="text/javascript">
var a=0;
var b=0;
var entries = new Array();
function randomposts(json) {
  for (var i in json.feed.entry) {
    var entry = json.feed.entry[i];
    if (entry != null) {
        entries[b++] = entry;
    }
  }
  a++;
  if (a < 2) return;
  var randarray = new Array();
  var l=0;
  var flag;
  var numofpost=10;

  var total = entries.length;

  for(var i=0;i < numofpost;) {
    flag=0;
    randarray.length=numofpost;
    l=Math.floor(Math.random()*total);
    for(j in randarray){
      if(l==randarray[j]){
        flag=1;}
    }
    if(flag==0&&l!=0){
      randarray[i++]=l;
      //alert(l);
    }
  }
  // correct output
  // alert(randarray);

  document.write('<ul>');

  // dummy for testing 500 limit 
  //for (var x = 0; x < numofpost; x++) {
  //  randarray[x]= 495 + x;
  //}

  for(var n in randarray){
    var p=randarray[n];
    var entry=entries[p-1];
    var posttitle = entry.title.$t;
    for(var k=0; k < entry.link.length; k++){
      if(entry.link[k].rel=='alternate'){
        document.write('<li> ' + posttitle.link(entry.link[k].href) + '</li>');

      }
    }
  }
  document.write('</ul>');
}
</script>

<script src="/feeds/posts/default?alt=json-in-script&start-index=1&max-results=500&callback=randomposts" type="text/javascript"></script>
<script src="/feeds/posts/default?alt=json-in-script&start-index=501&max-results=500&callback=randomposts" type="text/javascript"></script>
于 2013-06-09T20:28:52.883 に答える
0

文書化されていませんが、Blogger はリクエストごとのエントリの最大数を 500 に制限していました。すべてのエントリを取得したい場合は、チャンク設定start-indexプロパティごとにフィード チャンクを再構築する必要があります: /feeds/posts/default?start-index=501. ここで、もう少し詳しい情報を見つけることができます: http://too-clever-by-half.blogspot.ru/2011/12/blog-feed-500-post-limit-for-more-than.html

于 2013-06-16T08:49:03.560 に答える