fetus Diary
2008/03/30(日) - やる気が無いときのソースなんてこんなもん
$lastupdate = strtotime($conn->GetOne("SELECT max(modify_date) FROM address_data"));
$document = new DOMDocument('1.0', 'UTF-8');
$document->xmlStandalone = true;
$document->formatOutput = true;
$rootnode = $document->createElement('data');
$rootnode->setAttribute('xmlns', 'http://fetus.k-hsu.net/document/programming/api/MobilePhoneAddress/xml');
$rootnode->setAttribute('update', date('c', $lastupdate));
$rootnode->setAttribute('generate', date('c'));
$document->appendChild($rootnode);
if($carriers = $conn->Execute("SELECT * FROM carrier_master ORDER BY sorting_hint")) {
foreach($carriers as $carrier) {
$carrier_node = $document->createElement('carrier');
$carrier_node->setAttribute('id', $carrier['carrier_id']);
$carrier_node->setAttribute('name', $carrier['name_jp']);
$carrier_node->setAttribute('name_en', $carrier['name_en']);
$rootnode->appendChild($carrier_node);
if($groups = $conn->Execute("SELECT * FROM address_group_master WHERE carrier_id = ? ORDER BY sorting_hint", array($carrier['carrier_id']))) {
foreach($groups as $group) {
$group_node = $document->createElement('addresses');
$group_node->setAttribute('id', $group['group_id']);
$group_node->setAttribute('name', $group['name_jp']);
$group_node->setAttribute('name_en', $group['name_en']);
$carrier_node->appendChild($group_node);
if($addresses = $conn->Execute("SELECT * FROM address_data WHERE group_id = ? ORDER BY address, modify_date, address_id", array($group['group_id']))) {
foreach($addresses as $address) {
$address_node = $document->createElement('address', $address['address']);
$address_node->setAttribute('update', date('c', strtotime($address['modify_date'])));
list($address_from, $address_to, $address_num) = GetAddressInfo($address['address']);
$address_node->setAttribute('from', $address_from);
$address_node->setAttribute('to', $address_to);
$address_node->setAttribute('count', $address_num);
$group_node->appendChild($address_node);
}
}
}
}
}
}
header('Content-Type: application/xml');
echo $document->saveXML();
SQL と DOM 操作が混じっている上似たような SQL を複数回発行するから遅いですが何か(メモリを犠牲にして、group_id でフィルタかけずに取ってきてプログラム側で処理した方が早いことが往々にしてある)
# このソース読めば、DB 格納形式そのまんまで出力しているのがよくわかるはず。
- 08/03/31
0:190:24
コメント
コメントはありません。