libxmlを使う方法もあるが、yahooデベロッパーネットワークはXML Schemaで提供されているのでこれを利用したい。
Linuxで使うには、http://www.codesynthesis.com/ CodeSynthesis XSDを使えばいける。
Fedoraだとxsdがあれば入っている。yum install xsd でも使えばインストールも楽。
今回は C++/Treeを使って、ヤフーオークションのカテゴリー情報を取得してみる。
まず XML Schem を取ってくる。
http://auctions.yahooapis.jp/AuctionWebService/V2/categoryTree.xsd
次にコマンドを実行する。
xsdcxx cxx-tree --namespace-map urn:yahoo:jp:auc:categoryTree=auc::catetgoryTree --generate-doxygen --generate-serialization --generate-ostream categoryTree.xsd
--namespace-map はXMLの名前空間をC++の名前空間に変換する
--generate-doxygen doxygenを使う
--generate-ostream これがないと警告がいっぱい
これを実行して、categoryTree.hxx categoryTree.cxxが生成される。
次にdriver.cxxを作る
#include
#include "categoryTree.hxx"
using namespace std;
using namespace auc::catetgoryTree;
int
main (int argc, char* argv[])
{
try
{
auto_ptrrset (ResultSet_ (argv[1]));
cout << rset->totalResultsAvailable() << endl;
cout << rset->Result() << endl;
//::auc::catetgoryTree::ResultType r = h->Result();
ResultType rtype = rset->Result();
cout << "sequence " << seq[0].CategoryId() << endl;
it = rtype.ChildCategory().begin();
cout << "インテレータ " << (*it).CategoryId() << endl;
}
catch (const xml_schema::exception& e)
{
cerr << "err" << endl;
return 1;
}
}
コンパイルして
g++ -g -I/usr/include/xsd/cxx/ -c driver.cxx categoryTree.cxx
リンクする
g++ -o driver driver.o categoryTree.o -lxerces-c
実行
driver "http://auctions.yahooapis.jp/AuctionWebService/V2/categoryTree?appid=アプリケーションID&category=カテゴリー番号(先頭は0)"
コード数が少なくて、XML Schemaの名前をクラスに使えるのが便利。
0 件のコメント:
コメントを投稿