2010/04/27

[Google App Engine]ブラウザ判定

今、簡単なアプリケーションを作成しているのですが、ブラウザを判定したい場合の方法を調べました。

■[Python]Google App EngineでUserAgentを取得する
を参考にさせていただくと、「self.request.user_agent」と取得できると書いてあったので、これを使ってgf_getBrowser関数を考えてみます。

"""-------------------------------------------------------
ブラウザの判定
1:Internet Explore
2:chrome
3:firefox
4:iPad
5:iPod touch、iPhone
6:safari
7:その他ブラウザ
-------------------------------------------------------"""
def gf_getBrowser(auser_agent):

#小文字に変換
lv_user_agent = auser_agent.lower()

#Internet Exploreの場合
ln_ret = lv_user_agent.find("msie")
if ln_ret != -1:
return 1
#chromeの場合
ln_ret = lv_user_agent.find("chrome")
if ln_ret != -1:
return 2
#firefoxの場合
ln_ret = lv_user_agent.find("firefox")
if ln_ret != -1:
return 3
#ipadの場合
ln_ret = lv_user_agent.find("ipad")
if ln_ret != -1:
return 4
#ipod touch iPhoneの場合
ln_ret = lv_user_agent.find("iphone")
if ln_ret != -1:
return 5
#safariの場合
ln_ret = lv_user_agent.find("safari")
if ln_ret != -1:
return 6
#その他ブラウザの場合
return 7

class MainPage(webapp.RequestHandler):
def get(self):
#ブラウザの種類を取得
self.response.out.write(
gf_getBrowser(self.request.user_agent)
)

application = webapp.WSGIApplication(
[('/', MainPage)]
, debug=True
)

def main():
run_wsgi_app(application)

if __name__ == "__main__":
main()

で実行してみると、確かに、数値を得ることができました。
(IE、firefox、chromeで確認)

ただこのファンクションでどうしても気に入らないのが、引数を使っちゃっている点。

self.request.user_agentを引数にしないと、判定ができないかつ、if文の分岐よりも、self.request.user_agent自体が重要なのであって、関数内部でこれを生成したいなーっと。

そうしないと関数の独立性が保てないので致命傷。

もっといいやり方はないものだろうか??

他の参考
3.6.1 文字列メソッド

0 コメント:

コメントを投稿