2010/02/07

Blogger APIでLabelを更新する

以前に投稿したBlogger APIでLabelのリストを取得するでラベルについて扱いました。 ブログ記事の投稿をBlogger API+anakiaで自動化した時の作業ログの一部だったのですが、最近になってブログ更新時にラベルのアップデートができていない事に気がつきました。

サンプルプログラムで未実装な機能

gdata-2.0.5に付属のサンプルプログラムは便利ですが、ラベル周りの取り扱いについては実装がありません。 だからというわけではないのですが、おそらくプログラミングした時に後回しにした機能をすっかり忘れていたのでしょう。不覚にも2ヶ月近く経ってから気がつく事になりました。

最近はIPv6周りの作業ばかりしていたので、気分転換を兼ねてさくっとラベルの過不足を判断するコードを追加する事にしました。

自作スクリプトの差分だけ

+    ## check the updated labels
+    terms = [] ## preserve all category items
+    remove_items = []  ## it will be removed later
+    for item in article.category:
+      terms.append(item.term)
+      if item.term not in labels:
+        ## It's safe to record the invalid item list.
+        ## If item is removed directly from article.category, then the loop will be hang up.
+        remove_items.append(item)  
+        pass
+      pass
+    ## remove old label
+    for item in remove_items:
+      article.category.remove(item)
+      pass
+    ## add new label
+    for item in labels:
+      if item not in terms:
+        article.add_label(item)
+        pass
+      pass

     ## commit the all changes
     self.client.update(article)
     pass

labelsリストには新しいラベル(type:str)が要素として入っている事がわかれば、他は解説は不要かと思います。 新たにメソッドに分割するべき分量ですが、とりあえず作業ログとして残しておきます。

atom要素を操作するためのwrapperとなるadd_labelメソッドが準備されているのは良いんですけどね、同じようなremove_labelメソッドぐらいは欲しかったかなぁ…。それは自作するから良いとして、やっぱりAPIはソースコードが公開されていないと触りたくないですね。

0 件のコメント: