前回の「PHP5 SimpleXMLでRSSフィードを取得する」で粗方のRSSの取得ができたのですが、
このBlogを含む[CDATA]がある場合、無視されて取得できていませんでした。
のでsimplexml_load_fileにLIBXML_NOCDATAをくっつけて実行することで
取得出来るようです。
$feed = simplexml_load_file("http://kidokorock.com/feed",'SimpleXMLElement',LIBXML_NOCDATA);
foreach ($feed->channel->item as $item) {
//タイトルを表示
echo $item->title;
//リンクを表示
echo $item->link;
//時刻
echo $item->pubDate;
//本文
echo $item->description;
}
さて、PHP5になってとっても便利になったSimpleXMLを使ってみようと思います。
XMLということでRSSを取得するスクリプトを覚え書き
ポイントはRSSで使用されているdc:dateをNamespaces(名前空間)で
取得しなければならない
↓のdc:dateの部分
<dc:date>2009-03-02T15:00:00 +0900</dc:date>
ので下記を参考にさせていただきました。
Stuart Herbert’s PHP Blog
限りなく簡単に書いたコードは以下
$feed = simplexml_load_file("RSSへのパス");
foreach ($feed->item as $item) {
//タイトルを表示
echo $item->title;
//リンクを表示
echo $item->link;
//時刻
$dc = $item->children('http://purl.org/dc/elements/1.1/');
echo $dc->date;
//本文
echo $item->description;
}
これだと[CDATA]が扱えないので
改良版はのちほど。。
続き→
SimpleXMLでCDATAを扱う
今日は凄く細かい事で苦戦したので、覚え書きです。
windowsのExcelで書き出したCSVをWEB用に加工してたのですが、
どうも、機種依存文字#9312;(①)とか#x2160;(Ⅰ)とかがどうしても文字化ける。。
ということで
通常そういう場合には、
$hoge = mb_convert_encoding($hoge , "EUC-JP", "SJIS");
$hoge =str_replace("Ⅰ","Ⅰ",$hoge);
とかになるとおもうのですが、これだと何故か機種依存文字が無視されています。
ので
//sjis-winからいったんUTF-8に
$hoge=mb_convert_encoding($hoge , "UTF-8", "sjis-win");
//機種依存文字を変換
$hoge =str_replace("Ⅰ","Ⅰ",$hoge);
//機種依存文字を変換
$hoge = mb_convert_encoding($hoge , "EUC-JP", "UTF-8");
で無事完了しました!
cronとかで気軽にファイルのファイルのバックアップがしたいとおもい、
最小限のスクリプトでバックアップをおこなうスクリプトです。
$targetに元のファイルを入れる
$newtargetにバックアップ後のファイル名を指定。
(例ではtargetがnewtarget20090909.txtみたいな感じでバックアップに日付を入れられます。)
あとはこれをcronなどで定期的に処理すればOK!
<?php
$target = 'target.txt';
$newtarget = 'new_target'.date("YmdHi").'.txt';
if (!copy($target, $newtarget)) {
echo "コピーできませんでした。\n";
}
?>
さて、最近はPHPのdateに四苦八苦しているのですが、
今度は月末の日にちを取得する方法を覚え書きです。
とりあえず、来月の今月末の取得方法です
今月末
date('Ymd', mktime(0, 0, 0, date('m') + 1, 0, date('Y')));
続いて来月末
来月末
date('Ymd', mktime(0, 0, 0, date('m') + 2, 0, date('Y')));
ポイントは
mktime (時, 分, 秒, 月, 日, 年)
なので
今月末は 今の月に+1して日の0を求めるという事になり
来月末は 今の月に+2して日の0を求めるという事になります。