[CakePHP] 画像の圧縮比を変えて出力する

CakePHP楽天APIで携帯サイトを作っているのだが、楽天APIで取得できる画像は、携帯用にそのまま表示すると、画像サイズがでかい。1ページあたりに3枚表示するくらいがやっとだ。

なので、CakePHPで画像ファイルの圧縮率を下げるアクションを追加してみた。

まずは、コントローラーに以下のように作ってみた。

app/controllers/convjpgs_controller.php

class ConvjpgsController extends AppController {
	var $name = 'Convjpgs';
	function down(){
		$this->layout = false;
		$this->autoRender = false;
		header('Content-type: image/jpeg');
		$img = imagecreatefromjpeg('http://'.implode('/',$this->params['pass']).'?_ex=128x128');
		imagejpeg($img, NULL, 75);
		imagedestroy($img);
	}

“[CakePHP] 画像の圧縮比を変えて出力する” の続きを読む

とことん楽天アフィリエイトシステム

ちょこちょここちらのカテゴリーで作っていたのですが、ようやく完成しました。

その名も、とことん楽天アフィリエイトシステム!!

CakePHP楽天APIを使って作ったアフィリエイトシステムです。

私の初めてのCakePHPで構築したサイトです。といっても、データベースは使っておらず、楽天APIしか使ってませんが(^^;)

で、とりあえず、以下のようなサイトを作ってみました。

  • とことんリラックマ

↓スクリーンショット

とことん楽天アフィリエイトシステム

このシステムはどういうものかというと・・・・

“とことん楽天アフィリエイトシステム” の続きを読む

CakePHPで楽天WEBサービスを使う(ジャンルコード)

今回は、ジャンルコード検索を実装してみたいと思います。

この連載の過去の記事はこちらを参照してください。

まずは、モデルから。

app/models/Genrecode.php

class Genrecode extends AppModel {

var $name = "Genrecode";

//商品検索APIの共通パラメータ
var $api_def = array(
'developerId' => DEV_ID,
'affiliateId' => AFF_ID,
'operation' => 'GenreSearch',
'version' => '2007-04-11',
);

function findAll($conditions = array()) {

$req = 'http://api.rakuten.co.jp/rws/1.11/rest?';

$api_params = array_merge($conditions,$this->api_def);

uses('Xml');

$req .= http_build_query($api_params);

$xml = new XML($req);
$xml_array = Set::reverse($xml);

return $xml_array['Response']['Body']['GenreSearch'];

}
}

“CakePHPで楽天WEBサービスを使う(ジャンルコード)” の続きを読む

CakePHPで楽天WEBサービスを使う(ソート順)

前回は、検索フォームで商品を検索できるようにしました。

今回は、ソート順を変えられるようにしてみました。

このカテゴリーの過去の記事の一覧はこちらをご覧ください。

楽天のホームページでは、さまざまな方法でソート順を変更することができます。以下のような感じ。

  • 標準
  • 価格が安い
  • 価格が高い
  • 新着順
  • 感想の件数が多い

楽天WEBサービスでは、これとは別に以下のようなソート順が用意されています。

  • 標準(standard)
  • アフィリエイト料率順(昇順)(+affiliateRate)
  • アフィリエイト料率順(降順)(-affiliateRate)
  • レビュー件数順(昇順)(+reviewCount)
  • レビュー件数順(降順)(-reviewCount)
  • 価格順(昇順)(+itemPrice)
  • 価格順(降順)(-itemPrice)
  • 商品更新日時順(昇順)(+updateTimestamp)
  • 商品更新日時順(降順)(-updateTimestamp)

“CakePHPで楽天WEBサービスを使う(ソート順)” の続きを読む

CakePHPで楽天WEBサービスを使う(検索フォーム)

今回は、検索フォームで商品を絞り込めるようにしてみた。

なお、この連載の過去の記事一覧は「CakePHPで楽天API」を見ていただきたい。

まず、「app/config/routes.php」に以下を追加する。

app/config/routes.php


Router::connect('/searches/*', array('controller' => 'Searches', 'action' => 'index'));

モデルは次のようになる。前回とちょっと変えたのは、APIのパラメータをメソッドに書いていたのをやめて、クラスで定義してみた。

app/models/Item.php

class Item extends AppModel {

var $name = "Item";

var $api_def = array(
'developerId' => DEV_ID,
'affiliateId' => AFF_ID,
'operation' => 'ItemSearch',
'version' => '2008-09-01',
);

function findAll($conditions = array()) {

$req = 'http://api.rakuten.co.jp/rws/1.12/rest?';

$api_params = array_merge($conditions,$this->api_def);

uses('Xml');

$req .= http_build_query($api_params);

$xml = new XML($req);
$xml_array = Set::reverse($xml);

return $xml_array['Response']['Body']['ItemSearch'];
}
}

“CakePHPで楽天WEBサービスを使う(検索フォーム)” の続きを読む

CakePHPで楽天WEBサービスを使う(商品コード検索)

ちょっとここで一息?ついて、商品コード検索を実装してみることにした。

前回までの構築で、以外と簡単に商品コード検索は実装することができた。

なお、このシリーズはカテゴリーとしてまとめているので、過去の記事はこちらを見てください。

まずは、それぞれのコードをのせてみます。まずはモデル。

app/models/Itemcode.php

class Itemcode extends AppModel {

var $name = "Itemcode";
var $api_def = array(
'developerId' => DEV_ID,
'affiliateId' => AFF_ID,
'operation' => 'ItemCodeSearch',
'version' => '2007-04-11',
);

function findAll($conditions = array()) {

$req = 'http://api.rakuten.co.jp/rws/1.11/rest?';
$api_params = array_merge($conditions,$this->api_def);

uses('Xml');

foreach ($api_params as $key => $value){
$req .= '&'.$key.'='.$value;
}

$xml = new XML($req);
$xml_array = Set::reverse($xml);
return $xml_array['Response']['Body']['ItemCodeSearch'];

}
}

“CakePHPで楽天WEBサービスを使う(商品コード検索)” の続きを読む

CakePHPで楽天WEBサービスを使う(ページング処理)

なんだか、CakePHPの初心者の私には、いきなり難しいことから始めてしまったような気がしないでもない、と思う今日この頃(^^;)

このシリーズはカテゴリーとしてまとめているので、過去の記事はこちらを見てください。

ということで。

次はページング処理を付けてみた。

今回開発で使用しているCakePHPのバージョンは1.2RC3で、1.2から標準でページング処理ができるみたいなのですが、どうもそのページ処理をしようと思うと、データベースに接続しようとするのです。今回の場合、WEB APIを使っているので、データベースは使いません。困ったあげく、PEAR:Pagerを使うことにしました。。。。標準のページングも使えるよ、というのをご存じの方がいらっしゃいましたら教えてください(^^;)

ということで、コントローラーを以下のようにしてみました。

class ItemsController extends AppController {

var $name = 'Items';
var $uses = 'Item';

var $conditions = array();    //リクエスト用パラメータ

//デフォルト商品表示
function index($page = 1){

//リクエスト用パラメータ
$conditions = array(
'developerId' => DEV_ID,
'affiliateId' => AFF_ID,
'operation' => 'ItemSearch',
'version' => '2008-09-01',
'keyword' => MAINKWD,
'hits' => PERPAGE,
'page' => $page,
);

//モデルからデータ取得
$data = $this->Item->findAll($conditions);

//商品配列
$this->set('items', $data['Items']['Item']);

//所得アイテム総数
$this->set('count',$data['count']);

//ページング処理
require_once ('Pager.php');

//Pager用パラメータ
$p_options = array(
"totalItems" => $data['count'],
"perPage" => PERPAGE,
'urlVar' => 'page',
'path' => FULL_BASE_URL.'/tokoton/items/',
'fileName' => '%d',
'append' => false,
'currentPage' => $page,
);

$pager =& Pager::factory($p_options);
$navi = $pager -> getLinks();
$this->set('navi',$navi["all"]);

}

}

“CakePHPで楽天WEBサービスを使う(ページング処理)” の続きを読む