2.HTTPサーバアクセス

価格COMの商品検索APIで「rx4540」の情報を検索する場合、次のようなクエリーをサーバーに対して実行する

http://api.kakaku.com/Ver1/ItemSearch.asp?Keyword=rx4540&ResultSet=mini&CategoryGroup=Pc&SortOrder=pricerank&pagenum=1

HTTPアクセスするためのプログラムコードを次に示す。便宜上エラー時の処理は割愛する

HINTERNET _hInternet		= NULL;
HINTERNET _hHttpConnect		= NULL;
HINTERNET _hHttp			= NULL;
_bstr_t   _bstrResponse;                     //取得文字列格納用
_hInternet = ::InternetOpen( _T("PocketIE") , 
       INTERNET_OPEN_TYPE_DIRECT  ,
       NULL ,
       NULL,
       0) ;
CUrl		_urlTarget;
_urlTarget.CrackUrl ( _T("http://api.kakaku.com/Ver1/ItemSearch.asp") );
_urlTarget.SetExtraInfo ( _T("?Keyword=rx4540&ResultSet=mini&CategoryGroup=Pc&SortOrder=pricerank&pagenum=1") );
_hHttpConnect = ::InternetConnect ( _hInternet ,
       _urlTarget.GetHostName() ,
       _urlTarget.GetPortNumber() , 
       _urlTarget.GetUserName() ,
       _urlTarget.GetPassword() ,
       INTERNET_SERVICE_HTTP ,
       0 ,
       NULL );
CString _cstrObject  = _urlTarget.GetUrlPath();
_cstrObject			+= _urlTarget.GetExtraInfo() ;
_hHttp = ::HttpOpenRequest ( _hHttpConnect ,
                             _T("GET") ,
                             (LPCTSTR)_cstrObject ,
                             _T("HTTP/1.1") ,
                             NULL ,
                             NULL ,
                             0 ,
                             NULL );
::HttpSendRequest ( _hHttp , NULL , 0 , NULL , 0 );
DWORD _dwReaded;
BYTE _bytBuf[2000];
::InternetReadFile ( _hHttp , _bytBuf , 2000 , &_dwReaded );
_bytBuf[_dwReaded] = '\0';

_bytBuf[]にレスポンス文字列が設定されているはずです
_bytBufの内容は次の通りに設定されていました。

0x1A14ECFC 3c 3f 78 6d 6c 20 76 65 72 73 69 6f 6e 3d 22 31 <?xml version="1
0x1A14ED0C 2e 30 22 20 65 6e 63 6f 64 69 6e 67 3d 22 75 74 .0" encoding="ut
0x1A14ED1C 66 2d 38 22 20 3f 3e 0d 0a 3c 50 72 6f 64 75 63 f-8" ?>..<Produc
0x1A14ED2C 74 49 6e 66 6f 3e 0d 0a 3c 4e 75 6d 4f 66 52 65 tInfo>..<NumOfRe
0x1A14ED3C 73 75 6c 74 3e 31 3c 2f 4e 75 6d 4f 66 52 65 73 sult>1</NumOfRes
0x1A14ED4C 75 6c 74 3e 3c 49 74 65 6d 3e 0d 0a 3c 50 72 6f ult><Item>..<Pro
0x1A14ED5C 64 75 63 74 49 44 3e 30 30 33 30 32 30 31 30 32 ductID>003020102
0x1A14ED6C 35 39 3c 2f 50 72 6f 64 75 63 74 49 44 3e 0d 0a 59</ProductID>..
0x1A14ED7C 3c 50 72 6f 64 75 63 74 4e 61 6d 65 3e 69 50 41 <ProductName>iPA
0x1A14ED8C 51 20 72 78 34 35 34 30 20 4d 6f 62 69 6c 65 20 Q rx4540 Mobile
0x1A14ED9C 4d 65 64 69 61 20 43 6f 6d 70 61 6e 69 6f 6e 20 Media Companion
0x1A14EDAC 46 41 37 38 34 41 41 23 41 42 4a 3c 2f 50 72 6f FA784AA#ABJ</Pro
0x1A14EDBC 64 75 63 74 4e 61 6d 65 3e 0d 0a 3c 4d 61 6b 65 ductName>..<Make
0x1A14EDCC 72 4e 61 6d 65 3e 48 50 3c 2f 4d 61 6b 65 72 4e rName>HP</MakerN
0x1A14EDDC 61 6d 65 3e 0d 0a 3c 49 74 65 6d 50 61 67 65 55 ame>..<ItemPageU
0x1A14EDEC 72 6c 3e 68 74 74 70 3a 2f 2f 6b 61 6b 61 6b 75 rl>http://kakaku
0x1A14EDFC 2e 63 6f 6d 2f 69 74 65 6d 2f 30 30 33 30 32 30 .com/item/003020
0x1A14EE0C 31 30 32 35 39 2f 3c 2f 49 74 65 6d 50 61 67 65 10259/</ItemPage
0x1A14EE1C 55 72 6c 3e 0d 0a 3c 42 62 73 50 61 67 65 55 72 Url>..<BbsPageUr
0x1A14EE2C 6c 3e 68 74 74 70 3a 2f 2f 62 62 73 2e 6b 61 6b l>http://bbs.kak
0x1A14EE3C 61 6b 75 2e 63 6f 6d 2f 62 62 73 2f 30 30 33 30 aku.com/bbs/0030
0x1A14EE4C 32 30 31 30 32 35 39 2f 3c 2f 42 62 73 50 61 67 2010259/</BbsPag
0x1A14EE5C 65 55 72 6c 3e 0d 0a 3c 52 65 76 69 65 77 50 61 eUrl>..<ReviewPa
0x1A14EE6C 67 65 55 72 6c 3e 68 74 74 70 3a 2f 2f 6b 61 6b geUrl>http://kak
0x1A14EE7C 61 6b 75 2e 63 6f 6d 2f 70 72 64 65 76 61 6c 75 aku.com/prdevalu
0x1A14EE8C 61 74 65 2f 65 76 61 6c 75 61 74 65 2e 61 73 70 ate/evaluate.asp
0x1A14EE9C 3f 50 72 64 4b 65 79 3d 30 30 33 30 32 30 31 30 ?PrdKey=00302010
0x1A14EEAC 32 35 39 3c 2f 52 65 76 69 65 77 50 61 67 65 55 259</ReviewPageU
0x1A14EEBC 72 6c 3e 0d 0a 3c 4c 6f 77 65 73 74 50 72 69 63 rl>..<LowestPric
0x1A14EECC 65 3e 33 39 34 38 30 3c 2f 4c 6f 77 65 73 74 50 e>39480</LowestP
0x1A14EEDC 72 69 63 65 3e 0d 0a 3c 2f 49 74 65 6d 3e 0d 0a rice>..</Item>..
0x1A14EEEC 3c 2f 50 72 6f 64 75 63 74 49 6e 66 6f 3e 0d 0a </ProductInfo>..

取得文字列を簡潔に示すと次の通り

<?xml version="1.0" encoding="utf-8" ?>
<ProductInfo>
    <NumOfResult>1</NumOfResult>
    <Item>
        <ProductID>00302010259</ProductID>
        <ProductName>iPAQ rx4540 Mobile Media Companion FA784AA#ABJ</ProductName>
        <MakerName>HP</MakerName>
        <ItemPageUrl>http://kakaku.com/item/00302010259/</ItemPageUrl>
        <BbsPageUrl>http://bbs.kakaku.com/bbs/00302010259/</BbsPageUrl>
        <ReviewPageUrl>http://kakaku.com/prdevaluate/evaluate.asp?PrdKey=00302010259</ReviewPageUrl>
        <LowestPrice>39480</LowestPrice>
    </Item>
</ProductInfo>

さて、次はXML解析です

Topへ戻る
次へ
前へ