今、簡単なアプリケーションを作成しているのですが、ブラウザを判定したい場合の方法を調べました。
■[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 コメント:
コメントを投稿