Xml | memo-memo Skip to content

memo-memo

web制作に便利そうな情報をメモるブログ

Archive

Tag: xml

注意)下記の記事は、php4での話です。

よくトップページとかで、「NEWS!」の項目があって、その中に新着情報が載っているサイトがあるけど、まさにそれに挑戦してみました。

下記の、3つのサイトを参考にしました。
http://techblog.ecstudio.jp/tech-tips/xml_unserializer.htmlhttp://keithdevens.com/software/phpxml#sourcehttp://daipresents.com/weblog/fujihalab/archives/2008/10/php4-web-rss-read.php

まず、こちらのサイトから、ライブラリーをダウンロードしましょう。

っていうか、「source code」と書かれた部分をクリックすると、ブラウザ上にコードが表示されるので、それをコピペして、テキストエディタで、xml.phpというファイル名にして、保存。

その次は、こちらのサイトにあるようにincludeで読み込みます。以下参照。

php

<?php
include(‘xml.php’);
$RSS_HOST = ‘http://feeds.feedburner.com/Memo-memo‘;
$xml_data = file_get_contents($RSS_HOST);
$data = XML_unserialize($xml_data);
print”<ul>\n”;
foreach($data['rss']['channel']['item'] as $entry){
print “<li><a href=\”" . $entry['link'] . “\”>” . $entry['title'] . “</a></li>\n”;
}
print”</ul>\n”
?>

上記のように記述したファイルを、先ほどダウンロードしたxml.phpと一緒にサーバーにアップして、ブラウザで表示させると、このブログの各記事のタイトルが、リンク付きで表示されます。

応用するには、青字のところは、読み込みたいxmlファイル(feed)に変更。

赤字のところは、それぞれのxmlファイルの構造によって(feedによって)変えなきゃだめです。

今回、私の使用したfeedは、下記のような構造になっています。

<rss>

<channel>

<item>

~各々の記事の内容<title><link>等など~

</item>

<item>

~各々の記事の内容<title><link>等など~

</item>

</channel>

</rss>

ちょっとざっくりしすぎですが…

様は、

rssの中のchannelの中のitemの中の<title>の値を取得したい!!みたいな感じです。

foreachで、itemの個数分だけ繰り返してます。

うーん最後の方は、うだうだな記事だ…

次は、php5のSimpleXMLを使ってみたいなぁ

前回の記事の追加です。

http://blog.jokerstyle.org/archives/69

例えば、phpで取得したXMLの中で、

<type url=http://blog.jokerstyle.org>ブログ</type>

こんな感じの構造になっていた場合。

赤文字の、属性の値を取得したい場合は、

〜ここまでのパス〜.type["-url"]

こんな感じで、タグ名の後に["-属性名"]とすると取得出来る。

青文字の「ブログ」、という文字を取得したい時は、

〜ここまでのパス〜.type["#text"]

こんな感じで、属性名がある時は、タグ名を「.」で繋ぐんじゃなくて、タグ名の後に["#text"]としないと、取得出来ない。

phpで、xmlファイルを習得方法

file_get_contents()が、便利。

下記のコードで取得できそう。

<?php
$url = “http://www.ssf-dns01.com/seo/atom.xml”;
$rsp = file_get_contents($url);
print($rsp);
?>

後で、ちゃんと使ってみよう。

xmlを、jsonに変換してくれるサービスらしい。
ここに詳しい説明が書いてある。http://ascii.jp/elem/000/000/438/438132/

以前、gourmapの時に使った、xml2jsonみたいな感じかと思われる。

yahoo Pipes

いつか、実験してみよう。

xmlを、javascriptで扱うとにに、便利なライブラリ、ObjTree

http://www.kawa.net/works/js/xml/objtree.html

使い方は、

$.get(“xxx/yyy.php”, function(xml){
var objtree = new XML.ObjTree();
/*複数出現するとわかっているタグ(繰り返し処理がある)をあらかじめobjtree.force_array で指定。こうすると、配列の中に、一つしか要素が無くても、エラーが出にくい。*/
objtree.force_array = ["area", "pref", "city"];
var tree = objtree.parseDOM(xml.documentElement);
/*この後は、jsonと同じ様に、「.」で繋いで、ツリー状に要素を取得出来る。*/
alert(tree.title)
}

こんな感じ。
ただ、変数で表せないタグは、[]で表現する。コロンがあると、ドットでつないで取得できないので、[""]で選択
例) var areaList = tree.rss.channel["ldWeather:source"].area;
変数で表せるかどうかは、firebugのコンソールで、取得しているxmlを見てみるのが良い。