価格.com のAPIを使って最安値情報をRSSで
価格.comのAPIが公開されました。
今自分が欲しい商品があって、その最安値情報をRSSで取得したかったのでさくっと作ってみました。
いろいろ説明不足で不親切なサービスのような気もしますが、、ひとまず公開。
どうしてもこういうロゴを一度使ってみたかった、というのもあります。(Web2.0 Logo Creator by Alex P)
価格.comのAPIが公開されました。
今自分が欲しい商品があって、その最安値情報をRSSで取得したかったのでさくっと作ってみました。
いろいろ説明不足で不親切なサービスのような気もしますが、、ひとまず公開。
どうしてもこういうロゴを一度使ってみたかった、というのもあります。(Web2.0 Logo Creator by Alex P)
Web API(ウェブサービス)に関するニュースをお届けします。
日本で公開されているAPI一覧に(下書き)と書いて公開したまま清書していなかったのですが、ここ数日APIが続々公開されたのに触発されて専用のブログを立ち上げることにしました。
コンテンツ系に手を出すのは初。APIを公開しているサイトももちろん取り上げていきますが、ゆくゆくはAPIをつかって面白いハックを披露しているサイトを発掘していきたいと思っています。ご期待ください!
PostgreSQLのC言語用ライブラリはlibpqで、C++用のライブラリはPostgreSQL7.3からlibpqxx、それ以前はlibpq++という名前だったようです。libpqは割とドキュメントやサンプルが豊富ですが、libpqxxはPostgreSQLのドキュメントからは分離しておりサンプルが少なかったので使ったときのメモ。
ダウンロードはlibpqxxのサイトから。インストールは解凍して./configure, make, make installで問題なし。PostgreSQLは8.1.4、libpqxxは2.6.8。
libpqxxのチュートリアルには動くコードが見当たらず、ソースの中のtest/test000.cxxなどがサンプルになる。
コンパイルがそのままでは通らなかったので以下のコマンドを打つことになりました。
$ export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig $ pkg-config --libs libpqxx
コンパイルは以下のように。
$ g++ -Wall test.cpp -lpqxx -lpq
test.cppの中身。
#include <iostream>
#include <pqxx/pqxx>
using namespace std;
using namespace pqxx;
int main()
{
try {
connection Conn("dbname=test");
work T(Conn);
result R(T.exec("select * from test"));
for (result::const_iterator c = R.begin(); c != R.end(); ++c) {
cout << c[0].as(string()) << endl;
}
T.commit();
Conn.disconnect();
} catch (const exception &e) {
cerr << e.what() << endl;
return 1;
}
return 0;
}
Google Calendar APIを使ってアプリを作ろうと思っていましたが、お蔵入りして未完成のPHPで書いたライブラリだけが残ったので公開しちゃいます。未実装のメソッドも多いですし、エラー処理も適当ですが。
http://www.zuzara.com/pub/GCalender_Service.phps
<?php
require_once 'GCalender_Service.php';
$c =& new GCalender_Service('mailaddress', 'password');
$data = $c->get();
print_r($data);
GoogleのドキュメントはもちろんあるのですがサンプルがJavaとC#なので実際の通信内容を理解するのに時間がかかりました。。
認証の部分が複雑。Google Account Authentication
には2つの認証方式が説明されていて、上記のコードで実装したのはInstalled Applications用です。HTTP1.1のパイプラインは使えない模様なのでいちいち3回アクセスすることになり若干重い。
APIでアクセスするURLにprivateとpublicがありますがそれによってReadOnlyだったり違いがあるので注意(参照)。
なお、HTTPSの通信を行うのでPHPのコンパイルオプションに–with-opensslが必要になります。残念ながらロリポップでは使えず、チカッパなら使えます。
picks!をリニューアルしつつ深追い.com(closed)(さくらの専用サーバ)に移行しました。
ロリポップの限界は、1日2万PVといったところでしょうか。思いがけずHDDの容量200M制限に引っかかり、HDDを増量したのでまだしばらくは耐えられそうでしたが、ピーク時のレスポンスが悪かったのと追加したい機能もあったので専用サーバへ。容量がオーバーしたのはアクセスログのファイルサイズが肥大化したためだと思われます。
専用サーバでFedoraCore5を選択したのでPHP5を初運用。しばらくしてノウハウがたまってきたらいろいろ書こうと思います。
以前にPHP5.1.0RC1でPDOとADODB、PEAR::DBのベンチマークを取りましたが、今回は5.1.4でADODBの代わりにMDB2を加えてやってみました。zuzaraのサービスの一部をさくらの専用サーバに移行しようと考えていて、OSでFedoraCore5を選択するとPHP5.1.4になります。
| PDO | PEAR::DB | PEAR::MDB2 | |
|---|---|---|---|
| PostgreSQL8.1.4 | 0.008 | 0.035 | 0.048 |
MDB2はどのぐらい速いのかなぁ、期待して試したのですがいまいち?
機能もメソッド名もほとんど同じなので5系ではやはりPDOがよさげ。
なお、testテーブルは1000行のデータが入っています。
pdo.php
<?php
require_once('Benchmark/Timer.php');
$timer = new Benchmark_Timer(true);
try {
$dbh = new PDO('pgsql:host=localhost;dbname=funaki', 'funaki', '');
$sth = $dbh->prepare("select * from test");
$sth->setFetchMode(PDO::FETCH_ASSOC);
$sth->execute();
$data = $sth->fetchAll();
} catch (PDOException $e) {
die($e->getMessage());
}
pear_db.php:
<?php
require_once('Benchmark/Timer.php');
$timer = new Benchmark_Timer(true);
require_once('DB.php');
$db = DB::connect("pgsql://funaki@unix(/tmp)/funaki");
if (PEAR::isError($db)) {
die($db->getMessage());
}
$sql = "select * from test";
$db->setFetchMode(DB_FETCHMODE_ASSOC);
$data = $db->getAll($sql);
pear_mdb2.php:
<?php
require_once('Benchmark/Timer.php');
$timer = new Benchmark_Timer(true);
require_once('MDB2.php');
$db = MDB2::connect("pgsql://funaki@unix(/tmp)/funaki");
if (PEAR::isError($db)) {
die($db->getMessage());
}
$sql = "select * from test";
$data = $db->queryAll($sql);
Development Environment Conferenceも近く開催されるので自分の自宅での開発環境を書いてみる。
長いことVirtualPC2004のお世話になっていましたが先月辺りからcoLinuxに移行しました。coLinuxの方がコンパイル等CPUを使う作業は快適になった感じ。VMwareは試していませんがXを使うわけでもないので今のところcoLinuxで満足。
インストールやネットワークの設定手順等ははてブで「coLinux」タグを探したり、普通にGoogleで探せば解説サイトがたくさんあって助かります。デフォルトだと仮想のHDDは2Gで構築されるので、もう少し増やしておいた方がよかった。。(参照:ハードディスクを増やす)
前提条件:
インストールしたもの:
coLinuxの設定ファイル:
<?xml version="1.0" encoding="UTF-8"?>
<colinux>
<block_device index="0" path="\DosDevices\c:\Program Files\coLinux\Gentoo-2005.1-stage3-ext3" enabled="true" />
<block_device index="1" path="\DosDevices\c:\Program Files\coLinux\swap_512Mb" enabled="true" />
<bootparams>root=/dev/cobd0</bootparams>
<initrd path="initrd.gz" />
<image path="vmlinux" />
<memory size="256" />
<network index="0" type="tap" />
</colinux>
Swapの設定:
# mkswap /dev/cobd1 # swapon /dev/cobd1 # vi /etc/fstab /dev/cobd/1 none swap sw 0 0
apache+PHP+PostgreSQL(LAMPと言いつつPostgreSQL):
# emerge apache # emerge postgresql # emerge --config =postgresql-8.0.8 # touch /var/log/pgsql # chown postgres /var/log/pgsql $ pg_ctl -D /var/lib/postgresql/data -l /var/log/pgsql start # USE="-* cli apache2 postgres unicode ctype fastbuild gd hash iconv memlimit nls pcre pic posix pdo reflection session sockets spl ssl tokenizer truetype zlib xml" emerge php # emerge PEAR-DB # emerge samba # vi /etc/samba/smb.conf [www] comment = www browseable = yes path = /var/www/localhost/ writable = yes create mask = 0644 force create mode = 0644 directory mask = 0755 # useradd -d /home/funaki funaki # smbpasswd -a funaki
PHPのコンパイルオプションをUSEで決めていますが、詳細はGentooのサイトを参照。emergeがしっかり依存関係解決してくれてすごいなぁ、と思いました。何も入っていないところからぽちぽちコンパイルして入れていくのは結構楽しい。
Gentooのbashはデフォルトのエディターがnanoだったりしてコアな雰囲気が漂っていますがvimを入れつつ、viに変更。
$ tail ~/.bashrc export EDITOR=vi export LANG="ja_JP.utf8"
ついでにほとんどいじっていませんが~/.screenrc
vbell off encoding utf8 termcap xterm* G0:KJ=utf8 escape ^Vv hardstatus string "[screen %n%?: %t%?] %h"
puttyでWindowsからログインしてscreen+vimでがしがし書くこともあればWindows上からSamba+gvimで書くことも。vimのバージョンは7。以前あれこれいじりましたが、結局7の新機能はあまり使わず。
gvimの設定ファイルはこんな感じです。以前よりだいぶ設定項目が減りました。UTF-8しか使わない、など汎用的ではないです。今入れているプラグインは、