« 2006年12月 | メイン | 2007年02月 »

2007年01月 アーカイブ

2007年01月02日

C::DispatchType::Chainedで/*/hoge/*というパスを実現する

CatalystのDispatchの話。 例えば多言語対応のページを作るときにパスを

http://localhost:3000/ja/hoge/xxxxxx
http://localhost:3000/en/hoge/xxxxxx
http://localhost:3000/de/hoge/xxxxxx

としたい時になるべくDRYで、 ja、en、deといったパラメータを取得するにはCatalyst::DispatchType::Chainedを使う。 Adventで紹介された→Catalyst Advent Calendar - Day 10 が、自分でいじってみないとよくわからないのでソース眺めながらシンプルに作ってみるとこんな感じだろうか。

package Chained::Controller::Hoge;

use strict;
use warnings;
use base 'Catalyst::Controller';

#  Catalyst::DispatchType::Chainedを使って /*/hoge/* というURLを実現する
#  例 http://localhost:3000/ja/hoge/12345 でjaの部分をenとかdeにしたい場合

#  jaの部分をキャプチャする
sub language : Chained PathPart('') CaptureArgs(1){
    my ($self, $c, $language) = @_;
    $c->stash->{language} = $language;
}
#  hogeというパスを処理するメソッド
sub show_hoge :  Chained('language') PathPart('hoge') Args(1){
    my ( $self, $c, $args ) = @_;
    $c->response->body( $c->stash->{language} . ': hoge :' . $args );
}

1;

2007年01月04日

AskビデオのCustomFeed::Config asset

Askビデオのプロフィールページ(例:Askビデオ : yusukebeさんのプロフィール)から自分がアップロードしたビデオ情報をPlaggerで取得する。 CustomFeed::Configを使う。そのassetは今のところこんな感じ。

author: Yusuke Wada
match: http://video\.ask\.jp/profile\.do\?user=.*?
extract: \[\'profile_videos\'\]\.addImage\(new ytImage\("(.*?)".*?(watch.do\?v=.*?)".*?"(.*?)".*?(\d{4}/\d{2}/\d{2})
extract_capture: icon link title date
extract_after_hook: |
  $data->{icon} = "http://video.ask.jp" . $data->{icon};
  $data->{link} = "http://video.ask.jp/" . $data->{link};

2007年01月15日

CatalystをJSONプロキシとして使う

RESTで結果の出力がXML形式のウェブサービスの出力をJSONで受け取りたい。 Catalystのサイトの場合、LWP::Simple、XML::Simple、Catalsyt::View::JSONという3つの組み合わせで簡単にできる。まずはViewを作る。

$ ./script/myapp_create.pl view JSON JSON

Controllerで以下のようにウェブサービスを叩いてJSONで出力。あとはブラウザ側でごにょごにょと。

use LWP::Simple;
use XML::Simple;

sub hoge : Local{
    my ($self,$c) = @_;
    my $url = 'http://serviceurl&Keywords=' . $c->req->params->{keyword};
    my $content = get($url);
    my $ref = XMLin($content);
    $c->stash->{hoge} = $ref;
    $c->forward('View::JSON');
}

2007年01月20日

Meadowのundoとredoのキーバインド

いまさらMeadowのundoのキーバインドを変えて、redoもできるようにした。 redoは redo.plをsite-lispとかに入れる必要あり。 以下、.emacs

(global-set-key "\C-\\" 'undo)
(require 'redo)
(global-set-key "\C-_" 'redo)

2007年01月31日

pre_save,post_saveコールバックの罠

MovableTypeのオブジェクトの話。 例として新規にエントリーがポストされた時、コールバックメソッドを実行したい。

MT::Entry->add_callback('post_save',9,undef,\&handler);

と、するとはまる場合がある。例えばhandlerメソッドで、エントリーの所属するカテゴリーを取得しようとしてもとってこれない(二度目に保存すると取得できたりする)。オブジェクトが生成されるタイミングの問題っぽい。以下のようにCMSPostSave.entryを指定すると上記の問題は解決する。

MT->add_callback('CMSPostSave.entry', 9 , undef, \&handler);

About 2007年01月

2007年01月にブログ「Yusukebe::Tech」に投稿されたすべてのエントリーです。過去のものから新しいものへ順番に並んでいます。

前のアーカイブは2006年12月です。

次のアーカイブは2007年02月です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type 3.35

ブログSEO対策:track word seo