我使用JPachube.jar和Matlab来发送数据到我的数据流。下面的java代码可以在我的机器上运行:
package smartclassroom;
import Pachube.Data;
import Pachube.Feed;
//import Pachube.FeedFactory;
import Pachube.Pachube;
import Pachube.PachubeException;
public class SendFeed {
public static void main(String arsg[]) throws InterruptedException{
SendFeed s = new SendFeed(0.0);
s.setZainteresovanost(0.3);
double output = s.getZainteresovanost();
System.out.println("zainteresovanost " + output);
try {
Pachube p = new Pachube("MYAPIKEY");
Feed f = p.getFeed(MYFEED);
f.updateDatastream(0, output);
} catch (PachubeException e) {
System.out.println(e.errorMessage);
}
}
private double zainteresovanost;
public SendFeed(double vrednost) {
zainteresovanost = vrednost;
}
public void setZainteresovanost(double vrednost) {
zainteresovanost = vrednost;
}
public double getZainteresovanost() {
return zainteresovanost;
}
}但我需要在Matlab中执行此操作。我已经尝试过重写example (链接中的例子在我的机器上运行):我已经用javac编译了java类,并将JPachube.jar和SendFeed.class添加到路径中,然后在Matlab中使用以下代码:
javaaddpath('C:\work')
javaMethod('main','SendFeed','');
pachubeValue = SendFeed(0.42);我得到一个错误:
??? Error using ==> javaMethod
No class SendFeed can be located on Java class path
Error in ==> post_to_pachube2 at 6
javaMethod('main','SendFeed','');这很奇怪,因为正如我所说的,链接中的示例是有效的。
后来,我决定将JPachube直接包含在Matlab代码中,并在Matlab中编写等效代码:
javaaddpath('c:\work\JPachube.jar')
import Pachube.Data.*
import Pachube.Feed.*
import Pachube.Pachube.*
import Pachube.PachubeException.*
pachube = Pachube.Pachube('MYAPIKEY');
feed = pachube.getFeed(MYFEED);
feed.updateDatastream(0, 0.54);我得到了这个错误:
??? No method 'updateDatastream' with matching signature found for class 'Pachube.Feed'.
Error in ==> post_to_pachube2 at 12
feed.updateDatastream(0, 0.54);所以我几乎什么都试过了,什么都没试过!任何让这个工作的方法对我来说都是很好的。提前感谢您的帮助!
发布于 2013-01-23 09:54:18
这为我做了一个小把戏(here的回答)
javaaddpath('c:\work\httpcore-4.2.2.jar');
javaaddpath('c:\work\httpclient-4.2.3.jar');
import org.apache.http.impl.client.DefaultHttpClient
import org.apache.http.client.methods.HttpPost
import org.apache.http.entity.StringEntity
httpclient = DefaultHttpClient();
httppost = HttpPost('http://api.cosm.com/v2/feeds/FEEDID/datastreams/0.csv?_method=put');
httppost.addHeader('Content-Type','text/plain');
httppost.addHeader('X-ApiKey','APIKEY');
params = StringEntity('0.7');
httppost.setEntity(params);
response = httpclient.execute(httppost);发布于 2013-01-21 23:02:04
我更喜欢使用内置的方法。Matlab有urlread/urlwrite,如果你想做的就是从Cosm API请求一些CSV数据,它可以工作。如果您确实需要使用JSON,可以在Matlab via a plugin中处理。
激活Cosm密钥,这可以通过key参数来完成,如下所示:
cosm_feed_url = "https://api.cosm.com/v2/feeds/61916.csv?key=<API_KEY>"
cosm_feed_csv = urlread(cosm_feed_url)但是,标准库方法urlread/urlwrite是rather limited。事实上,urlwrite函数只为文件输入而设计,我甚至看不到任何官方示例说明如何使用格式化字符串。创建一个临时文件是合理的,除非它只有几行CSV。对于更严重的情况,您可能需要使用urlread2。
更新:看起来urlread2 。
https://stackoverflow.com/questions/14250114
复制相似问题