今更だが。
cakePHPで楽天WEBサービスのサンプルを作ってみた。
http://www.ban-systems.com/items/items/
まずは楽天APIを使った簡単な検索だけなのだが、一応使えます。
毎冬にスノーボードやウェアを探しているのだが、いまいち探すのに疲れる。
自動で表示されていてもいいのではないかということで、となるとAPI をつかうしかない。
そして、まずは楽天APIを使ってボードギアだけを表示するページを作ってみようと思う。
いずれはYahooオークションAPIも使い価格比較をしたいと思う。
天気APIは有料だった。
UTF-8でのサイト開発をしていて,先頭に空白が入り,PHPでセッションエラーになった.
調査すると,BOMのせいであることが判明.
以下,BOMの説明.
BOMについて
UTF-8はエンディアンに関わらず同じ内容になるので、本来はBOM(Byte Order Mark)を付加する必要はないが、一部のエディターなどではBOMの有無を選択できる。この際、BOMありの方をUTF-8、なしの方をUTF-8Nと呼ぶこともあるが、このような使い分けは日本以外ではほとんど知られておらず、また公的規格などによる裏付けもないため、その使用には注意が必要である。
BOMを付加した場合、UTF-8のBOMを認識するプログラムでは、その文書がUTF-8であることをほぼ確実に自動認識できる。 一方で、UTF-8のBOMを認識しない(あるいは、そもそもUTF-8自体を認識しない)プログラムでは、BOMがゴミとみなされて問題となる。 とくに、プログラミング言語やMakefileのように文法が厳密に決まっているものの場合、エラーになってしまう
PHPのテクメモ | PHPでHTTPのクライアントになる
PHPでHTTPのクライアントになる
できるかな?。
もう少し調べてみよう…。
//正規表現により当てはまる形式で日付を修正する
//2006-10-10 2006/10/30 2006 10 30 の3つの形式で分岐
//`-`,`/`を変更することにより応用可能。
/*
$strDate //DBやテキストから取り出した日付の値を代入
$regs //成功した場合は配列として値を返す。
“Ymd” //例えば 20060505として値を返す。
*/
if (ereg (’([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})’, $strDate, $regs)) {
$Rdate = date(”Ymd”,mktime(0,0,0,$regs[2],$regs[3],$regs[1]));
} else if (ereg (’([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})’, $strDate, $regs)) {
$Rdate = date(”Ymd”,mktime(0,0,0,$regs[2],$regs[3],$regs[1]));
} else if (ereg (’([0-9]{4}) ([0-9]{1,2}) ([0-9]{1,2})’, $strDate, $regs)) {
$Rdate = date(”Ymd”,mktime(0,0,0,$regs[2],$regs[3],$regs[1]));
}
//$Rdateへ正確な日付が返されるので書式設定を行う。
//下記の場合は年数を省いている。
//年数を付け足したいときは %Y-%m-%d とする。
$md = strftime(”%m-%d”, strtotime($Rdate));
PHP: PHPの外部から来る変数 – Manual
IMAGE SUBMIT 変数名
フォームを投稿する際、次のタグのように標準の投稿ボタンの代わりに 画像を使用することができます。
画像のどこかがクリックされた場合、二つの変数 sub_x および sub_y が付け加えられてこのフォームはサーバーに転送されます。これらの変 数は、ユーザーがこの画像をクリックした座標を示しています。経験の ある人は、ブラウザにより送られた変数の名前においてアンダースコア がピリオドになってしまっていることを心配するかもしれません。 しかし、PHP はピリオドをアンダースコアに自動的に変換します。
久々に使うと忘れてます。いけねえ。
仕事と全然関係ないことなのに時間かけてやってしまうんです。
いつもそうですがでも意外にこういうことが後になって役に立つケースが多かったりもします。
自分はPHP開発の時Emacsを使って開発してました。
デバッガも使わずにブラウザで表示されるエラー行数を見てバグ取りしてます。
かなり時間的にロスしていますよね。
今回Eclipseにプラグインを入れてみてそう思いました。
EclipseはJavaでの開発時にしか使っていませんが、今後はPHPでも使おうと思います。
というかEclipseで開発作業ができるのは楽しいですね。
それにしても3時間くらいかかってしまいました。
手順としてはこうです。
1.apachefriends(http://www.apachefriends.org/en/)でxampp-win32-1.4.16.exeをダウンロード
これはApache、PHP4と5、MySQLがすべてインストールされます。
2.http://phpeclipse.de/でPHPeclipse-1.1.4-features.zipをダウンロード
適当に解凍してEclipseにコピーする。通常のプラグインと同様。
3.http://dd.cron.ru/dbg/downloads.phpでdbg-2.11.32-win32-php5.zipをダウンロード
解凍するとi386,i686が出来上がります。i686はPentium Pro以上に最適化されたもの
ということでそれ以上のパソコンではi686フォルダのdllを使用します。
バージョンはそれぞれPHPと同様のバージョンを選択しextensions(PHP5はext)へコピーします。
PHP.iniを開き修正
implicit_flish = on
以下は追加
extention=php_dbg.dll
[debugger]
debugger.enabled = true
debugger.profiler_enabled = true
この後の設定、Eclipseの設定になります。
ちょっと時間がないので次回にします。
しかしPHPのコードを保存した直後にページを更新するので確認が非常に楽でした。
何をいまさらって感じなのかもしれませんが、いいですね。
おそらくPHPオンリーで開発している人たちにとっては当たり前のことなのかもしれません。
自分のようにやる仕事で使用する言語が違うと開発環境を常に最新にしておくって事が
大変です。でもEclipseについては覚えておいて損はないですね。
多くの情報がデータベースのレコードを配列に格納してからダウンロード処理にするという方法であった。しかしどうにも、おかしい。ヘッダーで出力するのであれば、ページに表示するだけでいいと思った。
なぜわざわざ配列に格納する必要があるのか?
結構なメモリを消費してしまってるように思う。
しかも私が行おうとしていることは5万件以上のCSVエクスポート。
わざわざ配列に格納していては埒があかない。
なので調査した結果やはりそうであった。
単純に、echoとしてDBの結果を表示するだけでOKなのだ。
phpPgAdminのソースコードを読んでみても特に
CSVを配列に格納している記述は無かったので、そこからわかったのだが、うーん。
配列に格納することを当たり前の処理のように紹介しているページはちょっとどうかと思う。
下記のコードはあくまで参考。
クラスを使っているところがあるが、そのまま貼付けただけなので。
/*
echoするだけでCSV出力可能です。
**/
function csv_export() {
// ダウンロードするファイル名
$down_file = date(’Ymd’) . ‘.csv’;
// CSVの出力
header (”Content-Type: application/download”);
header (”Content-Disposition: attachment; filename=” . $down_file);
if (!isset($this->view) ||$this->view == “meisai”) {
$sql = $this->sql_contents();
} else {
$sql = $this->sql_accesslog_count();
}
$res = $this->postgres->doQuery($sql);
$f = $this->postgres->num_fields($res);
while($row = $this->postgres->fetch_array($res)) {
for ($i=0; $i<$f; $i++) {
echo mb_convert_encoding($row[$i],'SJIS', 'EUC-JP').",";
}
echo "?n";
}
$this->postgres->freeResult($res);
}
以下のページのやり方が最適だと思う。
データベースをCSV形式でダウンロード