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公開モードの場合チェック

    



5 件のコメント:

Yasty さんのコメント...

Naoki様

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


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

これから原因を探ってみますが、不思議です。

hizoo1999 さんのコメント...

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

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

何かわかれば教えていただけると助かります。

hizoo1999 さんのコメント...

useridのみでcallbackさせておいて、対象blogの情報はcallback後にblogidで絞り込む・・・感動しました。

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

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

tak さんのコメント...

初めまして。
ブロガーにカテゴリー追加することができ、よろこんでいるtakといいます。

一つお聞きしたいことがあるのですが、ラベルの横に何件投稿があるか表示したいのですが、例えば

あれ(3)
これ(5)
それ(2)

みたいな感じで表示する方法をご存知でしたらおしえていただけないでしょうか?

いろいろと探しまわってるんですが、FTP経由でこれはできるんですかね?anyways,ありがとうございます!

naoki さんのコメント...

> tak さん
残念ながら、いまのところラベル毎の記事件数を一括で取得する API はないようです。
ラベルそれぞれにて、記事数を取得するしか方法はないみたいですね。
参考までに、各ラベル(カテゴリ)の記事を取得するには、
http://www.blogger.com/feeds/[BlogID]/posts/full/-/[Category]
とします。
たとえば、次のようになります。
http://www.blogger.com/feeds/1303966254927872449/posts/full/-/blogger