12 月 23
[php][CakePHP]日英・英日翻訳コンポーネント
ようやくCakePHPの勉強を開始しました。『CakePHPガイドブック』と『PHPフレームワーク完全マスター』で勉強しています。
以前[php][WebAPI]EJ, JE translation APIは翻訳WebAPIとして使えるで紹介したEJ, JE translation APIを用いてなんか変なもの作っています。CakePHPの作法がよくわからないのですが、コントローラの中に書くのは良くなさそうなので、適当に本を見てコンポーネントにしてみました。phpのバージョンやライブラリの依存については[php][WebAPI]EJ, JE translation APIは翻訳WebAPIとして使えるを参照してください。
PHP:
-
require_once 'HTTP/Client.php';
-
/**
-
* EJ, JE translation APIを用いて翻訳を行うコンポーネント
-
*
-
* @author uechoco
-
* @see http://muumoo.jp/news/2007/05/09/0translationapi.html
-
*/
-
-
class TranslateComponent extends Object
-
{
-
/**
-
* 固定ID定数
-
*/
-
const ID_EJ = 'ZM5oVmX92xGrFWiRJhOy0Q';
-
const ID_JE = 'ohZnaGr92xG36xIFyzUFzw';
-
-
/**
-
* コントローラを保持
-
*/
-
var $controller = null;
-
-
-
-
/**
-
* HTTP_Clientの初期化パラメータ
-
*
-
* @access private
-
*/
-
'timeout' => 10,
-
'allowRedirects' => true,
-
'maxRedirects' => 3
-
);
-
'Accept-Language' => 'ja-JP,ja;q=0.9,en;q=0.8'
-
);
-
-
/**
-
* POSTする先のURI
-
*
-
* @access private
-
*/
-
var $uri = 'http://pipes.yahoo.com/pipes/pipe.run';
-
-
-
/**
-
* POSTするパラメータ(固定部分)
-
*
-
* @access private
-
*/
-
'_run' => 1,
-
'_render' => 'json', // or rss
-
);
-
-
function
-
__construct()
-
{
-
parent::__construct();
-
}
-
-
function
-
startup(&$controller)
-
{
-
$this->controller =& $controller;
-
}
-
-
-
/**
-
* 英日翻訳
-
*/
-
function translate_ej(&$word)
-
{
-
return $this->_translate(TranslateComponent::ID_EJ, $word);
-
}
-
-
-
/**
-
* 日英翻訳
-
*/
-
function translate_je(&$word)
-
{
-
return $this->_translate(TranslateComponent::ID_JE, $word);
-
}
-
-
-
/**
-
* 翻訳本体
-
*/
-
function _translate($_id, &$word)
-
{
-
-
// レスポンスの発行
-
$client =& new HTTP_Client($this->http_client_default_param, $this->http_client_default_header);
-
$client->post($this->uri, $p);
-
$response = $client->currentResponse();
-
-
// JSON形式をPHPで操作可狽ネ形式にデコード
-
$ret = json_decode($response['body']); //>= php 5.2.0
-
$tuple = $ret->value->items[0];
-
-
// 翻訳結果
-
}
-
}
2 Comments so far
Leave a comment
面白いですね。
Cakeの機能を使うなら同一条件の問合せを繰り返さないようにキャッシュを作ってもいいかもしれません。
Objectのcacheメソッドを使う感じとか。
WEBサービスの機能をコンポーネントにするのは面白いですね。
>キャッシュを作ってもいいかもしれません
便利なcacheメソッドがあるのですね。学んでみます。
>WEBサービスの機能をコンポーネントにするのは面白いですね。
コンポーネントをどういうときに用いるのかまだ良くわからなくて^^;;再利用ができそうなクラスとして目に止まったのがコンポーネントという機能だったので。WEBサービスをコンポーネント化する習慣がCakePHPにはないってことなんでしょうか?あるいはもっとクールな実装方法があるのでしょうか?