allow_url_fopenを使わずにrssを読む

  • phpからhttp通信でファイルを開くにはallow_url_fopenが必須だが使いたくないという要求
    • simplexml_load_file使いたくない
    • magpie使いたくない
  • 仕方ないのでHTTP/Requestを使う
    • rssの分析はテキトー
<?php

//allow_url_fopenを使わずにrssを読む


require_once "HTTP/Request.php";

$AGENT = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";
$URL = "http://www.hoge.jp/blog/feed";
$rq =new HTTP_Request($URL);
$rq->setHttpVer("1.1");
$rq->addHeader('User-Agent',  $AGENT);
$rq->sendRequest();

$rss = $rq->getResponseBody();

$pos[0] = mb_strpos($rss, '<item>' );
$pos[1] = mb_strpos($rss, '<title>' ,$pos[0] );
$pos[2] = mb_strpos($rss, '</title>' ,$pos[1] );
$pos[3] = mb_strpos($rss, '<link>' ,$pos[2] );
$pos[4] = mb_strpos($rss, '</link>' ,$pos[3] );

$pos[5] = mb_strpos($rss, '<item>' ,$pos[4] );
$pos[6] = mb_strpos($rss, '<title>' ,$pos[5] );
$pos[7] = mb_strpos($rss, '</title>' ,$pos[6] );
$pos[8] = mb_strpos($rss, '<link>' ,$pos[7] );
$pos[9] = mb_strpos($rss, '</link>' ,$pos[8] );

$pos[10] = mb_strpos($rss, '<item>' ,$pos[9] );
$pos[11] = mb_strpos($rss, '<title>' ,$pos[10] );
$pos[12] = mb_strpos($rss, '</title>' ,$pos[11] );
$pos[13] = mb_strpos($rss, '<link>' ,$pos[12] );
$pos[14] = mb_strpos($rss, '</link>' ,$pos[13] );


$title[0] = mb_substr($rss, $pos[1]+7, $pos[2]-$pos[1]-7 );
$link[0] = mb_substr($rss, $pos[3]+6, $pos[4]-$pos[3]-6 );

$title[1] = mb_substr($rss, $pos[6]+7, $pos[7]-$pos[6]-7 );
$link[1] = mb_substr($rss, $pos[8]+6, $pos[9]-$pos[8]-6 );

$title[2] = mb_substr($rss, $pos[11]+7, $pos[12]-$pos[11]-7 );
$link[2] = mb_substr($rss, $pos[13]+6, $pos[14]-$pos[13]-6 );


print <<<EOF
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<title>feedread</title>
</head>
<body>

<a href="$link[0]">$title[0]</a><br />
<a href="$link[1]">$title[1]</a><br />
<a href="$link[2]">$title[2]</a><br />

</body>
</html>
EOF;

exit;


?>