Python

Django モデルオブジェクトを何としてでも JSON に変換する

今回は説明を省略していくので注意。 あなたは models.py にモデルを定義しているとします。 # # models.py # from django.db import models class Item(models.Model): name = CharField(max_length=50, primary_key=True) tags = models.ManyToManyField(T…

文字列を is 演算子で比較するのは危険

ascii 文字列は ==, is のどちらでも同じ結果を返します。 一方、unicode 文字列は is で比較した場合の結果が異なります。 # ascii 文字列の比較 a = 'str' b = 'str' a == b >>> True a is b >>> True # unicode 文字列の比較 a = u'str' b = u'str' a == …

外部から Django プロジェクトのデータベースを操作する

Django プロジェクト(ディレクトリ)の外部にある Python コードから、Django アプリケーションのデータベースを操作します。 ドキュメンテーションにあるように、モデルをインポートする前に以下の手順を実行しておきます。 1. プロジェクトのパッケージを…

Django のテンプレートシステムをローカルアプリケーションで使う

Python で実装された Web アプリケーションフレームワーク Django の HTML テンプレートエンジンだけを、スタンドアロン(ローカル・アプリケーション)で利用します。以下の Python スクリプトを renderer.py などの名前で保存して、実行します。 #!/usr/bi…

説明文に含まれるニコニコ動画のリンク記法を タグに置換する正規表現

テキスト中に含まれるニコニコ動画のリンク記法(動画 ID)をすべて <a> タグリンクに置換する Python 正規表現です。sm[0-9]+ や mylist/[0-9]+ のような数値が付くリンク記法に対応。 import re adict = { 'sm': '<a href="http://www.nicovideo.jp/watch/\g<1>">\g<1></a>', 'nm': '<a href="http://www.nicovideo.jp/watch/\g<1>">\g<1></a>', 'lv': '</a>

ニコニコ動画ランキングから「ゆっくり実況プレイ」タグが含まれる動画を抽出する

ニコニコ動画 ゲーム・デイリー・ランキング 100 件から、特定タグ(ゆっくり実況プレイ)を含む動画だけを抽出します。 使用する RSS フィード: http://www.nicovideo.jp/ranking/fav/daily/game?rss=2.0 使用するニコニコ動画 API:getthumbinfo このスク…

ニコニコ動画 URL から動画 ID (sm, nm, so) 以下を抽出する正規表現

ランキング一覧の URL から動画 ID (sm***, nm***, so***) を抽出する Python スクリプトです。 パターンは '[sn][mo]\d+' を使ってみました。 import re urls = [ 'http://www.nicovideo.jp/watch/sm123456', 'http://www.nicovideo.jp/watch/nm123456', 'h…

NNDD で重複取得されたコメントを削除するスクリプトを作りました

ニコニコ動画ダウンロード&ビデオ再生ソフトの NNDD(v1_27_6) を愛用しているのですが、Player 設定で「コメントを再生のたびに更新する - コメント更新時にローカルに保存済みのコメントに追記」を有効にしていると、NNDD でコメント投稿後に再度メインウ…

グローバル変数は開放されます

アキノチューブ では、10分間隔で各カテゴリを巡回し、新しいエントリがアップロードされていないか確認する CronJob が動作しています。 ここで、更新したカテゴリのインデックス番号を保持するのにグローバル変数を使ってみたのですが・・・ # This is bad…

今から数時間前・数日前のエンティティをまとめて削除するクエリ

datetime モジュールの timedelta を有効活用します。 まず、次のようなモデルクラスの定義を仮定します。 # # models.py # from google.appengine.ext import db # データストア定義 class Entry(db.Model): published = db.DateTimeProperty() timedelta([…

GoogleAppEngine の Xcode プロジェクトを PyChecker でエラーチェックする

私の使っている MacOSX 10.6 はデフォルトで python2.6 を使用するため、GoogleAppEngine の python2.5 準拠のプロジェクトで問題なく動作させるために設定した項目をいくつか書きます。 PyChecker について Google Python スタイルガイド で以下のように記…

ImportError がなかなか解決できないときは、相互インポート状態を疑う

ImportError: cannot import name xxxxHandler がなかなか解決できなかったのですが、よく確認すると継承元クラスのモジュールと継承先クラスのモジュールが互いに import し合っていました。 # # module_a.py # import module_b # # module_b.py # import m…

少し RSS コンテンツを豊富にしてみました

サムネイル画像やキーワード等を追加しました。 RSS 用の HTML テンプレートとして、以下を作成しました。 ここではテンプレート値として article エンティティを利用しています。 <img src="/static/images/thumbnail/{{ article.site.thumbnail }}" alt="thumbnail" align="left" hspace="15"/> <h3>{{ article.site.name }}</h3> <p>更新日:{{ artic…</p>

Xcode で Google App Engine 開発する場合の「ターゲット」設定

以前は Eclipse も使っていたのですが、どうも挙動が気に入らなくてプログラム開発は意地でも Xcode を使うようにしています。 さて、Google App Engine を Xcode で開発する際、基本的なことは変わりませんが、エラーチェックやテストケースの実行スクリプ…

locale に依存しないプログラムにする

import locale locale.setlocale(locale.LC_ALL, 'ja_JP') このように Google App Engine で locale の設定を試みると、 locale.Error('locale emulation only supports "C" locale') の例外を目にします。Google App Engine では locale による日本時間の取…

日本語リージョンで取得可能な YouTube API のカテゴリフィード

YouTube API でカテゴリ毎のフィードを取得したい場合、URI 構成の例として次のようなものが有効です。 http://gdata.youtube.com/feeds/api/standardfeeds/JP/most_viewed_{カテゴリ名}?time=today {カテゴリ名} には「映画とアニメ」であれば、Film が入り…

Python ユニットテスト用の拡張ライブラリを公開しました

ext-unittest を GitHub に公開してみました。 インスタンスの同等性を評価するためのユニットテスト拡張ライブラリです。 QUnit で謂う所の same(actual, expected) のような動作が期待されます。 オブジェクト ID の異なる二つのインスタンスを比較する目…

or を用いた代入は順序に気をつける

代入式で or を用いる場合、None や '' や Null 等は or の後ろに置く。 def assign_string(value): str = value or '' # 良い例 # if not value, |str| is '' str = '' or value # 悪い例 # if not value, |str| is None