2008年02月03日17:09
ZAPA先生のマッシュアップ講座の第4回をやっていたのですが、紹介されている方法では、simplexml_load_file関数が使ってあるので、PHP4では動きません。できたらPHP4でも動かしたいと思い、前回の記事で使ったXML_Unserializerを使って色々と試してみました。
var_dump関数で見ると、どうやら配列まではできているみたいなのですが、それをどう利用していいのかがわかりません。
どなたか詳しい方、教えていただけないでしょうか。
<作ったコード>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>フォト蔵</title>
<style type="text/css">
<!--
body {
font-size: 14px;
}
-->
</style>
</head>
<body>
<?php
function photozou($keyword,$limit){
$req = "http://api.photozou.jp/rest/search_public";
$req .= "?type=photo&keyword=".urlencode($keyword)."&limit=".$limit;
require_once("XML/Unserializer.php");
$xml_data = file_get_contents($req);
$parser = new XML_Unserializer(array(’parseAttributes’ => true));
$parser->unserialize($xml_data);
$XML = $parser->getUnserializedData();
var_dump($XML);
}
$keyword = "エヴァンゲリオン";
$limit = "5";
echo photozou($keyword,$limit);
?>
</body>
</html>
実行結果 → http://syoboi.com/test/photozou.php
出来上がっている配列$XMLの構造はなんとなくわかるのですが、データを取り出せないで行き詰っています。
今までと比べて、配列の構造が少し複雑なのですよね・・・
<試してみた事>
1.echo $XML['info']['photo']['photo_title'];とか書いても、何も表示されない。
2.foreachを使ってあれこれ試行錯誤してみたのですが、これもやり方がわからない。
3.PEARのライブラリ、XML_RSSも使ってみたがエラーになる。
XML_Unserializerを使って、ZAPA先生のマッシュアップ講座の第4回と同じ結果を出すには、この先どうしたら良いんでしょうか。
詳しい方、何卒教えてくださいませ。
よろしくお願い致します。
m(_ _)m
<追記>
コメントでやすたろ〜さまより配列の要素の取り出し方を教えて頂きました。
やすたろ〜さま、本当にありがとうございました。
m(_ _)m
foreachを使って何とかできないかと悩んでおりましたが、挫折。
for文で、一応、取り出したいものを取り出すことに成功しました。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>フォト蔵</title>
<style type="text/css">
<!--
body {
font-size: 14px;
}
-->
</style>
</head>
<body>
<?php
function photozou($keyword,$limit){
$req = "http://api.photozou.jp/rest/search_public";
$req .= "?type=photo&keyword=".urlencode($keyword)."&limit=".$limit;
require_once("XML/Unserializer.php");
$xml_data = file_get_contents($req);
$parser = new XML_Unserializer(array(’parseAttributes’ => true));
$parser->unserialize($xml_data);
$XML = $parser->getUnserializedData();
$ret = '<div class="photozou">';
for($i = 0; $i < $limit; $i++){
$ret .= "<a href=¥"".$XML['info']['photo'][$i]['url']."¥">";
$ret .= "<img src=¥"".$XML['info']['photo'][$i]['thumbnail_image_url']."¥" alt=¥"".$XML['info']['photo'][$i]['photo_title']."¥">";
$ret .= "</a>¥n";
}
$ret .= "</div>";
return $ret;
}
$keyword = "エヴァンゲリオン";
$limit = "5";
echo photozou($keyword,$limit);
?>
</body>
</html>
出来上がったもの → http://syoboi.com/test/photozou2.php
limitの数より写真が少ない場合、エラーになりそうな予感。
foreachで処理できる方法がわかる方いらっしゃいましたら、引き続きコメントをお待ちしています。
でも、foreachが使えなくても、完成できて嬉しいです!
やすたろ〜さま、サンクス!!!
<さらに追記>
コメントで、再びやすたろ〜さまから教えていただきました。
for文のカウンタを$limitから、count($XML['info']['photo'])に変えました。
これで$limitよりphotoの数が少なくてもエラーは出ないと思います。
本当に、やすたろ〜さま。重ね重ねありがとうございました。
なんとか次に進む事ができ、そろそろマッシュアップサイトが作れそうな予感がしてきました。
嬉しいです!
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>フォト蔵</title>
<style type="text/css">
<!--
body {
font-size: 14px;
}
-->
</style>
</head>
<body>
<?php
function photozou($keyword,$limit){
$req = "http://api.photozou.jp/rest/search_public";
$req .= "?type=photo&keyword=".urlencode($keyword)."&limit=".$limit;
require_once("XML/Unserializer.php");
$xml_data = file_get_contents($req);
$parser = new XML_Unserializer(array(’parseAttributes’ => true));
$parser->unserialize($xml_data);
$XML = $parser->getUnserializedData();
$ret = '<div class="photozou">';
for($i = 0; $i < count($XML['info']['photo']); $i++){
$ret .= "<a href=¥"".$XML['info']['photo'][$i]['url']."¥">";
$ret .= "<img src=¥"".$XML['info']['photo'][$i]['thumbnail_image_url']."¥" alt=¥"".$XML['info']['photo'][$i]['photo_title']."¥">";
$ret .= "</a>¥n";
}
$ret .= "</div>";
return $ret;
}
$keyword = "エヴァンゲリオン";
$limit = "5";
echo photozou($keyword,$limit);
?>
</body>
</html>
この記事へのコメント
|
やすたろ〜
2008年02月03日 19:23 |
1は
echo $XML['info']['photo'][0]['photo_title']; のように、間に何番目なのかを入れる必要があります。 2が出来なかったのもそれが関係あると思います。 |
|
afiliate
2008年02月03日 22:04
|
どおも〜、やすたろ〜さま。
ご丁寧に教えてくださって、ありがとうございます! おかげさまで、目的の処理ができました。 嬉しいです!! 早速、追記させていただきました。 できればforeach文を使いたいので、もうちょっと試行錯誤してみたいと思います。 本当にありがとうございました。 m(_ _)m |
|
やすたろ〜
2008年02月04日 01:29 |
foreachでのやり方は分かりませんが、
limitに入力する値は count($XML['info']['photo']) で取り出せると思います。 とりあえずそれでエラーは防げます。 |
|
afiliate
2008年02月04日 22:59
|
どおも〜やすたろ〜さま。
マジ、完・璧・で・す・! count($XML['info']['photo'])で、できましたよ。 本当にありがとうございます。 おかげさまで、なんとなく深い階層の配列も扱えるようになりました。 次回、動画編でも使わせていただきたいと思います。 本当にありがとうございました!! |

アフィリエイトは儲かんないってば
