Python

PyQuery で再びスクレイピング入門

Python でスクレイピングするときに便利なライブラリで、BeautifulSoup の他によく見かけるのが PyQuery。名前から想像つくと思いますが、HTML を jQuery と同じ感覚で操作できるライブラリです。 前回、BeautifulSoup を使ってはじめてのスクレイピングに挑…

Python と BeautifulSoup でスクレイピング入門

何個か Web アプリを作ったけど、そういえば、まだスクレイピングをやったことがありませんでした。ふり返っても、サービス内で処理が完結するものや、外部 API を呼び出すものばかり。今考えている Web サービスを実装するには、どうやらスクレイピングが必…

Windows のレジストリを読み書きするサンプルを書いてみた

ここのところ Python や Java ばかり触っています。たまには .NET の記事も書かないと怒られそうです。誰に怒れられるのかはわかりませんけど。.NET のネタが無いか考えていたら、Windows のレジストリ操作が必要な場面に遭遇したので、読み書きを行うサンプ…

ファイルをコピーしたりフォルダのシンボリックリンクを作成したりするスクリプト

「フォルダの場合はシンボリックリンクを作成し、ファイルの場合はコピーする」という作業が必要になったので、Python でスクリプトを書いてみました。自分用にメモ。 # -*- coding: utf-8 -*- import os import glob import shutil SRC_DIRS = [ "C:/Projec…

Python で LINQ to Object を実現する python-linq を書いてみた

仕事では C# を使っているせいか、Python でコレクションを操作するコード書いてるとき「LINQ 使えたらな〜」ってたまに思います。そういえば Python にはジェネレータとラムダ式があったな…。LINQ のメソッド構文なら Python で出来るかも。 LINQ to Object…

関数の引数に渡された値の型をチェックするデコレータを書いてみた

C# 暦の長い私が動的言語の Python に初めて触れたとき、関数の引数にいろんな型の値を渡せることを気持ち悪く感じました。今では慣れましたけど。 Python は動的言語なので、正常に動くかどうかは別として、関数の引数に何でも渡せます。その値が使えるかど…

Web アプリに Wiki 記法を簡単に導入できる Python の textile モジュール

Wiki 記法が好きです。Wiki 記法に似た、はてな記法も好きです。ドキュメントは出来れば Wiki に書きたいと常々思っています。実際、私がドキュメントを書くときはたいてい Wiki です。 Word は苦手です。出来上がるものは HTML で書いた方がマシだと思える…

Python で月末の日付を取得する方法

Python で、指定した月の月末の日付を date オブジェクトで取得する必要があって、実装してみたのでメモしておきます。 from datetime import date from calendar import monthrange def get_last_date(year, month): # monthrange は月の1日の曜日と日数を…

Python のマイクロフレームワーク『Flask』を試してみた

今更なんですか… 最近になって、『Flask』という Python のマイクロフレームワークの存在を知りました。フリスクじゃないよ。ずっと Kay や Django みたいなフルスタックフレームワークを追っていたから、Flask に気付くのが遅れました。…って、これは言い訳…

Kay Framework でも Blobstore を使ってみる

先日、App Engine で提供されている Blobstore を、webapp フレームワークで使っていました。 Google App Engine で Blobstore を使ってみる - present でも、実際のアプリ開発では Kay Framework を使っているわけで。 その Kay Framework ですけど、ちゃん…

Google App Engine で Blobstore を使ってみる

Google App Engine(以下 GAE) で画像とかファイルをアップロードするのどう実装しようか迷っていたら、「Blobstore 使えばいいよ〜」というアドバイスをもらいました。そういえば、Blobstore が提供されたことは知っていたけど、試したこと無かったな。 さっ…

Kay の Form を使った RESTful API でのリクエストチェック方法

Google App Engine + Kay Framework で RESTful な Web API を作成するとき、データの更新は HTTP メソッドの PUT を使っています。PUT では、更新に必要なデータがリクエストのボディで渡されてきます。データは JSON 形式を使うことが多いです。 リクエス…

Kay Framework でログイン必須のビューをテストする方法

Kay Framework に同梱されている werkzeug の Client クラスを使えば、ビューの単体テストができます。ただし万能ではなく、login_required デコレータがついたログイン必須のビューはテストできません。仕方ないので、テストしたい処理をログイン不要なメソ…

GAEのモデルからSilverlightのモデルを生成するスクリプト作った

最近実験しているのが、GAE/Python + Silverlight という構成のアプリ。GAE/Python で WebAPI を作って、それを Silverlight から呼び出すイメージです。近いうちにこのブログで連載する予定。 この構成で開発していると、GAE/Python のモデルと Silverlight…

0から1000までの0の数を数える

わんくま内でプチ祭りになっているので参戦。出遅れた感は否めないけど、気にしたら負けかな、と。C# は出尽くしたっぽいので、Python で挑戦。リスト内法表記を使って変態チックに書いてみた。 print(sum([str(n).count('0') for n in range(0, 1001)])) #=>…

Django-nonrel 事始め

Django-nonrel というプロジェクトがあるらしい Django-nonrel は「Django を NoSQL/NoRDB に対応させよう」というプロジェクト。Google App Engine のデータストアをはじめ、SmipleDB・MongoDB・CouchDB といった有名どころをサポートする予定みたい。Djang…

Google App Engine でタグ機能の実装を簡単にする taggable-mixin

昨今のソーシャルアプリではタグ機能はあたりまえ。そのタグ機能を Google App Engine で実装するのを助けるモジュールに、taggable-mixin があります。 taggable-mixin - A mixin class that adds taggability to Google AppEngine Model classes. - Google…

認証必須の URL は app.yaml ではなくデコレータで記述

Google App Engine(以下 GAE)で、ある URL をログイン必須や管理者専用にする方法として、app.yaml で指定する方法があります。でもこの方法だと、RequestHandler のコードを見たとき、ログイン必須なメソッドなのかが分らないので、好きじゃないです。「ロ…

Kay Framework に RESTful な API を実装するための機能が追加されていた

以前 appengine-rest-server を紹介したときに「Kay Frameworkに追加されないかな」なんて書いていたら、本当に追加されました。 23. 汎用ビューグループ — Kay v3.0.0 ドキュメント ソースコードを見たところ、appengine-rest-serverのソースコードをKayに…

Kay Framework で Model を JSON に変換する方法

以前 Google App Engine でモデルを JSON に変換する方法を紹介しました。 Google App Engine の Model を JSON に変換する方法 - present この時はわざわざ simplejson のカスタム Encoder を自作していましたが、Kay Framework を使う場合はもっと簡単な方…

appengne-rest-server で作る簡単 Web API

はじめに リッチな UI を持つ Web アプリを作るなら、クライアントは Ajax か Flash、または Silverlight を使うと思う。そうすると、表示するデータを非同期に JSON または XML で取得するために、Web API を実装することになる。でも、リクエストパラメー…

Kay Framework で Twitter につぶやきを投稿する方法

先日、Kay Framework で認証に Twitter の OAuth を使えるようになったので、今度はつぶやきを Twitter に投稿してみた。Twitter への投稿を urlfetch を使って一から実装するのは面倒なので、 Google App Engine 用の Twitter ライブラリ『AppEngine-OAuth-…

Kay Framework で認証に Twitter の OAuth を使う方法

Kay Framework は認証機能を提供しています 認証方法も多様で、Google アカウントを使った認証だけでなく、データストア認証*1や OpenID、さらには OAuth まで利用できます。 認証方法は Kay の認証ミドルウェア用バックエンドとして提供されています 簡単に…

webtest を使った Google App Engine アプリケーションのテスト

Google App Engine (以下 GAE)アプリケーションの、Web API 部分のテストを自動化するために、webtest というツールを導入してみた。webtest は WSGI アプリケーションをテストするための便利ツール。WSGI アプリケーションにダミーのリクエストを簡単に送る…

Google App Engine の Model を JSON に変換する方法

Google App Engine (以下 GAE) で結果を JSON で出力したい場合、GAE SDK に同梱されている Django の simplejson を使えばいい。ただ問題があって、simplejson で JSON にできるのは、Python の組み込み型*1だけ。Model や GqlQuery を JSON にはできない。…

Google App Engine でモジュールを動的にインポートする方法

Google App Engine(以下 GAE)でモジュールを動的にインポートするには、__import__関数を使えばいい。 # 動的にモジュールをインポートする def dynamic_import(name): mod = __import__(name, globals(), locals(), [], -1) components = name.split('.') f…

Kay Framework でログイン必須のビューを作る方法

Kay チュートリアルでも紹介されていますが、ログイン必須のビューを実装するなら、kay.auth.decorators.login_required デコレーターを使うのが手っ取り早いです。 from kay.auth.decorators import login_required @login_required def index(request): re…

はじめてのKay Framework

はじめに Google App Engine(以下 GAE) アプリの開発スピードを上げるために、Kay Framework を導入することにしました。ただ、導入に思いのほか時間がかかってしまったので、手順をメモしておきます。誰かの役に立てば幸いです。今回試した環境は次の通り。…

親がいるモデルをキー以外で取得するなら親指定必須

Google App Engine (以下 GAE) では、parent がいるモデルを get_by_key_name や get_by_id で取得する場合、parent を指定する必要がある。parent に指定するのは、モデルオブジェクトでもいいし、キーでもいい。これを知らなかったので、モデルを取得でき…

Google App Engine で集約例外ハンドラ

Google App Engine の webapp.RequestHandler には、ハンドラ内で例外が発生したときに呼び出される handle_exception メソッドがあります。このメソッド、デフォルトでは HTTP ステータスコードを 500 に設定するだけですが、これをオーバーライドして、動…