Я подумал, что попробую написать R-интерфейс для Scribe (зрелая библиотека OAuth для Java от Пабло Фернандеса), чтобы освежить себя на Java (не использовал его в течение 8 лет), изучаяrJava и чтобы лучше использовать API Twitter.Но в основном потому, что сегодня пятница, и я подумал, что будет весело.:)
К сожалению, я не очень далеко ...
Я загрузил файл .jar для писца , а также commons-condec (его единственная зависимость, которую я впоследствии разархивировал).Я запустил код на Java с использованием netbeans, и он отлично работает, используя его пример Twitter .
Я был в порядке для первых нескольких строк кода, просто следуя документации 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".Это где я запутался.Что это значит?Я думаю, глядя на источник , ему нужен тип возвращаемого типа "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
Есть идеи?