• 締切済み

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です。 よろしくおねがいします。

  • Java
  • 回答数1
  • ありがとう数1

みんなの回答

  • aton
  • ベストアンサー率47% (160/334)
回答No.1

http://ws.apache.org/xmlrpc/types.html を見ると,struct型の引数にはjava.util.Mapを使うようなので,これを使えば良いのではないでしょうか。 > parameterList.add("love");//キーワードlove のあたりを,例えば Map map = new Hashtable(); map.put("keyword", "love"); map.put("limit", (new Integer(30))); parameterList.add(map); などとすれば,キーワードloveにヒットするもの上位30件が取得できるのではないかと思います。

参考URL:
http://ws.apache.org/xmlrpc/types.html

関連する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
  • 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インストールを確認済み

  • 提供された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
  • PerlでXMLがデコード出来ません。

    いつもお世話になっております。 今回も質問させていただきます。 PerlでhttpリクエストをしてXMLで返ってくるapiを使っているのですが、 英語で返答が来る時にはバックスラッシュが入っておらず成功するのですが、 日本語で返答が来ると、バックスラッシュがxml内部に記述されて Cannot decode string with wide characters と怒られます。 my $http2 = get($trans_url); my $result2=XML::Simple->new()->XMLin($http2); use CGI::Carp qw(fatalsToBrowser); die Dumper $result2; とダンプすると 成功するとき <string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">testtest</string> 失敗するとき <string xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">\x{79c1}\x{306f}\x{65e5}\x{672c}\x{4eba}\x{3067}\x{3059}\x{3002}</string> と、明らかに「¥」が入っているときにデコードに失敗しているのですが、 このXMLの中の”の前の¥マークを取り除くことが出来ませんか? お知恵を拝借できればと思います。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • Perl
  • インスタンスの作成について

    下記の方法にてHashtableのインスタンスを作成しようと思ったのですが has1.put("key",1); の場所でNullpointerException が発生します。 has1がNullになってしまうのですが 下記のような手法でインスタンスは作れないのでしょうか。 public class InstanceCreate { Hashtable has1; Hashtable has2; Hashtable has3; public static void main(String[] args) { InstanceCreate instance = new InstanceCreate(); instance.exe(); } public void exe() { Hashtable hash[] = {has1,has2,has3}; for(int i=0; i<hash.length;i++){ hash[i] = new Hashtable(); hash[i].put("key", "value"); } has1.put("key",1); } }

    • ベストアンサー
    • Java
  • file関数によるXMLの取得について

    XMLの取得をしようとしているのですが、PHPのバージョンが4.1のためSimpleXMLが使えずfile関数を使おうとしています。 例えば取得したいXMLの値が、 <Result>  <Title>タイトル</Title>  <Summary>  文章  </Summary>  <Url>  http://  </Url> </Result> だった場合、<Title>,<Summary>,<Url>はどのように取得するのでしょうか? 以下の方法で取得をしてみようとしたのですが、これだと<Summary>と<Url>は取得できるのですが<Title>が取得できません... ↓<Title>を取得する場合 $api_url = "http://"; $api_url2 = implode("",file("$api_url")); $title_exp = explode("<Title>",$api_url2); $title_count = count($title_exp); for($i=0;$i<$title_count;$i++){ $title = explode("</Title>",$title_exp[$i]); }; <Title>が他の項目と違うところは改行がない部分だけのようなのですが、どのようにすれば取得できるのでしょうか? 色々なサイトを見ながら手探りで学んでいますのでおかしなところがあるかもしれません。 その点もご指摘いただければ幸いです。 宜しくお願いします。

    • 締切済み
    • PHP
  • LivedoorブログへAtomで投稿できない

    ★質問:LivedoorブログでAtomでブログ記事を投稿するツールを作っているがエラーになります。 ★環境:Java(jdk1.6.0_26) Eclipse3.6 OS:Windows7 Java初心者です。 ネットから拾ってきたプログラムを参考にLivedoorブログへ記事を投稿する ツールを作っています。 以下のようなソースを書きました。 ★ソース package ROME; import java.net.URL; import java.text.DateFormat; import java.text.ParseException; import java.util.Hashtable; import org.apache.xmlrpc.client.XmlRpcClient; import org.apache.xmlrpc.client.XmlRpcClientConfigImpl; import org.apache.xmlrpc.XmlRpcException; import java.net.MalformedURLException; public class AtomPost { public static void main(String[] args) throws XmlRpcException, MalformedURLException, ParseException { String aServerURL = "http://cms.blog.livedoor.com/atom/"; String aTitle = "テスト"; String aHtml = "本文テスト"; String ablogId = "●●●●●●";//LivedoorブログID(数字7桁) String aAccount = "●●●●●●";//Livedoorブログアカウント String aPassWord = "●●●●●●";//パスワード Post(aServerURL, aTitle, aHtml, ablogId, aAccount, aPassWord); } public static void Post(String aServerURL, String aTitle, String aHtml, String ablogId, String aAccount, String aPassWord) throws XmlRpcException, MalformedURLException, ParseException { boolean ret = false; XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl(); config.setServerURL(new URL(aServerURL)); XmlRpcClient client = new XmlRpcClient(); client.setConfig(config); // 新規投稿の内容 ※HashMapでもイイと思う Hashtable<String, Comparable> hash = new Hashtable(); hash.put("title", aTitle); hash.put("description", aHtml); hash.put("dateCreated", DateFormat.getDateInstance() .parse("2011/08/07")); hash.put("mt_convert_breaks", true); // 本文中の改行をbrタグで反映 hash.put("mt_allow_comments", true); // コメントを受け付けるか hash.put("mt_allow_pings", true); // トラックバックを受け付けるか hash.put("mt_text_more", "続きを読むの部分です"); Object[] params = new Object[5]; params[0] = ablogId; // blogId params[1] = aAccount; params[2] = aPassWord; params[3] = hash; params[4] = true; // publish(trueで公開, falseで下書) Object result = client.execute("metaWeblog.newPost", params); // 新規投稿した記事番号が返る System.out.println("記事番号:" + result + "です。"); } } しかし、上記ソースを実行すると、以下のようなエラーがでます。 Exception in thread "main" java.lang.IncompatibleClassChangeError: Implementing class at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:621) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124) at java.net.URLClassLoader.defineClass(URLClassLoader.java:260) at java.net.URLClassLoader.access$100(URLClassLoader.java:56) at java.net.URLClassLoader$1.run(URLClassLoader.java:195) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268) at java.lang.ClassLoader.loadClass(ClassLoader.java:252) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) at ROME.AtomPost.Post(AtomPost.java:34) at ROME.AtomPost.main(AtomPost.java:22) ★具体的な質問 一体、何が間違っているのでしょうか? 可能性としては… 1.環境が間違っている 例えば、必要なライブラリが足りない等 2.ソースが間違っている。 3.そもそもLivedoorでこの方法ではブログは投稿できない。 と思うのですが、初心者のため、どっちなのか?そしてどうすればいいのか分かりません。 すみませんが、ご教授よろしくお願いします。

  • 件数取得方法

    以下のソースはSQLを発行して、hashに検索結果を格納しているのですが、 取得した件数を知りたいのですが、どうすればよいでしょうか? 基本的なことかもしれませんが、よろしくお願いします。 public Hashtable hash; public void getData(String param) throws SQLException { StringBuffer strSQL = new StringBuffer(); strSQL.append("SELECT "); strSQL.append(" *"); strSQL.append(" FROM"); strSQL.append(" TABLE"); strSQL.append(" WHERE"); strSQL.append(" NO = "); strSQL.append(param); ArrayList list = DBAccess.SetRecordToArray(strSQL.toString(), 0); hash = (Hashtable)list.get(0); }

    • ベストアンサー
    • Java
  • Vectorクラスの使い方

    いつもお世話になっております。 Vector vector = new Vector(); String array[] = new String[11]; vector.addElement(array) for( int i = 0; i1 < vector.size(); i++) { String str = (String)vector.get(i); System.out.println(str); } 11の配列にデータ(String)を入力し(ここでは省略)、11すべてをVectorへいれ、String型で取り出したいのですがエラーになります。 System.out.println(vector1.get(i));だと文字化けします。 アドバイスお願いします。そういったことを書いてあるサイト等ご存知でしたらお願いします。

    • ベストアンサー
    • Java
  • VB.NETで出来てC#で出来ない???

    VB.NETでは出来るのにC#で同じようにするやり方がわからなくて困っています。 VSのバージョンは2008です。 やりたいことは 『param.Item("AAA") = "111"』 このように書けるクラスを作りたいのですが、 VBで出来てC#では出来ないのでしょうか? イメージとしてはプロパティにメソッドをくっつけたようなクラス? C#ではこのように書くとエラーになります。 どのようにしたらいいでしょうか? public string Item(string Key) {  set { _param[Key] = value; } } VB Dim param As New Param() param.Item("AAA") = "111" ----Paramクラス---- Imports System.Text Public Class Param Private _Hash As New Hashtable Default Public Property Item(ByVal Key As String) As String Get Return _Hash(Key) End Get Set(ByVal value As String) _Hash(Key) = value End Set End Property End Class ---------

専門家に質問してみよう