1

我正在使用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 执行此操作。我已经尝试重写示例(来自链接的示例正在我的机器上运行):我已经使用 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);

所以我几乎什么都试过了,一无所获!任何使这项工作的方法对我来说都很好。提前感谢您的帮助!

4

2 回答 2

1

这对我来说已经完成了(从这里回答)

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-23T01:54:17.557 回答
0

我宁愿使用内置方法。Matlab 有urlread/ urlwrite,如果你想做的只是从 Cosm API 请求一些 CSV 数据,它可以工作。如果确实需要使用 JSON,可以通过插件在 Matlab中处理。

传递 Cosm API 密钥,可以通过key如下参数完成:

cosm_feed_url = "https://api.cosm.com/v2/feeds/61916.csv?key=<API_KEY>"
cosm_feed_csv = urlread(cosm_feed_url)

但是,标准库方法urlread/urlwrite相当有限。事实上,这个urlwrite函数只是为文件输入而设计的,我什至看不到任何官方的例子来说明如何使用格式化的字符串。创建一个临时文件是合理的,除非它只有几行 CSV。您可能需要urlread2用于更严重的事情。

更新:看来这urlread2 可能是有问题的。

于 2013-01-21T15:02:03.603 回答