2013-06-19 72 views
2

我正嘗試使用Blogger API從博客提取所有帖子。由於某些未知原因,提取的帖子數量似乎限制爲20個。限制使用Blogger API提取的帖子數量(錯誤400)

如果我試試這個網址:

https://www.googleapis.com/blogger/v3/blogs/3089072491354463482/posts?maxResults=20&fields=items(title)&key=AIzaSyAJO5J-pRCaGOIeRLIJfvAPwxpMLKvwebU

我獲得以下響應(列出過去20個文章標題如預期):

{ 
"items": [ 
    { 
    "title": "El Caballero" 
    }, 
    { 
    "title": "Une traversée de frontière… étonnante!" 
    }, 
    { 
    "title": "Hasta luego querida Argentina!" 
    }, 
    { 
    "title": "Dernier jour en Argentine" 
    }, 
    { 
    "title": "Humahuaca" 
    }, 
    { 
    "title": "Purmamarca" 
    }, 
    { 
    "title": "Tilcara" 
    }, 
    { 
    "title": "Premières grèves" 
    }, 
    { 
    "title": "Le Nord Argentin: Salta" 
    }, 
    { 
    "title": "Ca en fait de l'eau tout ça..." 
    }, 
    { 
    "title": "Un peu de pluie au Brésil" 
    }, 
    { 
    "title": "Iguazu" 
    }, 
    { 
    "title": "San José" 
    }, 
    { 
    "title": "Adieu à Buenos Aires" 
    }, 
    { 
    "title": "Traversons en Uruguay" 
    }, 
    { 
    "title": "Retour à Buenos Aires" 
    }, 
    { 
    "title": "Fin de l'aventure Patagonienne" 
    }, 
    { 
    "title": "Les fameuses tours nous surprennent" 
    }, 
    { 
    "title": "Un peu de pluie pour se changer les idées" 
    }, 
    { 
    "title": "Valle Francés" 
    } 
] 
} 

但是,如果我增加的maxResults參數,

https://www.googleapis.com/blogger/v3/blogs/3089072491354463482/posts?maxResults=21&fields=items(title)&key=AIzaSyAJO5J-pRCaGOIeRLIJfvAPwxpMLKvwebU

我得到以下錯誤:

{ 
"error": { 
    "errors": [ 
    { 
    "domain": "global", 
    "reason": "invalid", 
    "message": "Invalid Value" 
    } 
    ], 
    "code": 400, 
    "message": "Invalid Value" 
} 
} 

我怎麼能增加限制,即我可以獲取後的最大值是多少?

感謝,

薩科

回答

6

我認爲API僅限於拉20個結果的最大值。

因此,要獲取超過20個結果,您必須使用參數API中指定的pageToken參數。

您的第一個請求應該包括nextPageToken,所以您將在響應中包含它。比使用這個令牌來檢索下一頁等等。

你的第一個請求必須是這樣的:

https://www.googleapis.com/blogger/v3/blogs/3089072491354463482/posts?maxResults=20&fields=items%28title%29%2CnextPageToken&key=AIzaSyAJO5J-pRCaGOIeRLIJfvAPwxpMLKvwebU

這裏是預期的結果:

{ 
"nextPageToken": "CgkIChignPaz5ycQ-rn0pIfipe8q", 
"items": [ 
    { 
    "title": "El Caballero" 
    }, 
    { 
    "title": "Une traversée de frontière… étonnante!" 
    }, 
    { 
    "title": "Hasta luego querida Argentina!" 
    }, 
    { 
    "title": "Dernier jour en Argentine" 
    }, 
    { 
    "title": "Humahuaca" 
    }, 
    { 
    "title": "Purmamarca" 
    }, 
    { 
    "title": "Tilcara" 
    }, 
    { 
    "title": "Premières grèves" 
    }, 
    { 
    "title": "Le Nord Argentin: Salta" 
    }, 
    { 
    "title": "Ca en fait de l'eau tout ça..." 
    } 
] 
} 

現在,所有你需要做的是選擇的結果"nextPageToken": "CgkIChignPaz5ycQ-rn0pIfipe8q",包括它在你的下一個請求是這樣的:

https://www.googleapis.com/blogger/v3/blogs/3089072491354463482/posts?%20maxResults=20&pageToken=CgkIChignPaz5ycQ-rn0pIfipe8q&fields=items%28title%29%2CnextPageToken&key=AIzaSyAJO5J-pRCaGOIeRLIJfvAPwxpMLKvwebU

除了在下一個請求中使用新的`nextPageToken`之外,結果應該顯示下20個帖子。

+0

非常感謝!有趣的是,當使用nextPageToken參數時,maxResults參數似乎被忽略。 – nbeuchat

2

我實施了Walid Laribi建議的一個旅行博客頁面,該頁面檢索博客中所有帖子的位置並繪製旅行期間拍攝的路徑(blog)。

獲取所有職位的位置,我必須首先檢索第10個職位,並給了我nextPageToken的腳本:

<script src="https://www.googleapis.com/blogger/v3/blogs/3089072491354463482/posts?fields=nextPageToken,items(title,location(name,lat,lng),url,published)&key=AIzaSyAJO5J-pRCaGOIeRLIJfvAPwxpMLKvwebU&callback=handleResponse"> 

在前面的腳本的回調,我們可以獲取每個帖子的位置以及創建並執行腳本以獲取下一篇文章:

// Get latitude/longitude from Blogger 
function handleResponse(response) { 
for(i=0; i< response.items.length; i++){ 
    if(response.items[i].location != undefined){ 
    Lat.push(response.items[i].location.lat); 
    Lng.push(response.items[i].location.lng); 
    // etc. 
    } 
} 

if(response.nextPageToken != undefined){ 
    var srctxt = 'https://www.googleapis.com/blogger/v3/blogs/3089072491354463482/posts?fields=nextPageToken,items(title,location(name,lat,lng),url,published)&key=AIzaSyAJO5J-pRCaGOIeRLIJfvAPwxpMLKvwebU&callback=handleResponse&pageToken=' + response.nextPageToken; 

    // Execute the new script 
    var head = document.getElementsByTagName('head')[0]; 
    var scriptElement = document.createElement('script'); 
    scriptElement.setAttribute('type', 'text/javascript'); 
    scriptElement.setAttribute('src', srctxt); 
    head.appendChild(scriptElement); 
    head.removeChild(scriptElement); 
} 
}