- 締切済み
外部のxmlデータを呼び込むproxy.php
はじめまして。 サイト内に外部のブログのxmlデータ(rss)をjFeedを使用して表示したいと 思い設定しておりますが苦戦しております。 あるサイトで外部のxmlデータを呼び込む際には、直接呼び込めないためproxy.phpを 介して設定するように書かれているのを参考に設定しているのですが。 うまくいきません。 html側の記述 <script type="text/javascript"> $(function(){ $.getFeed({ url:'proxy.php', ←ココの部分で表示したいブログのアドレス(url:'http://rssblog.ameba.jp/one78/rss20.xml')にするとサーバーのプレビューでは確認出来ますが、サーバーにアップしたとたん表示されません。 success: function(feed){ $('#myfeed').append('<h2><a href="'+feed.link+'">'+feed.title+'</a></h2>'); var s=""; for(var i=0; i<feed.items.length && i<10; i++){ var item=feed.items[i]; s+= '<dt id="updated">' + dateChanger(item.updated) + '</dt>'; //更新時間 s+='<dd><a href="'+item.link+'">'+item.title+'</a></dd>'; } $('#myfeed').append(s); } }); var dateChanger = function(str){ var mydate = new Date(str); yy = mydate.getFullYear(); mm = mydate.getMonth() + 1; dd = mydate.getDate(); if (mm < 10) { mm = "0" + mm; } if (dd < 10) { dd = "0" + dd; } datestr = yy + "." + mm + "/" + dd + ""; return datestr; }; }); --> </script> proxy.php側の記述 <?php header('Content-type: application/xml'); $handle = fopen('http://rssblog.ameba.jp/one78/rss20.xml', "r"); ←この表記であっているのか不安です。 if ($handle) { while (!feof($handle)) { $buffer = fgets($handle, 4096); echo $buffer; } fclose($handle); } ?> proxy.phpは上記のhtmlと同じディレクトリに格納しております。 以上、アドバイスお願いいただけたらと思います。 よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- hogehoge78
- ベストアンサー率80% (433/539)
まず、jFeedの、書き方に関してですが、 >url:'proxy.php', ←ココの部分で表示したいブログのアドレス ここの部分を、 url:'proxy.php?url=http://www.example.com/rss.xml', とかといったように、設置してあるHTMLファイルの相対パスとして、proxy.phpを書いて(つまりhogeフォルダにproxy.phpをいれているなら、./hoge/proxy.phpとかとする)、その後ろにクエリーとして、 ?url=http://example.com/rss.xml といったようなパラメータを設置する感じです。 私の書いたPHPの部分は、proxy.php全体に上書きしてください。 結局私の書いたものも、デフォルトで用意されているものも、URLのファイルを開いて、中のコンテンツ(RSS)を取得して、返すだけ、の記述です。
- hogehoge78
- ベストアンサー率80% (433/539)
サーバ側で、fopen関数で、URLを開けないような制限がされているのではないでしょうか。 fsockopenを試してみてはいかがでしょう。 http://www.php.net/manual/ja/function.fsockopen.php 例) <?php if(!isset($_GET['url'])){ exit(); //パラメータが指定されていないので終了 } $url = $_GET['url']; $parse = parse_url($url); if(!isset($parse['host'])) exit(); //ホスト名がないので終了 if(!isset($parse['scheme']) || $parse['scheme'] != 'http') exit(); //httpで始まってないので終了 $fp = fsockopen($parse['host'], 80, $errno, $errstr, 30); if(!$fp){ exit(); //開けないので終わる } $out = "GET {$parse[path]} HTTP/1.0\r\n"; $out.= "Host: {$parse[host]}\r\n"; $out.= "Connection: Close\r\n\r\n"; fwrite($fp, $out); $input = ""; while(!feof($fp)){ $input.= fgets($fp, 128); } fclose($fp); $input = explode("\r\n\r\n", $input, 2); echo $input[1]; ?> こんな感じで。
お礼
hogehoge78さま ご回答ありがとうございます! proxy.phpとは別にphpのファイルを作るということですか? それともproxy.php内を書換えるということなのでしょうか。 初歩的な質問をして申し訳ございません。 phpに関する知識がほとんどないまま jQueryのライブラリの中にセットで入っているので 関連サイトで説明をみながら内容の一部分を書換える 程度のレベルでしたので、ご回答いただいたような 発想がまるでありませんでした。 今後は知識を入れながら励みたいと思います。