python
Up one levelPyDS UTF-8対応パッチ
- Category(s)
- python
- The URL to Trackback this entry is:
- http://coreblog.org/ats/25/tbping
WyPy
mooyaさんのところから,WyPyというPythonベースのWikiCloneを発見。
A
Minimal Python Wikiとある通り,23行と短いです。しかも,PEP8
Pythonコーディングスタイルガイドに沿って80行で折り返しされてこの長さ。Shortest Wiki
Contestで見事2位になっています:-)。
- Category(s)
- python
- The URL to Trackback this entry is:
- http://coreblog.org/ats/27/tbping
Re: WyPy
こんどはどうだ?
Weblogs.com Ping Specs
Blogの「更新報告」のためのプロトコル。XML-RPCを使ってBlogの更新状況を収集しているPINGサーバーがあって,そいつに対してエントリーの更新を知らせるわけです。更新のお知らせはリストになって配信されます。
Pythonで書くと数行でできちゃう。
import xmlrpclib
svr = xmlrpclib.Server("http://rpc.weblogs.com")
resp = svr.weblogUpdates.ping(\
"BlogTitle","http://entry.perma.link/")
ちなみに,xmlrpclibはZopeの?/lib/python/に入っています。Python 2.3からは標準でついてくる。
以下,関連リンク。
- Weblogs.com - 本家。
- Weblogs.Com XML-RPC interface - Weblogs.com PING仕様(英文)
- Myblog Japan - 日本でPINGサービスを行っているサイト
- なんか,PINGを送るとPermalinkに対してアクセスしてきて,RDFをパースするらしい。PINGとして送る情報にはURLとBlog名しかないので,その他の情報を得るために,ということのようだ。
- http://ping.bloggers.jp/ - Another Japanese PING service.
- Weblogs.com Ping Gateway to はてなアンテナ
ん,ああ,Permalinkを送るんじゃなくて,BlogのインデックスのURLを送るのか。でも,OptionでPermalinkも送れるようにしたろ。
- The URL to Trackback this entry is:
- http://coreblog.org/ats/82/tbping
PINGサーバーでBlogのタイプを判別
ウチのPINGサーバーは,PINGを受けると相手のサイトまで出かけて行って最新のEntryの情報を取りに行くようになっています。そのときついでに,Blogのタイプを判別するようにしました。とりあえず手始めとして,COREBlogとそれ以外を判別しています。
Blogツールが固有で持つURIの存在を調べる,という泥臭い方法を使っています。この方法だと種類を増やすのが面倒だな。なんか共通のインターフェースでBlogツールのタイプとかバージョンを取得できるようにならないかしら。
- Category(s)
- python
- development
- The URL to Trackback this entry is:
- http://coreblog.org/ats/115/tbping
Nested scopes
Entry追加時にPreviewできる機能を追加していたわけです。Entry本体を表示するDTML(entry_html)では,EntryクラスのMethodを呼んでいます。Preview時にもこのentry_htmlを使いたい。そこで,REQUEST.formに必要なMethodをlambdaを使ってくっつけようと思い立ちました。
どうせならEntry追加時に日時指定できるようにもしたい。フォームから入力された日付の文字列を,DateTimeインスタンスにいったん変換する - つまり,lambdaでローカル変数(またはMethodの引数)を使う必要があるわけです。が,Python 2.1まではこれができないことをすっかり忘れて,10分くらいハマってました。Nested scopesとか呼ばれている問題ですね。LL Saturdayで説明したのにすっかり忘れてた。
2.1で"from __future__ import nested_scopes"すれば解消される。でも,COREBlogをインストールしているZopeインスタンスすべてにこれを強制するわけにはいかない。「2.2以上じゃないと動かないよ」,というのはもっと言えない。
結局,lambdaに引数として渡してやると目的のことができるんだけど,書き方としては美しくないよなあ。
あと,REQUEST.form使った時点でZPTでモジュール書きづらくなっちゃったなあ。ZPT嫌いだからいいけど。重いし:-p。けっきょくデザイナーと技術者の分業なんてきれいにいかないし。
- The URL to Trackback this entry is:
- http://coreblog.org/ats/156/tbping
Re: Nested scopes
Entryを追加する時、Previewをしたいなぁと思ったときはstatusをCloseにして、追加して、Viewでみてました。( ソースにちょっと手を加えました。一行だけですが;-) )
今後はEntryを追加する時は必ずPreviewするようなつくりになるということですか?
Re: Nested scopes
>komさん
>今後はEntryを追加する時は必ずPreviewするようなつくりになるということですか?
Previewしたければできるし,一度も確認しなくても追加できます
わがまま転送フィルター
外出時脱ノートパソコン計画を実行に移すためには,携帯にメールを転送する必要があります。しかも私の要求は高いです。
- 条件設定が柔軟であること
- 特定のアドレスから来るメールを転送するだけでなく,転送しない条件を設定できる必要がある。不意に来るメール,メーラーだとInboxに入る様なメールも転送してほしい。かといってスパムは転送しないで欲しい
- 転送メールの成形機能が柔軟であること
- 連続改行の除去とか,引用部分の除去とか
- Webで転送/非転送の切り換えができること
- しかも,非転送中も定期的にメールを読み込んで,その分は既読扱いにしてくれる必要がある
全部の条件を満たしてくれる既存スクリプトがなさげなので,ちょっくら自作してみました。メールを読み込んで,条件をevalで評価して転送/非転送を判断する,という簡単なもの。UIDLをpickleで保存して,メールの未読管理を行ないます。簡単なWebインターフェースを作って,転送,非転送の切り換えをする。転送してほしい時は,携帯でフォームにアクセスして,転送モードに切り換えたりするわけです。
とりあえずサーバーに残っていた分のメールでテストをしてみたところ,なかなか良好。X-Mailerで弾くと,たいていのスパムは除去できるんですよね。Vodafoneの場合,ショートメールの受信は無料なので,多少多めに転送されても痛くないんですけど。
しばらくログを吐かせつつ運用してみて,フィルターを鍛えようと思っております。
- Category(s)
- python
- The URL to Trackback this entry is:
- http://coreblog.org/ats/183/tbping
xmlrpclibでUSER_AGENTを書き換える
from xmlrpclib import Server,Transport
しているとき
Transport.user_agent = "Some agent name"
とすると,XML-RPC時のUSER_AGENTを書き換えられるみたいですよ,岩田さん(^^;。なんだかたくさん更新報告いただいているみたいですが,どうしちゃったんでしょうか?
COREBlogのリリース版では,これを書き換えていなくて,xmlrpclib.py/1.0.0 (by www.pythonware.com)とデフォルトのまま出力されています。CentralCoreのPINGサーバーでは,この文字列をCOREBlogに書き換えて表示しています。なので,PyDSから送られたPINGもCOREBlogと表示されてしまっています。。。
次のバージョン(0.6b)では,ちゃんとしたUSER_AGENTを送るようになります。なお,私が使っている開発版では,すでにそうなっています:-)。
- The URL to Trackback this entry is:
- http://coreblog.org/ats/199/tbping
Re: xmlrpclibでUSER_AGENTを書き換える
ソース見たら、ping サーバのインスタンス生成するとこだけ user_agent の設定が抜けてました。後で作者に報告しときます。
PyDSでは修正を入れる度にpingが飛びます。Radio Userland をはじめ、そうゆう実装している Blog ソフトウェアが多いらしく、海外のpingサーバの多くは一定時間内に同一のブログからpingが飛んできても無視するようになってます。
Re: xmlrpclibでUSER_AGENTを書き換える
>yasusiiさん
失礼しましたm(_ _)m
#そういえば,weblogs.comなどは同一Blogから5分に一回しかPINGを受け付けないようになってますね。。。
http://rssrpc.weblogs.com/RPC2 に対する pingRSSUpdates の応答:
Thanks for the ping, however we can only accept one ping every half-hour. It's cool that you're updating so often, however, if I may be so bold as to offer some advice -- take a break, you'll enjoy life more.
ping さんくす。でもごめんね、うちは30分に1回しか ping を受けつけないのよ。きみの頻繁なブログ更新はすばらしいと思う。でも老婆心ながら加えると、少し休めよ。人生ほかにも楽しいことはあるぜ。
Re: xmlrpclibでUSER_AGENTを書き換える
>yasusiiさん
おや,30分に一回でしたか,失礼しました。。。
__slots__
__slots__って最初にみたとき,定義を書くのに面倒くさい分,実利面でなにかメリット(パフォーマンス的にとか)あるに違いない,と直感的に思ってたんですけど,石本さんのメモをみると,やはり歴然とした差があるみたい。dictionaryなめてその先につながっているオブジェクト判定してとかいうコストと,__slots__だけ見て,っつーコストを比べるだけでも差は出て来るんでしょうねえ。
データベースからクエリの結果をガバチョと持ってくる時,dictionaryにいれたりするとムチャクチャ時間がかかる。SQLObjectを継承したMetaclassあたりで__slots__使うようにすると幸せになれるのかもしれません。
- Category(s)
- python
- The URL to Trackback this entry is:
- http://coreblog.org/ats/298/tbping
socketのタイムアウト,HTTPアクセスのUserAgent
PINGサーバで最新エントリのタイトル取得を復活しました。
PINGのリクエストからは,BlogのタイトルとURLしか取得できません。SoftwareDesignの特集にも書きましたけど,清く正しいBlogにはエントリにRDFが埋め込んであって(ソースを見るとわかります),これを正規表現などを使ってパースすると,エントリのタイトルやPermalinkなどを取得できます。
で,このとき,アクセス先のサーバが混雑していたりして,延々応答しなかったような場合,RDF取得プロセスが重複して相手先のサーバに迷惑をかけたりして具合がよろしくありません。相手に迷惑をかけないためには,排他制御するのがひとつ。HTTPアクセスの際タイムアウトするようにするのがひとつ。
Python 2.3からはsocketモジュールにタイムアウトが設定できるようになったので,これを使ってみました。これがない時は,threadでurllib.urlopenをラップしてあげたりしていたものでした。それに比べるとラクチンになった。。。
import socket
socket.setdefaulttimeout(120)
で,urllib.urlopenなどを使ってPINGを送ってきたBlogの本文を取得するわけです。このときUserAgentを明示してあげて,「PINGサーバからやってきましたよ」と相手に伝えるとお行儀がよい。HTTPアクセスの際のUserAgentを帰る方法はいくつかありますが,手軽な方法ということで
import urllib2
request = urllib2.Request(url)
request.add_header('User-Agent','Existences PING Scanner 0.8b...')
opener = urllib2.build_opener()
body = opener.open(request).read()
みたいにしてみました。
たまに,埋め込みのRDFがないBlogがあって,タイトルを取りこぼすことがありますが,現状9割以上はとれている模様です:-)。
- The URL to Trackback this entry is:
- http://coreblog.org/ats/300/tbping


オラ程度のプログラミング能力と英語力でも何とかなるんだという、良い証明になったのではないかと。
全国の中学生プログラマよ、立ち上がれ!
#スイマセン,実験中でコメントにModerationがかかるようになってて,
#コメントの投稿がすぐに反映されてませんでした。。。
>yasusiiさん
ワケのわからない TrackBack が着弾していますが。
目標を見誤りました(笑)。すいません。