• 締切済み

googlemapAPIとXML-RPC

お世話になります。 「Googleマップ+Ajaxで自分の地図をつくる本」という書籍を読んで勉強しております。 書籍のサンプルコードを実際に動作させてみたところ、動きません。 googlemapオブジェクトのPOSTが正常に動作していないか、もしくはXML-RPCが正常に 動作していないかだと思うのですが解決できません。 お分かりになる方いらっしゃいましたら、ご教授ください。 ■サンプルコードの一部を転記します。 ■javascript function xmlRpc( server, method, params, callbackfunc ) { var xml_param = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; xml_param += "<methodCall>"; xml_param += "<methodName>" + method + "</methodName>"; xml_param += "<params>"; for( var i=0; i < params.length ; i++ ) { xml_param += "<param>"; xml_param += "<value>" + params[i] + "</value>"; xml_param += "</param>"; } xml_param += "</params>"; xml_param += "</methodCall>"; var req = GXmlHttp.create(); req.open("POST", server , true ); req.onreadystatechange = function() { if(req.readyState == 4 ) { if( callbackfunc != null ) callbackfunc(req.requestXML); } } ★ req.setRequestHeader("Content-Type", "text/xml; charset=UTF-8"); req.send(xml_param); ■PHP $request = $HTTP_RAW_POST_DATA; $server = xmlrpc_server_create(); xmlrpc_server_register_method( $server, "addLocation", "addLocation" ); xmlrpc_server_register_method( $server, "deleteLocation", "deleteLocation" ); xmlrpc_server_register_method( $server, "editPlace", "editPlace" ); xmlrpc_server_register_method( $server, "deletePlace", "deletePlace" ); ■補足 javascriptからXML-RPC(PHPに記述)のメソッドを指定し、各種メソッドではDB処理が行われています。 javascript中の★のところまで通っていることをalert()で確認しましたが、PHPは一切通っていない ようです。 ■以下2つの環境で動作確認しております。 (1)自宅マシン ・OS windows XP SP2 ・XAMPP Ver1.7.0インストール ・PEARのXML-RPCはインストール済み (2)レンタルサーバ ・さくらのレンタルサーバ スタンダード ・phpinfo()にてPEARのXML-RPCインストールを確認済み

みんなの回答

回答No.1

気づいたところだけ列挙します。 onreadystatechangeはopenする前にセットしてください。 readyStateプロパティが4でも、statusプロパティが404(FileNotFound)、500(InternalServerError)その他、 何かのエラーになっている可能性もありますので、それもチェックした方がいいと思います。 簡単にするなら、 200(正常終了)、304(NotModified)なら表示を実行、それ以外は何らかのエラーを表示するだけでいいと思います。 headerの上書きについて、私が作ったAjaxライブラリから抜粋、編集したコードです。(最低限のコードに縮めています) IE6、IE7のActiveXObjectを使用した場合のみエラーチェックをかけています (IE7のnative XMLHttpRequestモードではリクエストヘッダのセットでエラーが発生しないようです) // req.overrideMimeType('application/xml'); //PHPでheader('content-type: application/xml')を使用していない場合 if(window.opera || (typeof req.setRequestHeader) =='function'){ req.setRequestHeader('Content-Type', "text/xml; charset=UTF-8"); }else{ // for ActiveXObject try{ req.setRequestHeader('Content-Type', "text/xml; charset=UTF-8"); }catch(e){ } } 未検証です。

mtsttty
質問者

補足

ご助言いただきありがとうございます。 解説いただいた内容を試してみましたが、動作は同じでした。 この内容をもとにもう少し調べてみようかと思います。 また何かお分かりになりましたらよろしくお願いいたします。

関連するQ&A

  • XML-RPCでsend()できない

    PearライブラリにあるXML-RPCを使おうとすると 以下のようなエラーがでます。 Fault Code: 5 Fault Reason: Didn't receive 200 OK from remote server. (HTTP/1.1 404 Not Found ☆プログラム //クライアントの作成 $xmlrpc_host = "localhost"; //host名 $xmlrpc_path = "/~test/xml_rpc/server.php";//パス $c = new XML_RPC_client( $xmlrpc_path, $xmlrpc_host, 80 ); //メッセージ作成 $params = array(new XML_RPC_Value( 5, 'int' ) ,new XML_RPC_Value( 3, 'int' )); $message = new XML_RPC_Message('sample.sum',$params); //メッセージ送信 $response = $c->send($message); // Process the response. if (!$response->faultCode()) { $v = $response->value(); print "Value: ". $v->scalarval() ."<br>"; print "The XML received:<blockquote>" . $response->serialize(); print "</blockquote>"; }else{ print "Fault Code: " . $response->faultCode() . "<br>"; print "Fault Reason: " . $response->faultString() . "<br>"; } send()ができないみたいです(>_<) PHP5を使っているんですが、 PHP5では標準であるxml-rpcを使っても、 だめです。 php_iniファイルで always_populate_raw_post_data = On と行を付け足したんですけどね‥ XML_RPCを使えるようにするには、 ほかにも必要な環境設定はあるでしょうか? 誰かご存知でしたら教えてください。 お願いしますm(_ _)m プログラムは下の PHPを用いたXML-RPCの基礎 というサイトを参考。 http//mikilab.doshisha.ac.jp/dia/research/report/2005/0813/007/report20050813007.html server.phpとclient.phpというファイルを、 適当なところに配置して実行しました。

    • ベストアンサー
    • PHP
  • XML-RPCについて

    どうも、Java初心者です。 XML-RPCで公開されたAPIをJavaでつつこうと思っています。 具体的にはWacca API(XML RPCでやり取り)を使ってなにか作ろうと思っています。 ■コチラのAPI http://wacca.tv/help/api/songsearch XmlRpc2.0(http://ws.apache.org/xmlrpc/index.html) を利用していますが、XMLRPCへの引数はどのように設定すればいいのでしょうか? 下記のコードでは、デフォルトの100件が表示されるだけです。なにもパラメータが有効になっていないということですよね。 参考サイト、参考プログラムがあれば教えてください! XmlRpcClient client = new XmlRpcClient("http://a.wacca.tv/api/xmlrpc"); Vector parameterList = new Vector(); parameterList.add("love");//キーワードlove Vector result = (Vector)client.execute("song.Search", parameterList); Iterator i = result.iterator(); while (i.hasNext()) { Hashtable hash = (Hashtable) i.next(); System.out.println((Integer) hash.get("song_id") + ":" + (String) hash.get("artist_name") + ":" + (String) hash.get("mp3_url")); } JDK1.5です。 よろしくおねがいします。

  • 提供されたXML-RPC APIを利用してphpプログラムに実装したいですが

    GetSenという文章サマリ抽出システム(http://www.ryo.com/2005/06/01/39/)提供しているXML-RPC APIを利用してphpプログラムに実装したいですが、なかなかうまく行かず、困っています。誰かが助けてください。 ちなみに、GetSenの作者様が公開しているservice URIは Server: www.ryo.com Port: 80 Path: /getsen/rpc.php ryocomJapanese.getsen GetSenを使用して、日本語の文章からサマリ(要約)を取り出します 引数 String copus // サマリ抽出の対象とする日本語の文章 返り値 String summarySentence // 抽出されたサマリ(要約文) プログラミングしたものは以下のように: ------------------------------------------------------------- <html> <head> <title>sum Client Demo</title> </head> <body> <h1>summary Client Demo</h1> <?php require_once("XML/RPC.php"); $GLOBALS['XML_RPC_defencoding'] = "UTF-8"; $xmlrpc_host = "www.ryo.com"; //host名 $xmlrpc_path = "/getsen";//パス $c = new XML_RPC_client( $xmlrpc_path, $xmlrpc_host, 80 ); //メッセージ作成 $message = new XML_RPC_Value( '集合研修は研修コースの中で最も一般的で、総合的な研修方法です。お客様からの業務要件に沿った実践的な内容をご提供し、Oracle認定試験の学習にもなります。また、集合研修では教室でのデモンストレーションや演習問題にて、実機を利用した環境をご提供いたします。','string'); //テスト用要約する文書 $copus = new XML_RPC_Message('ryocomJapanese.getsen',$message); //メッセージ送信 $response = $c->send($copus); print_r($response); ?> </body> </html> ------------------------------------------------------------------------- 教えて下されば幸いです。

    • 締切済み
    • PHP
  • PHP PEAR OAuthのdebug

    PEARを利用してOAuthを実装しようとしています。 いくつか成功したアプリケーションもあるのですがうまくいかないこともあり、 その場合のデバッグ方法に悩んでいます。 PEAR個別の相談になってしまうとは思うのですが、ライブラリ内のメソッドでエラーが出ていないか 原因特定のためのデバッグする方法はないでしょうか? 具体的にはHTTP_OAuth_Consumer_Response::sendRequestを使った次の行で echo("test")の出力が得られず、何らかの問題がsendRequest内で起こっているのだと思います。 できるだけライブラリ自体に手を加えずにやる方法はないでしょうか? このメソッドの参考URL http://pear.php.net/package/HTTP_OAuth/docs/latest/HTTP_OAuth/HTTP_OAuth_Consumer.html#methodsendRequest メソッドの内容 public function sendRequest($url, array $additional = array(), $method = 'POST') 239 { 240 $params = array( 241 'oauth_consumer_key' => $this->key, 242 'oauth_signature_method' => $this->getSignatureMethod() 243 ); 244 245 if ($this->getToken()) { 246 $params['oauth_token'] = $this->getToken(); 247 } 248 249 $params = array_merge($additional, $params); 250 251 $req = clone $this->getOAuthConsumerRequest(); 252 253 $req->setUrl($url); 254 $req->setMethod($method); 255 $req->setSecrets($this->getSecrets()); 256 $req->setParameters($params); 257 $this->lastResponse = $req->send(); 258 $this->lastRequest = $req; 259 260 return $this->lastResponse; 261 }

    • 締切済み
    • PHP
  • XMLデータをRDBに格納する際のテーブル構造

    データベース初心者です。 ちょっとしたWebアプリを作成しているのですが、以下のようなXML構造のデータを RDB(SQLサーバー2008)に登録する際のテーブル構成をどのようにすればよいか困っています。 本やインターネットで調べたのですが分からなかったので、もしわかる方がいましたら教えて下さい。 【xml構造】 ※登録されたWebサービスに送るパラメータ情報の定義 <xml>  <name></name>  <url></url>  <a_params>?   <param>*    <value>| <id>| <date>   </param>  </a_params>  <b_params>?   <param>*    <value>| <id>| <date>   </param>  </b_params>  <c_params>?   <param>*    <value>| <id>| <date>   </param>  <c_params> </xml> 【タグの属性】  param : name  value : なし  id : length, prefix  date : format 【タグ後ろの記号の意味】 ? 0回または1回必要 * 0回またはn回必要 記号なし 1回必要 単純に考えると、a_params | b_params | c_params毎にそれぞれvalue | id | dateの中間テーブルを 用意することになりそうですが、そうなると最低でも合計10個(1+3×3)のテーブルができてしまいます。 以下のように中間テーブル内で、どこのフィールドで使用されているか持たせば、テーブル数も 合計7個(1+3×2)となり、冗長なテーブルも減らすことができるかと思いましたが、 他によい方法はないでしょうか? 例:子要素Valueの場合 [Applicationテーブル]  id  name  url [ApplicationValueテーブル] ←中間テーブル  ApplicationID :Applicationテーブルのid  FieldType :どこのフィールドで使用されているか(a_params or b_params or c_params)  ValueID :Valueテーブルのid [Valueテーブル]   id :PK  value RDBでの実現が難しい場合は、SQLサーバのXML機能での実現方法も教えていただきたいです。 よろしくお願いします。

  • GoogleMapsAPIv3でXMLを取得(2)

    以前も一度質問しましたが、新たな障壁が出てきたので同じタイトルで質問させていただきます。 Google Maps API v3でサーバー上にあるXMLファイルを利用して、マーカーを出現させようと思います。 現在以下のようなコードで挑戦しています。 <head> <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> <title>Google Maps JavaScript API v3</title> <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> <script type="text/javascript" src="util.js"></script> <script type="text/javascript"> function initialize() { var myLatlng = new google.maps.LatLng(35.682956, 139.727554); var myOptions = { zoom: 12, center: myLatlng, mapTypeId: google.maps.MapTypeId.ROADMAP } var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); downloadUrl("http://ja.xml", function(data) { var markers = data.getElementsByTagName("Event"); for (var i = 0; i < markers.length; i++) { var lat = parseFloat(markers[i].getElementsByTagName("Latitude")[0].childNodes[0].nodeValue); var lng = parseFloat(markers[i].getElementsByTagName("Longitude")[0].childNodes[0].nodeValue); lat = lat - lat * 0.00010695 + lng * 0.000017464 + 0.0046017; lng = lng - lat * 0.000046038 - lng * 0.000083043 + 0.010040; var latlng = new google.maps.LatLng(lat,lng); var marker = new google.maps.Marker({position: latlng, map: map}); } }); } </script> </head> このコードの場合、同ディレクトリ、または同サーバーにあるXMLを読み込むとうまく動作したのですが、Web上で公開されているようなXMLだとうまく表示されませんでした。 downloadUrlというのは同サーバーの物しか対応していないのでしょうか。 それとも他に原因が考えられますか? ご存じの方いらっしゃいましたらよろしくお願い致します。

  • Ajax.RequestでXMLデータをパース

    お世話になります。 Ajax.Requestをして、返ってくるデータがXMLなのですが このXMLをパースして表示したいのですが 何か方法はありませんでしょうか? もしかしたら簡単なことなのかもしれませんが ご存知の方がいらっしゃいましたら ご教授よろしくお願いいたします。 ajax.js //////////// function exec(fname,dispArea) { var httpObj = new Ajax.Request(fname, { method:'GET', onSuccess:function(req) { var text = req.responseText; $(dispArea).innerHTML = text; } } ); } ///////////test.html <script language="javascript" type="text/javascript" src="prototype.js"></script> <script language="javascript" type="text/javascript" src="scriptaculous.js"></script> <script language="javascript" type="text/javascript" src="ajax.js"></script> <span id="disp">exec('hoge.xml', 'disp');</script></span> //////////// hoge.xml <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="hoge.xsl" ?> <top> <list> <row>テスト1</row> </list> <list> <row>テスト2</row> </list> <list> <row>テスト3</row> </list> </top> //////////// hoge.xsl <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="top"> <html><title>XMLパース</title> <body> <xsl:for-each select="list"> <xsl:value-of select="row" /> </xsl:for-each> </body> </html> </xsl:template> </xsl:stylesheet>

  • 自作ブログのPing送信について

    お世話になります。 現在自作ブログからphpによる各PingサーバへのPing送信を試みていますが、 チェックしてみると下記のようなエラーが出てしまいます。 色々と調べて、サンプルを応用してみたのですが。。。 原因がわかりましたら是非ご教授ください。 よろしくお願いいたします。 下記のFunctionを実行します。 $titleと$siteurlの値は問題なく入っています。 function SendPing($server, $title, $siteurl){ foreach($server as $value){ //送信先サーバURLをホスト名とパス名に分解する $value = rtrim($value); $arr = parse_url($value); $host = $arr["host"]; $path = $arr["path"]; echo($host); echo"<br />"; //送信先サーバをオープンする if($sock = @fsockopen($host, 80, $errno, $errstr, 20)){ //送信データをつくる $title = urlencode($title); $siteurl = urlencode($siteurl); $params = "<?xml version=\"1.0\" ?>\r\n"; $params .= "<methodCall>\r\n"; $params .= "<methodName>weblogUpdates.ping</methodName>\r\n"; $params .= "<params>\r\n"; $params .= "<param>\r\n"; $params .= "<value>$title</value>\r\n"; $params .= "</param>\r\n"; $params .= "<param>\r\n"; $params .= "<value>$siteurl</value>\r\n"; $params .= "</param>\r\n"; $params .= "</params>\r\n"; $params .= "</methodCall>\r\n"; //送信する fputs($sock, "POST ".$path." HTTP/1.0\r\n"); fputs($sock, "Host: $host\r\n"); fputs($sock, "Content-type: text/xml\r\n"); fputs($sock, "Content-length: ".strlen($param)."\r\n"); fputs($sock, "User-Agent: MSIE7.0\r\n"); fputs($sock, "Connection: Close\r\n"); fputs($sock, "\r\n"); fputs($sock, "$param\r\n"); //リターンを受け取る $res = ""; while (!feof($sock)){ $res .= fgetc($sock); } fclose($sock); //リターンからエラーコードを解釈する preg_match("/(\<\?xml)(.*)(\<\/methodResponse\>)/s", $res, $arr); $res = preg_replace("/UTF-8/i", "utf-8", $arr[0]); echo $res."<br />"; } } } すると下記のようなエラーが出ます。 blog.goo.ne.jp faultString parse error. not well formed. error occurred at line 1, column 1, byte index 0 faultCode -32700 api.my.yahoo.co.jp ping.bloggers.jp faultCode 105 faultString XML error: Invalid document end at line 1, column 1 rpc.technorati.jp rpc.weblogs.com messageCan't accept the ping because the URL must begin with http:// or https://.legalYou agree that use of the Weblogs.com ping service is governed by the Terms of Use found at www.weblogs.com.flerror1 ping.fc2.com faultCode 1 faultString The method you requested, '', was not found. blogsearch.google.co.jp flerror1 messageUnable to parse XML-RPC request. よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • JavaScript側でのXML作成の方法

    JavaScript側でのXML作成の方法 Ajax開発の経験は始めてなので勝手がわかっていないのですが やりたい事はサーバー側からXMLデータを取得して JavaScript側でXMLを編集してサーバーに書き戻すような事がしたいのです。 このような場合、DOMツリーをXMLファイルにシリアライズするには IEだとActiveXObject("Microsoft.XMLDOM")、FireFoxだとXMLSerializer()を使うと いったようにブラウザごとに処理を分けねばなりません。 これは面倒なのであまりやりたくありません。 あとはベタなテキストとして var xml = "<?xml version='1.0' encoding='utf-8'?>" + "<root><element>test</element></root>" と書いていくくらいしか思いつかないのですが ブラウザ間ごとの違いを吸収してくれる XML編集用の便利なJavaScriptライブラリなどは存在したりするものでしょうか? (jQueryなどがそうのような機能を内包してたりする?) 少し調べてみた限りでは無さそうに感じたのですが 処理としてはよくありそうな事なのでお聞きしてみました。

  • XML DOMについて

    JavaScriptでDOMを使用して、xmlhttp.sendで指定のPHPファイルに送信しましたが、 PHP側で値を取得できません。 (PHP Ver.5.3.0) 以下、JavaScript var UserID="abc"; var Password="abc"; var xmlDoc = new ActiveXObject("Microsoft.XMLDom"); xmlDoc.appendChild(xmlDoc.createProcessingInstruction("xml","version=\"1.0\"")); var root = xmlDoc.createElement("xDoc"); xmlDoc.documentElement=root; var node_Item = xmlDoc.createElement("Command"); root.appendChild(node_Item); var node_UserID = xmlDoc.createElement("UserID"); node_UserID.appendChild(xmlDoc.createTextNode(UserID)), node_Item.appendChild(node_UserID); var node_Password = xmlDoc.createElement("Password"); node_Password.appendChild(xmlDoc.createTextNode(MDString(Password))), node_Item.appendChild(node_Password); var node_Sufix = xmlDoc.createElement("Sufix"); node_Sufix.appendChild(xmlDoc.createTextNode(Sufix)), node_Item.appendChild(node_Sufix); var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); xmlhttp.open("post",topURL("main/Log.php"),false); xmlhttp.send(xmlDoc); 以下、Log.php <?php session_start(); $DEBUG_MODE=false; $xmlLogQ=$_SERVER['DOCUMENT_ROOT']."/test/temp/Request.xml"; $xml = new DOMDocument(); $xml->async=false; if (!$DEBUG_MODE) { if ($XML_LOG) { $xml->save($xmlLogQ); } } else { if ($XML_LOG) { $xml->load($xmlLogQ); } } $doc=$xml->documentElement; if ($xml->parseError.errorCode==0) { $xml = $node=$doc->selectSingleNode("Command/UserID"); if (!($node==null)) { $UserID=$node->text; $node=null; } $node=$doc->selectSingleNode("Command/Sufix"); if (!($node==null)) { $Sufix=$node->text; $node=null; } $node=$doc->selectSingleNode("Command/Password"); if (!($node==null)) { $Password=$node->text; $node=null; } } ?> 保存したXML上、<?xml version="1.0"?>以降書き込みできてません。 どの部分がおかしいか不明の為、申し訳ないですがご教授お願いします。

    • ベストアンサー
    • PHP