守破離でいこう! -Let's go with SyuHaRi!-

2007/12/11

[再] Bloggerのクラシックテンプレート(FTP公開)でもラベル一覧を表示したい

以前にBloggerのクラシックテンプレート(FTP公開)でもラベル一覧を表示する方法を紹介したのですが、不具合が発見されたので再エントリーします。

発見された不具合は、ラベル名にスペースがある場合マルチバイト文字と誤判定しBase64エンコードしてしまうというものです。
URLエンコードした際に"%"の有無で判定していたのですが、これではスペース(%20)等の記号を含む場合にうまくありません。

そしてさらに、Bloggerという文字列がラベルに含まれていた場合、Base64エンコードではなく、URLエンコードになるという現象も確認しました。
Bloggerという単語以外にも発生するのかは不明です・・・。だれか詳しい方教えてください(泣

というわけで、修正版は下記からお願いいたします。折角ですので、コード生成機を作成しました。
当記事を参考にされた方、すみませんでした!お手数ですが、修正をお願いいたします。

なお、前回同様下記コードの実行には別途Base64エンコードのライブラリが必要です。
Free code and tutorialsにある、Javascript base64 encoding等を予め、読み込ませる必要がありますので、ご注意ください。

Update:
2008/01/29現在、http://www.blogger.com/feeds/UserID/blogs/BlogID?alt=json-in-script&callback=listLabelsというリクエストでエラーが帰ってきてしまいます。
調べてみると、同じ現象にあっている人がいるようですが、残念ながら解決策はまだないようです。
Public Metafeed Callback Error - Blogger Data API | Google グループ
※中桐 秀起さん、コメントありがとうございます!

Blogger Data APIが変更になって、Google AJAX APIからmetafeedを取得するようになった気がするのですが、既存のコードをあまり修正しないように対応してみます。
単純に、全ポストデータを取得しラベルを抽出します。
しかしながら、ラベルを取得するのに、全フィードを取得しなければいけないので、
もっとスマートなやり方があれば是非お知らせください!

Update2:
http://www.blogger.com/feeds/UserID/blogs からは、callbackが使えるようなので、ユーザのブログ情報を取得し、指定のBlogIDのCategory(ラベル)を表示するように修正しました。

コードは下記の生成機より、取得できます。
念のためこれまでのコードは、[Genarate old]から取得できます。

ラベルリスト生成機
UserID:プロフィールページのURLの最後等
例)http://www.blogger.com/profile/08755644619888194912
BlogID: 投稿画面URLの最後等
例)http://www.blogger.com/posts.g?blogID=1303966254927872449
ベースURL:ラベルディレクトリのURLまたはパス
タイトル:リストのタイトル
FTP公開:FTP公開モードの場合チェック
    

ラベル:

naoki 19:19
HaloScan: |

3 Comments:

Naoki様

大変ありがとうございました。無事にラベル表示できるようになりました。
原因は、ご指摘の通りBase64エンコードのライブラリでした。正確にはヘッダー内での位置に問題があったようです。どうも他のスクリプトとの読込順序が良くなかった?のか位置を微妙に変えることで(metaタグよりも前に置いたら)機能するようになりました。


しかし、ついでにお聞きしてしまって恐縮ですが、このBase64のスクリプトを読み込むようになったら、なぜか動画の読込時に、動画のembedの後に動画のサムネイルが表示されるようになってしまいました。今まではなかったのですが・・・

これから原因を探ってみますが、不思議です。
いつも参考にさせていただいてます。
ラベル一覧も昨年末から表示させるようになって便利に使わせていただいていたのですが、最近ラベル一覧が表示されなくなっていることに気付きました。
ちなみに、以下のようなURLをリクエストしても・・・http://www.blogger.com/feeds/XXXXXXXXXXX/blogs/XXXXXXX?alt=json-in-script&callback=listLabels

The 'callback' parameter is only supported on feeds.
こんなエラーが帰ってきてしまいます。

何かわかれば教えていただけると助かります。
useridのみでcallbackさせておいて、対象blogの情報はcallback後にblogidで絞り込む・・・感動しました。

久しぶりにラベル一覧を復活させることが出来て、(自分自身にとって)使い勝手の良いブログが戻ってきました。

ありがとうございました。

Add a comment