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

This done trick for me (answer from 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-23T01:54:17.557 に答える
0

むしろ組み込みメソッドを使用したいと思います。Matlab にはurlread/urlwriteがあります。これは、Cosm API から CSV データを要求するだけの場合に機能します。JSON を使用する必要がある場合は、プラグインを介して Matlabで処理できます。

key次のようにパラメーターを介して行うことができる Cosm API キーを渡します。

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 に答える