我想向我的博客显示随机帖子。
我从谷歌搜索得到了一个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:无法读取未定义的属性'title'
更新2: 以下图片是控制台的快照。 json.feed.entry 500未定义。
答案 0 :(得分:2)
所以似乎随机索引的feed条目为null,在这种情况下添加另一个条件以确保随机索引中的每个条目都不为null。
替换:
if(flag==0&&l!=0){
使用:
if(flag==0&&l!=0&&json.feed.entry[l-1]!=null){
randarray[i++]=l;
}
我希望能解决你的问题。
此致
PP
编辑: 然后你可以两次调用feed url,这是实现这一目标的快捷方式:
<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>
答案 1 :(得分:1)
当您将max-results
设置为1000时,从服务器返回的条目将被限制为500.但是,它仍然会返回正确的条目总数,因为您可以看到是否访问{{1 }}
答案 2 :(得分:0)
Blogger将每个请求的最大条目数限制为500,即使它没有记录,显然也是如此。如果您想获得所有条目,则必须通过块设置start-index
属性/feeds/posts/default?start-index=501
重新构建Feed块。
您可以在此处找到更多信息:http://too-clever-by-half.blogspot.ru/2011/12/blog-feed-500-post-limit-for-more-than.html
答案 3 :(得分:0)
我建议使用Google JavaScript Client Library - Blogger API来检索博客的帖子。
请参阅以下示例:
<script>
function renderResults(response) {
if (response.items) {
for (var i = 0; i < response.items.length; i++) {
//do whatever you want with the posts of your blog
}
}
if(response.nextPageToken) {
var blogId = 'XXX Your blogId XXX';
var request = gapi.client.blogger.posts.list({
'blogId': blogId,
'pageToken': response.nextPageToken,
'maxResults': 100,
});
request.execute(renderResults);
}
}
function init() {
gapi.client.setApiKey('XXX Get your API Key from https://code.google.com/apis/console XXX');
gapi.client.load('blogger', 'v3', function() {
var blogId = 'XXX Your blogId XXX';
var request = gapi.client.blogger.posts.list({
'blogId': blogId,
'maxResults': 100,
});
request.execute(renderResults);
});
}
</script>
<script src="https://apis.google.com/js/client.js?onload=init"></script>