2009/12/21

Blogger APIでLabelのリストを取得する

xmlファイルからbloggerに投稿できるようにしたまでは良かったのですが、 自分がどんなラベルを設定しているか覚えているのが難しくなりました。 以前は一覧から選択すれば良かったのですけれが…。 そこで今回はBlogger APIを使って"ラベル"の一覧を取得しようと思います。

ラベルを一括取得するAPIはない模様…

どうやらエントリを引き出して、その中に設定されているカテゴリー情報を抜き出す必要があるようです。 BloggerExample.pyを元に次のようなメソッドを追加して呼び出してみます。

def list_labels(self):
  labels = []
  query = gdata.blogger.client.Query(max_results="1000")
  feed = self.client.get_posts(self.blog_id, query)
  print feed.entry[0].updated
  for entry in feed.entry:
    for category in entry.category:
      labels.append(category.term)
      pass
    pass
  
  ## Generating output by two phase sort.
  l = []
  for label in set(labels):
    l.append(label)
    pass
  for label in sorted(l):
    print label
    pass
  pass

この中で Query オブジェクトを使っていますが、デフォルト25件までのところ最大1000件までのブログエントリを取って、その中にあるラべル情報を取り出しています。 1000件の中に含まれていないラベルなら使わなくて良いでしょうけれど、最後までループを回す方法が、このAPIの中にはないので、こういう実装になっています。

実は gdata.clinent.GDClient::get_next() の仕組みを使えばループは出来るんですが、 Query を使うのと大差はないので止めました。

クラシックテンプレートで使えるもう一つの方法

この画面にも右側にラベル一覧が表示されているので、DOM+XPathで解決じゃないかな、 とか思いつつ無視して一気に進みました。

ちなみにこのLabels一覧は Jason Sutter さんの方法でJavaScriptを使って生成しています。 その中でアクセスしているURLからラベルの一覧を取得するURL、 http://www.blogger.com/feeds/USERID/blogs/BLOGID 、を使います。

Ubuntu 8.04に入れている xgrepawk を使って、次のようにラベルのリストをコマンドラインで取る事ができます。

$ wget -O- http://www.blogger.com/feeds/USERID/blogs/BLOGID| xgrep -x '//@term' | awk -F= '/term/ {print $2}'
"趣味"
"プログラミング"
...

解決策はいろいろありますが、まぁこれでラベルをちゃんと付けるようにしましょう。 でもuserIDが漏洩してしまうと、いくつか問題がありますね。 まぁ隠している情報じゃないからいいけれど、そのうちテンプレートを直しましょう。

2009/12/24追記:
クラシックテンプレートを使っているとラベル一覧を表示する方法がなかったので、JavaScriptを使ってラベルを表示していましたが、テンプレートをアップグレードして止めました。 上記URLにはラベル以外の情報も含まれています。 特に隠す情報でもなかったのですが、一般的には良くない方法といえると思います。

0 件のコメント: