2008/02/04

Bloggerでのラベル一覧表示スクリプトを修正しました

以前、[再] Bloggerのクラシックテンプレート(FTP公開)でもラベル一覧を表示したいを紹介したのですが、BloggerのAPIでエラーが発生してしまい、動作しなくなってしまったので修正しました。


具体的には、

http://www.blogger.com/feeds/UserID/blogs/BlogID?alt=json-in-script&callback=listLabels

とリクエストしても、次のエラーが表示されます。

The 'callback' parameter is only supported on feeds.



この現象は、どうやらBloggerAPIの問題として投稿されているようです。

Public Metafeed Callback Error - Blogger Data API | Google グループ

Issue 341 - gdata-issues - Google Code


[再] Bloggerのクラシックテンプレート(FTP公開)でもラベル一覧を表示したいでは、アップデートとしてユーザのブログ一覧から絞り込む方法を紹介しましたが、Google グループのコメントにもあるように、callbackパラメータを省略した場合にデフォルトで設定される gdata.io.handleScriptLoaded を自身で定義することでも対応できます。


var gdata = function() {}
gdata.io = function() {}
gdata.io.handleScriptLoaded = function(root) {
var baseURL = '/blogs/ishikawa/labels/';
var baseHeading = "ラベル";
var isFTP = true;
var llDiv = document.getElementById('labelList');
var h2 = document.createElement('h2');
h2.className = 'sidebar-title';
var h2t = document.createTextNode(baseHeading);
h2.appendChild(h2t);
llDiv.appendChild(h2);
var ul = document.createElement('ul');
ul.id = 'label-list';
var regBlogId = new RegExp(/blog-(\d+)/);
var labelSort = new Array();
var entry = root.entry;
for (var p in entry.category) {
var category = entry.category[p];
labelSort[labelSort.length] = category.term;
}
labelSort.sort();
for (var r=0; r < labelSort.length; r++){
var li = document.createElement('li');
var a = document.createElement('a');
var label = new String(labelSort[r]);
var l = encodeURIComponent(label);
if (isFTP) {
if (label.indexOf('Blogger') >= 0) {
l = l.replace(/%/g, '=');
} else if (encodeURIComponent(label.replace(/[!-~\s]/g, '')).indexOf('%', 0) >= 0) {
l = Base64.encode(new String(label));
l = l.replace(/\//g, "__");
}
}
a.href = baseURL + l +'.html';
a.innerHTML = label + ' ';
li.appendChild(a);
ul.appendChild(li);
abnk = document.createTextNode(' ');
ul.appendChild(abnk);
}
llDiv.appendChild(ul);
}
</script>
<script type="text/javascript" src="http://www.blogger.com/feeds/08755644619888194912/blogs/1303966254927872449?alt=json-in-script" ></script>

しばらくは、様子を見る必要がありそうです。

0 件のコメント: