2009-02-13

Google App Engineの本番環境のMemcacheエントリをいじる

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Google App Engineのローカルの開発環境には、以下のURLでアクセスできる
http://localhost:8080/_ah/admin/memcache
Memcacheのエントリを見たりいじったりできる環境があるのですが、
本番環境にありません。
SOBARCOでは、携帯キャリアのIPアドレスをMemcacheにキャッシュさせているのですが、クローラーに対応していなかったため、携帯用のクローラーが来てもPCサイトの方を表示していました。
ちょっともったいなぁと思って、携帯用クローラーのIPも対応できるように改造したのですが、本番用のMemcacheのキャッシュが切れるまで待つのいやだなぁと思っていたのです。
自分でMemcacheをいじる管理画面を作るしかないのかなぁとか思っていたのですが、
http://www.moongift.jp/2009/02/app_engine_console/
で、App Engine Consoleという本番環境でのPythonコンソールがあることを知り、これを利用することにしました。

導入方法は、簡単です。
1.以下のサイトからApp Engine Consoleのzipファイルをダウンロードする。
http://www.proven-corporation.com/software/app-engine-console/
2.zipファイルを展開して、展開して出来たconsoleディレクトリを自分のGoogle App Engineアプリケーションのディレクトリの直下に置きます。
 私の場合は、
 sobarco
  |-console
  |-app.yaml
 という感じです。
3.app.yamlにエントリを追加する。
 以下のような感じで追加です。

- url: /console/static
static_dir: console/app/view/static
login: admin

- url: /console.*
script: console/app/console.py
login: admin

ここでlogin: adminをつけた方がよいと思います。これでアプリケーションに対してadmin権限があるユーザでログインしていない限り表示されることがなくなります。
4.おまけでGoogle Analyticsを利用している場合は、console/config.pyのanalytics_idにAnalytics用のIDを記載する。
 書いておくと、App Engine ConsoleからAnalyticsに飛べるだけなので別に無理に記述する必要はないです。
5.本番環境へデプロイする。

本番環境にデプロイしたら、
/console
をつけてアクセスするとgoogleへのログイン画面が出てくるのでadmin権限のユーザでログインすると表示されます。
そこで表示されたコンソールで
from google.appengine.api import memcache
print memcache.get('key')
とすると現在keyに設定されている値を取得できます。
memcache.delete('key')
とするとkeyに設定されている値をキャッシュから消すことができます。

App Engine Consoleは、他にも普通にコンソールとして使えるのでMemcache以外にも便利に使えそうです。
普通にApp Engineの管理サイトに盛り込んでくれればいいのに・・・
と思ってしまうぐらいです。

2009-02-11

lxmlでのxmlnsが指定されているタグをxpathで検索する方法

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
pythonでxmlをいじるのにlxmlを使ってみているのですが、普通に使う分には
xmlを解析した後のオブジェクトで普通にxpathに渡してやればよいわけです。
xml.xpath('//rss/channel/title')
みたいな感じです。
しかし、xmlnsが指定されているタグの場合はただ指定しても取れないのです。ちゃんとネームスペースを指定する指定があるようでした。
xml.xpath('//t:feed/t:title',namespaces={'t':'http://www.w3.org/2005/Atom'})
みたいな感じです。

あと、ちなみにxpathであるタグの属性を取りたいときは、
xml.xpath('//t:feed/t:entry/t:category/@term',namespaces={'t':'http://www.w3.org/2005/Atom'})
な感じでまずはタグを指定して、その後に@で属性名をつけるととれるようです。

参考になるサイトは、本家ですが
http://codespeak.net/lxml/xpathxslt.html
です。

GreasemonkeyのAutoPagerizeにサイトを対応させる

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Firefoxを使っているとGreasemonkeyという任意のjavaスクリプトを実行させる環境をアドオンできるわけですが、その上でうごくAutoPagerizeというスクリプトがすごく便利なのです。
これは、次のページがある場合、先に読み込んでくれてページの下の方につなげてくれるもので次のページをがんがん画面をスクロールするだけで見ていけるものなのです。
そんな便利なツールにSOBARCOも対応させてみたいと思ってみたわけです。

本来ならば、SITEINFOというものをどっかに準備するみたいなのですが、記法もよくわからないし、どこに準備すればよいのかもいまいちわからなかったのです。

でも、SITEINFOというものがなくても対応させることができるようです。
その方法は、
http://d.hatena.ne.jp/swdyh/20070701/1183239979
が参考になります。

やるべきことは、以下のたったの二つです。
・次のページのリンク先をわかるようにする
・くっつけるブロックを指定する。
くっつけるブロックを指定したら、
最初のページのブロックのすぐ下に
次のページの先読みしたくっつけるブロックがくっつくことになります。

まず次のページのリンクには、rel="next"という属性をつけてやればよいようです。
具体的には、以下のような感じです。


くっつけるブロックの指定は、
class="autopagerize_page_element"
とつけてやればよいようです。
具体的には、

な感じでよいようです。