2009-01-29

Google App Engineで構築したサイトの更新情報をtwitterに通知する方法

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Google App Engine上に構築したSOBARCOに新規にデータが登録されたらtwitterで通知してみたいなぁと思って調べてみました。

http://handasse.blogspot.com/2008/06/google-app-engine-twitter.html
にやり方が紹介されていたのですが、それと一緒にGoogle App Engineからtwitterへの通信が遮断されているとの情報も紹介してくれていました。
2008/06ごろの話なので、今はひょっとしたら問題なくできるかもしれませんが、とりあえずこちらで紹介されていた方法はあきらめてみました。

サイトが更新された時に利用されるものといったらRSSだろうということでまずはRSSを配信できるようにしてみようと思ってみました。
そしてRSS配信できれば、blogが更新されたらtwitterに通知してくれる仕組みがあるのでそれを利用することでサイトの更新をtwitterに通知できそうだなぁと思ってみました。
実際やってみると更新してから通知されるまで設定によってはかなり遅く感じたりもしますが、とにかく通知できるということでよしとしてみました。
(その後、どういうわけか初回しか適用されないで、その後の更新がうまくいっていない感じです。ちなみにRSSでなくてAtomに変えてみましたが同じでした。)

なのでまずはRSS配信ですが、そのやり方は、
http://d.hatena.ne.jp/furyu-tei/20090108/1231437373
に紹介してくれていました。
こちらではAmazonさんを利用した例を紹介してくれていますし、肝心のところだけ抜粋して書いてくれています。
私の方も抜粋ですが、こちらのサイトを参考に以下のようにしてみました。

from django.utils import feedgenerator

fncfeed=feedgenerator.Rss201rev2Feed
#トップ要素を作成
feed=fncfeed(
title='SOBARCO'
, link='http://sobarco.appspot.com/'
, description='SOBARCO is Social Barcode!ケータイでバーコードを撮って公開しよう! '
, language='ja'
)

#必要に応じてitemを追加していく
feed.add_item(
title=タイトルに表示したい内容です
, categories=[アイテムのカテゴリをリスト形式で指定することで複数のcategoryを作ってくれます。]
, link=リンク先
, description=説明文みたなもの
, pubdate=日付データGAEのデータストアの日付型のカラムをそのまま突っ込めます。
)
#出力
self.response.headers['Content-Type']='text/xml; charset=utf-8'
self.response.out.write(feed.writeString('utf-8'))


ここで使っているdjangoのfeedgeneratorの説明として
http://djangoproject.jp/doc/ja/1.0/ref/contrib/syndication.html#django.contrib.syndication.django.utils.feedgenerator.Rss201rev2Feed
を参考にさせていただきました。

他にもRSSを作ったならば、サイトで自動でRSSを発見しもらうためにRSS auto-discoveryの設定を行うために
http://www.infomaker.jp/blog/archives/2005/individual/05_10_2343.html
を参考にさせていただき、
念のためRSSの仕様を確認するため
http://www.futomi.com/lecture/japanese/rss20.html
を参考にさせていただきました。

最後にブログの更新をtwitterに通知する方法は、
http://www.ideaxidea.com/archives/2008/05/twitter_1.html
を参考にさせていただきました。

2009-01-02

JAN/EANバーコードからそれが何かを判別する方法

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
SOBARCOでは、携帯の専用アプリを利用してカメラでJAN/EANバーコードを撮り、それから撮影したものがなんであるかを判別しています。
(別にカメラで撮らなくてもバーコードを入力する場所は実際にあるのですけどね)

判別は基本的に、amazonのWEBサービスを利用して行っています。
本とか限定でバーコードで検索する方法は、比較的簡単にわかったのですが本とかCDとかカテゴリを指定せずにカテゴリ横断でバーコードを利用した検索する方法がなかなか見つからなかったのですが、
http://postcard.blog.ocn.ne.jp/itazura/2006/10/cddvd_c5e4.htmlにやり方が書いてありました。

要約するとItemSearchを使うときにSearchIndexをBlendedにしてKeywordsにバーコードを与えてやれば、カテゴリを問わず検索ができるということです。

これの欠点としては、実際には単に全文検索をやっているような気がするので、別にバーコードでないものも普通に検索できます。
なのでEANでないISBNとか入れても検索はできます。
バーコードのみとかのガードをしたいとなればちゃんと以下を参考にチェックデジットのチェックをした方がよいと思います。
http://www.dsri.jp/jan/check_digit.htm#img_01

amazonさんでも残念ながらすべてバーコードが判別できるわけではありません。
そこでSOBARCOではamazonで検索しても分からなかった場合は、
はてなさんのはてなキーワードにJAN/EAN一覧があるのでそちらを利用しています。
http://d.hatena.ne.jp/ean/4909411030681
のように
http://d.hatena.ne.jp/ean/バーコード
のページを取得して、その内容をパースして調べています。
バーコードが登録されていなければ、レスポンスはリダイレクトされるのでレスポンスコードを判別することで登録されているかどうかはわかります。

これでも検索できないものは当然すごくあります。
普通にコカコーラが判別できなかったのが、ちょっと予想外だったりしました。