• 締切済み

外部の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と同じディレクトリに格納しております。 以上、アドバイスお願いいただけたらと思います。 よろしくお願いいたします。

みんなの回答

回答No.2

まず、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)を取得して、返すだけ、の記述です。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

サーバ側で、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]; ?> こんな感じで。

kzk78
質問者

お礼

hogehoge78さま ご回答ありがとうございます! proxy.phpとは別にphpのファイルを作るということですか? それともproxy.php内を書換えるということなのでしょうか。 初歩的な質問をして申し訳ございません。 phpに関する知識がほとんどないまま jQueryのライブラリの中にセットで入っているので 関連サイトで説明をみながら内容の一部分を書換える 程度のレベルでしたので、ご回答いただいたような 発想がまるでありませんでした。 今後は知識を入れながら励みたいと思います。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • jqueryを使いRSS出力の際titleが無い時

    現在jqueryのjfeedを使ってフェイスブックのウォール情報を サイトに出力させようとしているのですが、 フェイスブックの画像を投稿した際、記事自体にTitle要素がないために 以下のコードだとタイトル自体が空欄になってしまいます。 その際の対処として、タイトルが無い場合「No Title」と出力したいのですが どうすればよいでしょうか?? <コード> <script type="text/javascript" src="../js/jquery.jfeed.pack.js" charset="utf-8"></script> <script type="text/javascript"> jQuery(function() { jQuery.getFeed({ url: 'proxy.php?url=<RSSURL>)',success:onComplete}); function onComplete(feed) { var temp = '<ul>'; for(var i = 0; i < feed.items.length && i < 3; i++) { //数字は件数 var item = feed.items[i]; temp += '<li class="feedDate">'+changeDate(item.updated)+'</li>'; temp += '<li align="left" class="feedTitle">'; temp += '<a href="#" target="_blank">' + item.title + '</a>'; temp += '</li>'; } temp += '</ul>'; jQuery('#news').append(temp); } }); //日付表記を変換 function changeDate(str){ var myDate=new Date(str); var YYYY=myDate.getFullYear(); var MM=myDate.getMonth()+1; if(MM<10){MM="0"+MM;} var DD=myDate.getDate(); if(DD<10){DD="0"+DD;} var date=YYYY+'年'+MM+'月'+DD+'日'; return date; } //--> </script>

    • ベストアンサー
    • CSS
  • PHP4でXML

    こんにちは。PHPでXMLファイルを書き換えたいのですが、サーバ環境がPHP5ではありません。以下のようにHTMLと同じ方法でphpファイルを読み込むことは不可能なのでしょうか?だとしたら他に良い方法はありますか?困っています。どなたか助けてください。よろしくお願いします。 <?xml version="1.0" encoding="utf-8"?> <rss version="2.0"> <channel> <title>○○1</title> <link>http://○○</link> <description>ウェブサイトに掲載されている最新の情報を掲載しております。</description> <language>ja</language> <copyright>Copyright (c) 2007 ○○, Inc. All Rights Reserved.</copyright> <pubDate><?php include("../rss/date.php"); ?></pubDate> <item> <title>ニュースリリース</title> <link>http://○○</link> <description><?php include("../rss/news.php"); ?></description> <pubDate><?php include("../rss/date.php"); ?></pubDate> </item> <item> <title>商品一覧ページ</title> <link>http://○○</link> <description><?php include("../rss/prodact.php"); ?></description> <pubDate><?php include("../rss/date.php"); ?></pubDate> </item> <item> <title>沿革</title> <link>http://○○</link> <description><?php include("../rss/corporation.php"); ?></description> <pubDate><?php include("../rss/date.php"); ?></pubDate> </item> </channel> </rss>

    • 締切済み
    • XML
  • PHPで一部サイトからRSS情報を取得できない

    PHPを使用して、他のサイトからRSS情報を取得し、 DBにデータを格納する、というような処理をするバッチを作成しています。 SimplePieという無料のライブラリを使用し、 下記のようなファンクションを作成しました。 /* ================= * * RSS情報を最大5件取得 * =================*/ function get_rss_info($feed_url) { // 戻り値 $rss_list = array(); // RSSデータを取得 $feed = new SimplePie(); $feed -> enable_cache(false); $feed -> set_feed_url($feed_url); $feed -> init(); $feed->handle_content_type(); // 過去記事を最大5記事まで取得 $feedItems = $feed -> get_items(0, 5); foreach($feedItems as $item) { // ※自作クラスです $rss = new RSS(); $rss->rss_id = $item -> get_id(); $rss->rss_title = $item -> get_title(); $rss->published_date = $item -> get_date('Y/m/d H:i:s'); $rss->rss_url = $item -> get_permalink(); $rss->rss_text = $item -> get_description(); array_push($rss_list, $rss); } return $rss_list; } 上記のファンクションで、アメブロなどのRSS情報は取得できますし、 一部WordPressサイトのRSS情報も問題なく取得することが出来ました。 しかし、一部のWordPressサイトでは、上記のファンクションを通しても 1つもRSS情報を取得することが出来ず、 配列も空のままで返却されてしまっております。 Feedlyなどの外部サービスで情報が取得できているので、 私のプログラムが悪いのだとは思っているのですが・・・ 自分なりに調査をしてみたのですが、 全く糸口を掴むことができませんでした。 お知恵を貸していただければと思います。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPでxmlファイルへのデータの上書き方法

    混乱してしまっています。初心者です。 前回もPHPでの上書き方法をご教授いただいたのにごめんなさい。 PHPを使って、RSSを更新していくフォームを作成しております。 「入力した内容をPOSTでうけとって、xmlファイルにwで書き込む」 としましたら、最新の項目はでますが、履歴がきえます。もちろんです。 RSSでタグを書いていくとき更新情報は<item></item>にはいりますが、 その上にも下にもスクリプトがありますよね。<item></item>だけかきこんでいくというというのは どういった命令をしていけばいいのですか? お昼からずっと考えて、かなりまいっています。 お答えくださる方々にはとるにたらないような初歩的は質問かと存じますが、どうかご教授ください。 よろしくお願いします。 ↓「きえるRSSのなりそこない」 <!doctype html> <html> <head> <meta charset="jis" > <title>RSS登録</title> <body> <?php $title=$_POST["title"]; $text=$_POST["text"]; $url=$_POST["url"]; $rss=' <?xml version="1.0"?> <rss version="2.0"> <channel> <title>●●●</title> <link>●●.com</link> <description>最新の●●です</description> <lastBuildDate>Tue, 30 Jul 2013 22:32:44+0900</lastBuildDate> <item><title>'.$title.'</title><link>'.$url.'</link><description>'.$text.'</description></item> </channel> </rss> '; $f=fopen("rss.xml","w"); fputs($f,$rss); fclose($f); ?> </body> </html>

    • ベストアンサー
    • PHP
  • jquery xmlのlinkが空の<a>タグ

    jquery ajaxでサイトのRSSを読み込み表示させるスクリプトです。RSS2.0形式のxml要素のlink内が空の場合、<a>タグを入れたくないのですが、下のスクリプトだと、IE8では、<a>タグが入りませんが、firefoxでは入ってしまいます。 ************** $(xml).find('item').each(function(i){ if ( i > 4 ) { return false; } var title = $(this).find('title').text(); var url = $(this).find('link').text(); var date = $(this).find('pubDate').text(); //日付を整形 date = dateChanger(date); if(url==""){ $('#feedList dl').append('<dt>' + date[0] +'<\/dt>'+ '<dd>'+ title+'<\/dd>'); } else { $('#feedList dl').append('<dt>' + date[0] +'<\/dt>'+ '<dd><a href="' + url + '">' + title + '<\/a><\/dd>'); } }); **************** どの部分が原因でしょうか。どうぞご教示ください。

  • flashでPHPファイル(実際は該当するxmlを呼ぶ)を読み込む方法について

    FLASH(AS2.0)でPHPファイル(実際は該当するxmlを呼ぶ)を読み込むようにするにはどのようにしたらいいのですか? 現状では、ローカルのxmlファイルを読み込むように、 下記のように書いてあります。 var objXML:XML = new XML(); objXML.ignoreWhite = true; objXML.onLoad = function(success:Boolean):Void { if(success) { loadXML(this); } } var menuArray:Array = new Array(); // function loadXML(objXML:XML):Void { var dataNode:XMLNode = objXML.firstChild; var menuNodes:Array = dataNode.childNodes; for(var i:Number = 1; i <= menuNodes.length; i++) { var menuNode:XMLNode = menuNodes[i-1].childNodes; var Name:String = menuNode[0].firstChild.nodeValue; menuArray[i] = { title:Name}; } myVars(menuArray); } objXML.load("sample.xml"); この状態から、外部<http://aaaa/sample.php>URLに アクセスして、PHPファイルを読み込むにはどのようにしたら よいのか全くわかりません。 objXML.load("sample.xml"); 上記の()の中に直接URLを挿入すると、 ローカルでは確認できるのですが、 ファイルをアップすると、まったく読み込めてはいません。 ActionScriptは全くわからないので、ご教授よろしくお願いいたします。

  • PEAR XML_Query2XMLを利用したPHPからFlash(AS3)へのXMLデータの渡し方について。

    毎度お世話になっております。 前回させていただいた質問で、PHPからFlashへのデータ受け渡しをしたいと考えていたところ、XML形式がいいと教えていただき、試していました。 FlashのただのXMLファイルの読み込みはでき、PHPのPEAR XML_Query2XMLを利用してデータベースのデータをXMLに整形することも出来ました。 しかし、その後の連結的な操作が分からず戸惑っております。 お時間があるときでよろしいので、何を使ったらよいかなどアドバイス等を頂ければと思います。 よろしくお願いします。 環境 Flash CS3(AS3) PHP5.2.6 MySQL5.1.29 Apache2.2.10 ・PHPの今のところのプログラム <?php // include required files include 'XML/Query2XML.php'; include 'MDB2.php'; try { // initialize Query2XML object $q2x = XML_Query2XML::factory(MDB2::factory('mysql://ユーザ名:パスワード@localhost/データベース名')); // generate SQL query // get results as XML $sql = "SELECT * FROM table名"; $xml = $q2x->getFlatXML($sql); // send output to browser header('Content-Type: text/xml'); $xml->formatOutput = true; echo $xml->saveXML(); } catch (Exception $e) { echo $e->getMessage(); } ?> ・AS3の今のところのプログラム System.useCodePage = true; // 外部XMLはURLLoaderで読み込む var myLoader:URLLoader = new URLLoader(); myLoader.addEventListener(Event.COMPLETE, completeData); myLoader.load(new URLRequest("test.xml")); // 読み込み完了後の処理 function completeData(event:Event):void { // 読み込んだ文字列をmyXMLに入れる var myXML:XML = new XML(myLoader.data); // データのnameとpriceの値をリストアップ表示 trace(myXML.drink[1].name); for (var i = 0; i < myXML.drink.length(); i++) {; //ダイナミックテキストでi番目を表示 db.text = myXML.drink[i].name trace(myXML.drink[i].name); trace(myXML.drink[i].@price); } } よろしくお願いします^^

    • ベストアンサー
    • PHP
  • javascriptでわからない所があります。

    javascriptでわからない所があります。アドバイスお願いします。 ブログでajax feed apiを使いRSSを表示しようと思い下記のサイトのコードを貼ってみました。 サイト⇒http://www.zoezoe.net/2008/06/javascriptrssgoogle-ajax-feed.php 以下サイトのコード --------------------- <script type="text/javascript" src="http://www.google.com/jsapi?key=ABQIAAAA7_2e7OzfQnVgCZgpBhg3_RRuFDZ..."></script> <script type="text/javascript"> google.load("feeds", "1"); function initialize() { var feed = new google.feeds.Feed("http://www.zoezoe.net/atom.xml"); feed.load(function(result) { if (!result.error) { var container = document.getElementById("feed"); for (var i = 0; i < result.feed.entries.length; i++) { var entry = result.feed.entries[i]; var dd = new Date(entry.publishedDate); // now var yearNum = dd.getYear(); if (yearNum < 2000) yearNum += 1900; var date = '<li>' + yearNum + "年"+(dd.getMonth()+1)+"月"+dd.getDate()+"日 "; container.innerHTML += " " + date +"<a href='" + entry.link + "' title='" + entry.title + "'>" + entry.title + "</a></li>"; } } }); } google.setOnLoadCallback(initialize); </script> </head> <body> <ul> <div id="feed"></div> </ul> </body> --------------------- これをカスタマイズしたいのですが、以下のことができません。アドバイスお願いします。 ○表示したRSSの間に区切り線を入れたい ○日付の次を改行して    日付    タイトル のように表示したい。 ○別タブで開きたい。 一つでも分かりましたらアドバイスお願いします。 var date = '<li>' + yearNum + "年"+(dd.getMonth()+1)+"月"+dd.getDate()+"日 "; container.innerHTML += " " + date +"<a href='" + entry.link + "' title='" + entry.title + "'>" + entry.title + "</a></li>"; ↑の所をいじっても出来ませんでした。

  • GoogleFeedApiで任意タイトルの付け方

    サイト名の正規の取得方法は、 var feed = new google.feeds.Feed(”URL”); var title = rss.feed.title; document.writeIn(title); 多分?こんな感じなのでしょうけど、自分は、各サイトごとに指定したサイト名を表示させたいので、 http://wp.7zz.jp/news/ajax/2447.html ↑のサイトをほぼ全部参考にして、 var site = new Array(); site[0] ={ title:'GIZUMODO', url:'http://feeds.gizmodo.jp/rss/gizmodo/index.xml', disp_entry:2 }; ↑のようにサイの情報を配列に手入力して、 ~前略~ function init() { var site_count = 0; for (var i=0; i<site.length; i++){ // 読み込むRSSを設定 var feed = new google.feeds.Feed(site[i]['url']); feed.setNumEntries(site[i]['disp_entry']) //●↓追加 var title = site[i]['title'];    //●↑           feed.load(function(rss) { if (!rss.error) { // RSSからサイトの情報を配列に格納 //●↓変更        channel['title'] = title; //●↑ channel['link'] = rss.feed.link; channel['favicon'] = "http://favicon.hatena.ne.jp/?url=" + channel['link']; channel['description'] = rss.feed.description; channel['author'] = rss.feed.author; ~後略~ }} みたいな小学生レベルの改変をしたのですが、全てのタイトル名が同じになってしまいます。 javascriptの入門書を読んだ程度の私に、どこがおかしいのか指摘お願いいたします。よろしくお願いいたします。

  • JavaScriptに詳しい方へ。

    はじめまして。twitterのつぶやきをブログへ貼り付ける方法をお聞きしたく、質問させていただきます。 Twitterの正規のブログパーツではたまに表示されないことがあるので、googleの提供する、Ajax feed というRSSを試して、成功したのですが文章が、 「kobayashitakuya: おはよう。」 「kobayashitakuya: おやすみ。」 のように、ひとつひとつのつぶやきに「@kobayashitakuya」というTwitterIDまで表示されてしまいます。 これを非表示にする方法をご教授してくださった方がいらしたら、とても助かります。 どなたか時間があればご教授してください。 ちなみにソースは以下のとおりです。 google.load("feeds", "1"); google.setOnLoadCallback(function() { var feed = new google.feeds.Feed("http://twitter.com/statuses/user_timeline/162644645.rss"); feed.setNumEntries(15); //表示つぶやき数 feed.load(function(result) { if (!result.error) { var html = ""; html += "<div class='newslist'>"; html += "<dl>"; for (var i = 0; i < result.feed.entries.length; i++) { var entry = result.feed.entries[i]; var dd = new Date(entry.publishedDate); // now var date = (dd.getMonth() + 1) + "月" + dd.getDate() + "日&nbsp;" + dd.getHours() + ":" + dd.getMinutes(); var content = entry.content; var contentSnippet = entry.contentSnippet; html += "<dt>" + date + "</dt>"; html += "<dd>"; html += "<a class='title' target='_blank' href='" + entry.contentSnippet + "'>" + result.feed.entries[i].title + "</a>"; html += "</dd>"; } html += "<dl>"; html += "</div>"; $("#kobayashi").html(html); } }); }); これで、 <div id="kobayashi"></div> と入力すると、つぶやきが表示されます。 「おはよう。」とつぶやくと、 「kobayashitakuya: おはよう」 と表示されます。 参考までに宜しくお願いします。