3

私は、Java でリフレッシュし (8 年間使用していませんでした)、rJava を学び、Twitter をより有効に活用する方法として、Scribe (Pablo Fernandez による Java 用の成熟した OAuth ライブラリ)への R インターフェイスを作成しようと考えました。 API。でも主に金曜の午後だし、楽しいだろうと思ったからです。:)

残念ながらあまり進んでいません…

scribeとcommons-condec用の .jar ファイルをダウンロードしました(唯一の依存関係で、後で解凍しました)。私は netbeans を使用して Java でコードを実行しましたが、彼のtwitter exampleを使用すると正常に動作します。

rJavaのドキュメントに従うだけで、コードの最初の数行は問題ありませんでした。

# load R packages
library(rJava)

# Initialise
.jinit()

# Add class paths
d1 <- "C:/Users/Tony/Documents/R/java/scribe-1.1.0.jar"
d2 <- "C:/Users/Tony/Documents/R/java/commons-codec-1.4/"
.jaddClassPath(path=c(d1, d2))

ただし、スクライブのクイック スタート ガイドには、次のものが必要であると書かれています。

// Java Code
OAuthService service = new ServiceBuilder()
                                .provider(TwitterApi.class)
                                .apiKey("6icbcAXyZx67r8uTAUM5Qw")
                                .apiSecret("SCCAdUUc6LXxiazxH3N0QfpNUvlUy84mZ2XZKiv39s")
                                .build();

それをrJava用語に書き換える方法がわかりません。少しウェブを検索したところ、部分的に行う必要があることが示唆されたので、最初に次のことを行いました。

# Create object (back to R code again)
( service <- .jnew("org.scribe.builder.ServiceBuilder") )
[1] "Java-Object{org.scribe.builder.ServiceBuilder@58fe64b9}"

# Set up apiKey and apiSecret using "$" shortcut
service$apiKey("6icbcAXyZx67r8uTAUM5Qw")
service$apiSecret("SCCAdUUc6LXxiazxH3N0QfpNUvlUy84mZ2XZKiv39s")

これまでのところ良い。次に、プロバイダー関数から期待される戻り値の型を把握する必要があります。

# Inspect return type
.jmethods(service, "provider")
[1] "public org.scribe.builder.ServiceBuilder org.scribe.builder.ServiceBuilder.provider(java.lang.Class)"

「java.lang.Class」が必要です。これは私が混乱するところです。どういう意味ですか?sourceを見ると、「ServiceBuilder」型の戻り値の型が必要だと思いますが、それを行う方法は? これは ?.jcall を見た後の私の最善の推測でした (注: 'use.true.class = TRUE' は何もしませんでした):

> .jcall(obj = service, returnSig = "Lorg.scribe.builder.ServiceBuilder;", method = "org.scribe.builder.ServiceBuilder.provider", "org.scribe.builder.api.TwitterApi")

Error in .jcall(obj = service, returnSig = "Lorg.scribe.builder.ServiceBuilder;",  : 
  method org.scribe.builder.ServiceBuilder.provider with signature (Ljava/lang/String;)Lorg.scribe.builder.ServiceBuilder; not found

何か案は?

4

1 に答える 1

1

プロバイダーメソッドがServiceBuilderを返し、パラメーターとしてクラスを受け取るように見えます。

Javaでは、クラス名の後に.classを入力すると、コード内でクラスリテラルオブジェクトが作成されます。代わりにリフレクションを使用してクラスをロードする場合は、文字列名でクラスを参照できます。これがRでどのように機能するかはわかりませんが、Javaでは構文は次のとおりです。

Class c = Class.forName("org.scribe.builder.api.TwitterApi");

これにより、クラスインスタンスが変数cに配置されます。次に、プロバイダーメソッドを呼び出すことができます。

service$provider(c);
于 2011-03-07T19:59:16.103 に答える