トップ  > メモ一覧  > カテゴリ「API関連処理」の絞り込み結果 : 4件

4件中 1 〜 4 表示  1 

No.2140 rakutenwebserviceを使う「第2回XMLからのデータ抽出」

rakuten webserviceを使う「第2回 XMLからのデータ抽出」

前回の内容は以下のページを参照ください。
今回は、第1回で紹介した方法で取得したXMLから各種データを抽出する方法を紹介します。
PHP5が使える環境を前提に記載していますが、基本的には他の言語でも同様のことが出来る関数などが準備されていると思いますので、そこは利用する環境に置き換えて読んでいただければ幸いです。

PHPでXMLをパース(parse)する

XMLをパースするというのは、XMLを解析してパーツに分割することを言います。

PHP5では、XMLをパースする便利な関数としてPHP5ではsimplexml_load_file()やsimplexml_load_string()などが提供されています。 今回はsimplexml_load_string関数を利用します。

XMLファイルの取得

まず、パーすするXMLファイルを取得します。これは、file_get_contents("楽天商品ランキングAPIのURL")で取得が出来ます。

以下のコードで、変数[string]に楽天商品ランキングAPIから取得したXMLデータが格納されます。

$req = "http://api.rakuten.co.jp/rws/2.0/rest?operation=ItemRanking&version=2009-04-15&developerId=[デベロッパーID]&affiliateId=[アフィリエイトID]&genreId=[カテゴリID]";
$string = file_get_contents($req);

本来であれば、この変数[string]をsimplexml_load_string関数に渡してあげればXMLの解析が出来るはずなのですが、 取得したXML内に以下のようなXMLの要素名に「:(コロン)」が含まれるものがあります。

<itemRanking:ItemRanking xmlns:itemRanking="http://api.rakuten.co.jp/rws/rest/ItemRanking/2009-04-15">


どうやら、simplexml_load_string関数では、このような「:」を含む要素名を持つXMLはうまく処理できないようです。
本来、このような場合はPHPの正規表現を用いてXMLパースをするべきなのですが、せっかくsimplexml_load_string関数のような 便利な関数が用意されているのに使わないのはもったいないです。

なので、simplexml_load_string関数が使えるように、「:」を他の文字に変換してからsimplexml_load_string関数に渡すようにします。
$req = "http://api.rakuten.co.jp/rws/2.0/rest?operation=ItemRanking&version=2009-04-15&developerId=[デベロッパーID]&affiliateId=[アフィリエイトID]&genreId=[カテゴリID]";
$string = preg_replace('/:/','_',file_get_contents($req));
$xml = simplexml_load_string($string) or die("XMLパースエラー");


2行目のpreg_replace関数で「:」を「_(アンダーバー)」に変換しています。
3行目のsimplexml_load_string関数でXMLのパースをしています。

これで、XMLからデータを抽出する準備が整いました。 あとは、データを抽出し加工するだけです。

XMLからのデータ抽出は簡単です。
例えば、楽天商品ランキングAPIから取得したXMLデータから商品のタイトルを取得したい場合、 以下のようにすれば変数[str]に商品タイトルが格納されます。
$str = $xml->Body->itemRanking_ItemRanking->Item->itemName;


また、複数の商品データがある場合は、以下のようにすれば順々に商品データにアクセスしていきます。
foreach ($xml->Body->itemRanking_ItemRanking->Item as $item) {
echo "商品名:".$item->itemName."\n";
}


これまで説明した内容のまとめとして、取得したXMLから商品画像と商品名を表示するサンプルコードを紹介します。
<?php

$req="http://api.rakuten.co.jp/rws/2.0/rest?operation=ItemRanking&version=2009-04-15&developerId=[デベロッパーID]&affiliateId=[アフィリエイトID]&genreId=[カテゴリID]";

$string = preg_replace('/:/','_',file_get_contents($req));

$xml = simplexml_load_string($string) or die("XMLパースエラー");

$output = "<table>n";
foreach ($xml->Body->itemRanking_ItemRanking->Item as $item) {

$output.= "<tr><td><img src='" . preg_replace('/http_/','http:',$item->smallImageUrl) . "'></td>";
$output.= "<td>商品名:".$item->itemName</td></tr>";

}

$output .= "</table>n";

echo $output;

?>

上記コードをそのまま実行すると、文字エンコードがXMLのエンコード(UTF-8)のまま出力されると思います。
必要であれば、出力を他のエンコード(sjisやeuc-jp)に変更する関数を通してから出力するようにするとよいと思います。

次回はこれを汎用的に利用するために、javascript化(?)する方法を紹介します。

引用元

更新:2010/02/28 16:02 カテゴリ: PHP  > API関連処理 ▲トップ

No.1739 GoogleAnalyticsから訪問数・PV数をPHPでゲットするサンプルコード

Google Analyticsから訪問数・PV数をPHPでゲットするサンプルコード

Google Analyticsから訪問数・PV数をPHPでゲットするサンプルコードが公開されています。



Google Analytics PHP API example - SWIS BV にて公開されている、analytics.class.php というライブラリを使ったサンプルになりますが、次のようなコードで簡単に取得できます。

<?php
$analytics = new analytics('aaa@aaa.aaa', 'P@ssw0rd');
$analytics->setProfileByName('davidwalsh.name');
$analytics->setMonth(date('n'), date('Y'));
// 日ごとの訪問者数を得る
print_r($analytics->getVisitors());
// 日ごとのPV数を得る
print_r($analytics->getPageviews());
?>

詳しくは、以下のエントリを参照して下さい。
Retrieve Google Analytics Visits and PageViews with PHP

関連エントリ

引用元

更新:2009/11/16 00:44 カテゴリ: PHP  > API関連処理 ▲トップ

No.1498 PHPでYahoo!のOAuth対応APIにアクセスしてみよう!

PHPでYahoo!のOAuth対応APIにアクセスしてみよう!

こんにちは、IDプラットフォーム技術の近藤です。

前回の記事ではYahoo! JAPAN のOAuthが採用しているSession Extensionについて簡単に紹介をしました。
そこでSession Extentionの一連のフローを開発者が意識することなく、OAuthに対応したYahoo! JAPANのAPIを使ってWebアプリを実装できるようにYahoo! JAPANデベロッパーネットワーク上にPHP SDKを公開しました。

今回はSDKを利用してマイ・オークション表示(ウォッチリスト・開催中のオークション)APIにアクセスする簡単なサンプルコードを作っていきたいと思います。

はじめに,Yahoo!デベロッパーネットワークからアプリケーション登録をしてConsumer Key及びSecretを発行します。そしてOAuthサンプルコードからOAuth SDKをダウンロードして、libディレクトリをドメイン認証済みのサーバのドキュメントルート以下に配置します。

開発者が新規に作成する必要があるファイルは以下の2つです

  • OpenWatchListApi.inc(マイ・オークションAPIにアクセスを行うクラス)
  • sample.php(メインのコード)

まずは、SDKに含まれる抽象クラスYahooAbstractApiを継承してAPIアクセスクラスOpenWatchListApiを作成してみましょう。

  • OpenWatchListApi.inc
    1. <?php  
    2. require('lib/YahooAbstractApi.php');  
    3.   
    4. /** 
    5.  * ウォッチリストを取得するAPIのクラス 
    6.  */  
    7. class OpenWatchListApi extends YahooAbstractApi {  
    8.   
    9.     /** 
    10.     *  1.APIのリクエストURL 
    11.     */  
    12.     const REQUEST_URL = 'http://auctions.yahooapis.jp/AuctionWebService/V1/openWatchList';  
    13.   
    14.     /** 
    15.     *  2.コンストラクタ 
    16.     */  
    17.     public function __construct(YahooSession $session) {  
    18.         parent::__construct($session);  
    19.     }  
    20.   
    21.     /** 
    22.     * 3.APIレスポンスを取得する 
    23.     */  
    24.     public function getResponse( $parameters ) {  
    25.         $this->httpGet( self::REQUEST_URL, $parameters );  
    26.         return $this->getResponseBody();  
    27.     }  
    28. }  
    29. ?>  
  1. APIのリクエストURLを記述します。
  2. ユーザのセッションデータを受け取るコンストラクタを記述します。
  3. 抽象メソッドgetResponseをオーバーライドし、リクエストパラメータを配列で受け取ってGETでAPIアクセスする機能を実装します。

次にサンプルコードの処理についてみてみましょう。

  • sample.php
    1. // 1.Include OAuth library.  
    2. require('lib/YahooOAuth.inc');  
    3.   
    4. // 2.Consumer Key & Secret  
    5. $consumerKey = '開発者のコンシューマーキー';  
    6. $consumerSecret = '開発者のコンシューマーシークレット';  
    7.   
    8. // 3.callback URL  
    9. $callback = sprintf('http://%s%s',$_SERVER['SERVER_NAME'],$_SERVER['SCRIPT_NAME']);  
    10.   
    11. // 4.sessionを取得  
    12. $session = YahooSession::requireSession($consumerKey$consumerSecret$callback);  
    13.   
    14. ・・・・・・・・・・・  
  1. ダウンロードしたSDKをインクルード可能な場所に配置して、lib/YahooOAuth.incをインクルードします。
  2. 発行したOAuth Consumer Key及びConsumer Secretを指定します。
  3. End Userが同意後の戻り先URLを指定します。アプリケーション登録時に認証済みのドメインと同一であれば、開発者が任意にパスを設定することができます。
  4. API アクセスクラスに渡すEnd Userのセッションデータを取得します。セッションデータにはSession HandleやAccess Tokenが含まれます。Session Handleが期限切れや無効になった場合にはEnd Userに再度同意を促すページにリダイレクトさせる処理も行っています。

次に,先ほど作成したOpenWatchListApi.incをインクルードしてセッションデータをAPIアクセスクラスのオブジェクトに渡し、getResponseメソッドを使ってAPIからのレスポンスを取得します。

  • sample.php(つづき)
    1. ・・・・・・・・・・・  
    2.   
    3. // APIレスポンスを取得する  
    4. require('OpenWatchListApi.inc');  
    5. $api = new OpenWatchListApi($session);  
    6. $parameters = array(  
    7.     'page' => 1,  
    8. );  
    9. $response = $api->getResponse($parameters);  
    10.   
    11. // 結果表示  
    12. header('Content-Type: text/html; charset=utf-8');  
    13. ?>  
    14. <html>  
    15. <head>  
    16.     <title>マイオークション・APIサンプルコード</title>  
    17. </head>  
    18. <body>  
    19.     <h1>API サンプルレスポンス</h1>  
    20.     <pre><?=htmlentities( $response )?></pre>  
    21. </body>  
    22. </html>  

最後に、作成したOpenWatchListApi.incとsample.phpをドキュメントルート以下に配置してブラウザからアクセスして動 作確認してみましょう。うまくいっていれば、Yahoo! JAPANのログイン画面またはパスワード再確認画面へリダイレクトされるはずです。

ユーザが自分のYIDとパスワードを入力して、同意画面でユーザのマイ・オークションを参照、更新する機能を提供をConsumer(ここではこの サンプルWebアプリ)に提供することに同意すると、Callbackで指定したURLに戻り。セッションデータを取得してAPIアクセスを行います。画 面にAPIアクセス結果のレスポンスが出てれば成功です\(^o^)/

一度同意すればユーザの同意(Session Handle)が有効な期間に限り、ユーザの再同意を得ることなくConsumerはAPIアクセス可能になります。ユーザの同意のフローからやり直した い場合はセッションデータを管理しているCookie(yjsdk_at)を削除してください。

以上、OAuth SDKの使い方を説明させていただきました。
まだマイ・オークションAPIを試されていない方はぜひこの機会にさわっていただければと思います。



Yahoo!デベロッパーネットワーク - OAuth
Yahoo!デベロッパーネットワーク - オークションAPI
Yahoo!デベロッパーネットワークは こちら
APIをご利用前にアプリケーションID の取得を忘れずにお願いします。
登録はこちら

引用元

更新:2009/09/15 08:42 カテゴリ: PHP  > API関連処理 ▲トップ
4件中 1 〜 4 表示  1 

FuelPHP

Mac

フロントエンド開発

web開発

プロマネ

マネタイズ

プレゼン

webサービス運用

webサービス

Linux

サーバ管理

MySQL

ソース・開発

svn・git

PHP

HTML・CSS

JavaScript

ツール, ライブラリ

ビジネス

テンプレート

負荷・チューニング

Windows

メール

メール・手紙文例

CodeIgniter

オブジェクト指向

UI・フロントエンド

cloud

マークアップ・テキスト

Flash

デザイン

DBその他

Ruby

PostgreSQL

ユーティリティ・ソフト

Firefox

ハードウェア

Google

symfony

OpenPNE全般

OpenPNE2

Hack(賢コツ)

OpenPNE3

リンク

個人開発

その他

未確認

KVS

ubuntu

Android

負荷試験

オープンソース

社会

便利ツール

マネー

Twig

食品宅配

WEB設計

オーディオ

一般常識

アプリ開発

Python

サイトマップ

うずら技術ブログ

たませんSNS

rss2.0