2010年6月11日金曜日

c++ でYahoo APIを使う

Yahoo APIをC++で使えたのでメモしてみた。
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_ptr rset (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 件のコメント:

コメントを投稿