- Back to Home »
- PHP »
- RSSをPHPで取得して表示してみた!!
Posted by : Izumikawa Fukumi
2013年2月13日水曜日
今回Google+のRSSをPHPで読み込んでみました。
まだRSSの読み込む方法が分からない方は、必見です。
僕も今回2回目のRSS取得です。
間違っている所は、コメントに書いて下さい。
まずは、ソースを見て下さい。
と言う意味になります。
ここで疑問が湧いて来たと思いますが、
item[$i]となっているが間違っているぞ!!
となると思いますがこれは9個の投稿を簡単に取得する為の
1つの裏技? です。
[ ]の中には、タグの番号を入力します。
itemタグは、複数ある為phpでは、番号を付けて細かい所までアクセス出来る様に、
なっています。
forでは、9回繰り返し処理をしますよね?
その時$iにその繰り返された数が入ります。
1回目の繰り返しの時は、1が代入されて$iが1となります。
2回目には、$iには、2が代入されます。
そしたら0から9まで繰り返されるので最終的には$iには、
123456789が入っていきます。
例
0回目 $i = 0;
1回目 $i = 1;
2回目 $i = 2;
この様にどんどん数字が変わりますので、
[0]~[9]まで書かなくても$iに0~9まで数字が入るので、
書く物を少なくする事が可能です。
まだRSSの読み込む方法が分からない方は、必見です。
僕も今回2回目のRSS取得です。
間違っている所は、コメントに書いて下さい。
まずは、ソースを見て下さい。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8" /> <title></title> </head> <body> <?php $xmlname = "http://gplus.slfeed.net/RSS2/103883213408660487064"; $xml = simplexml_load_file($xmlname); $htmla = '<hr>'; for($i=0; $i <= 9; $i++) { print $i; print $xml -> channel -> item[$i] -> title . '<br>'; print $xml -> channel -> item[$i] -> link . '<br>'; print $xml -> channel -> item[$i] -> pubDate . '<br>'; print $xml -> channel -> item[$i] -> description . '<br>'; print $xml -> channel -> item[$i] -> title . '<br>'; print $htmla; } ?> </body> </html>
XML取得方法
最初に以下のコードを入力して実行してみて下さい。
$xmlname = "http://gplus.slfeed.net/RSS2/103883213408660487064"; $xml = simplexml_load_file($xmlname); print_r($xml);
以下の様なコードが出て来たと思います。
注目する場所は、赤の場所です。
この赤の場所は、投稿のルートタグといでも言えるでしょう
赤い枠に囲まれているタグを辿ってXMLデータを取得します。
さて実際に先ほど書いたソースの詳細を見ていきましょう。
ソース解説
$xml = simplexml_load_file($xmlname);
simplexml_load_file()関数は、XMLデータを取得する為の関数です。
for($i=0; $i <= 9; $i++)
forでは、9回繰り返す様にしています。
for解説
forの使い方が分からない方の為説明させていただきます。
まず変数を作ります。「$i」
$iの変数の中に「0」を代入します。
ここまでは、前回の解説で説明したので分かると思います。
次は、ちょっと複雑になります。
このfor文では、値が一致しない限り同じ処理を繰り返します。
値が同じになったらforから抜け出す事が出来ます。
と言う事は、$iに0が代入されているので0が9になるまで
同じ処理が繰り返されます。
$i <= 9;
ただ$iが0だから無限に抜け出せないじゃんと思うかもしれませんが、
式の最後に$i++となっていますよね?
そうすると値が1プラスされるので自動的にiの値が0から1になります。
そうすれば繰り返すごとに1増えていくので9回目にちゃんと抜け出せます。
print $xml -> channel -> item[$i] -> title . '<br>';
これは、XMLデータへアクセスしています。
上で説明した「ルート」を指定します。
この場合、
$xml ->「XMLファイルの」
channel ->「channelタグの中の」
item ->「itemタグの中の」
title 「titleタグの中を表示する」
上で説明した「ルート」を指定します。
この場合、
$xml ->「XMLファイルの」
channel ->「channelタグの中の」
item ->「itemタグの中の」
title 「titleタグの中を表示する」
と言う意味になります。
ここで疑問が湧いて来たと思いますが、
item[$i]となっているが間違っているぞ!!
となると思いますがこれは9個の投稿を簡単に取得する為の
1つの裏技? です。
[ ]の中には、タグの番号を入力します。
itemタグは、複数ある為phpでは、番号を付けて細かい所までアクセス出来る様に、
なっています。
forでは、9回繰り返し処理をしますよね?
その時$iにその繰り返された数が入ります。
1回目の繰り返しの時は、1が代入されて$iが1となります。
2回目には、$iには、2が代入されます。
そしたら0から9まで繰り返されるので最終的には$iには、
123456789が入っていきます。
例
0回目 $i = 0;
1回目 $i = 1;
2回目 $i = 2;
この様にどんどん数字が変わりますので、
[0]~[9]まで書かなくても$iに0~9まで数字が入るので、
書く物を少なくする事が可能です。
[$i]にしなかった時の例...
//[0] print $xml -> channel -> item[0] -> title; print $xml -> channel -> item[0] -> link; print $xml -> channel -> item[0] -> pubDate; print $xml -> channel -> item[0] -> title; //[1] print $xml -> channel -> item[1] -> title; print $xml -> channel -> item[1] -> link; print $xml -> channel -> item[1] -> pubDate; print $xml -> channel -> item[1] -> title; //[2] print $xml -> channel -> item[2] -> title; print $xml -> channel -> item[2] -> link; print $xml -> channel -> item[2] -> pubDate; print $xml -> channel -> item[2] -> title; //[3] print $xml -> channel -> item[3] -> title; print $xml -> channel -> item[3] -> link; print $xml -> channel -> item[3] -> pubDate; print $xml -> channel -> item[3] -> title; //[4] print $xml -> channel -> item[4] -> title; print $xml -> channel -> item[4] -> link; print $xml -> channel -> item[4] -> pubDate; print $xml -> channel -> item[4] -> title; //[5] print $xml -> channel -> item[5] -> title; print $xml -> channel -> item[5] -> link; print $xml -> channel -> item[5] -> pubDate; print $xml -> channel -> item[5] -> title; //[6] print $xml -> channel -> item[6] -> title; print $xml -> channel -> item[6] -> link; print $xml -> channel -> item[6] -> pubDate; print $xml -> channel -> item[6] -> title; //[7] print $xml -> channel -> item[7] -> title; print $xml -> channel -> item[7] -> link; print $xml -> channel -> item[7] -> pubDate; print $xml -> channel -> item[7] -> title; //[8] print $xml -> channel -> item[8] -> title; print $xml -> channel -> item[8] -> link; print $xml -> channel -> item[8] -> pubDate; print $xml -> channel -> item[8] -> title; //[9] print $xml -> channel -> item[9] -> title; print $xml -> channel -> item[9] -> link; print $xml -> channel -> item[9] -> pubDate; print $xml -> channel -> item[9] -> title;
上記の様に書きたくないなら[$i]の様に書きましょう
以上で、XMLの読み込みは、終了です。
後は自由にカスタムして完了(*´∀`*)
以上で、XMLの読み込みは、終了です。
後は自由にカスタムして完了(*´∀`*)
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8" /> <title></title> </head> <body> <?php $xmlname = "http://gplus.slfeed.net/RSS2/103883213408660487064"; $xml = simplexml_load_file($xmlname); $htmla = '<hr>'; for($i=0; $i <= 9; $i++) { $p1 = $xml -> channel -> item[$i] -> title . '<br>'; $p2 = $xml -> channel -> item[$i] -> link . '<br>'; $p3 = $xml -> channel -> item[$i] -> pubDate . '<br>'; $p4 = $xml -> channel -> item[$i] -> description . '<br>'; $p5 = $xml -> channel -> item[$i] -> title . '<br>'; print '<h2><a href="' . $p2 . '">' . $p1 . '</a></h2><p>' . $p4 . '</p><hr><br>'; } ?> </body> </html>