openCPU.org という素晴らしいオープン ソース プロジェクトに出くわし、このプロジェクトに非常に興奮しています。自分の研究をホストする Web サイトを作成しようとしている研究者として、R をクラウド上で実行して、スクリプトをリアルタイムで実行し、Web ページに表示できることを何よりも望んでいます。このプロジェクトを実現してくれた Jeroen に心から感謝します。
それでは、私の質問に移ります。
どうやってopenCPUと対話するのですか?
サンプル関数を「いくつかのコードを実行する」に入れることができます:
http://public.opencpu.org/userapps/opencpu/opencpu.demo/runcode/
そして、私のコードの PNG 画像を取得します。これは素晴らしいことです!
しかし、自分の Web ページや URL でそれを行うにはどうすればよいでしょうか?
このページから、「x3ce3bf3e33」のような元のコード アップロードのオブジェクトを取得できます。
次のような関数の場合:
myfun <-function(){
x = seq(1,6.28)
y = cos(x)
p = plot(x,y)
print(p)
# also tried return(p)
}
次の方法で呼び出すことができませんか?
http://public.opencpu.org/R/tmp/x3ce3bf3e33/png
入力変数についてはどうですか?例えば:
myfun <-function(foo){
x = seq(1,foo)
y = cos(x)
p = plot(x,y)
print(p)
}
私に欠けているものがあるのではないかと感じています。URL で「GET」または「POST」を指定するにはどうすればよいですか?
編集
以下の @Jeroen への返信として、API で POST と GET を使用する必要があります。ここで、私の質問は、PHP を正しく対話させるという次の問題にまで及びます。
コードがあるとします:
<?php
$foo = 'bar';
$options = array(
'method' => 'POST',
'foo' => $foo,
);
$url = "http://public.opencpu.org/R/tmp/x0188b9b9ce/save";
$result = drupal_http_request($url,$options); // drupal function
?>
$result で返されたものにアクセスするにはどうすればよいですか? 私はグラフを取得しようとしています。次のようになります。
{
"object" : null,
"graphs" : [
"x2acba9501a"
],
"files" : {}
}
次のステップは、次の行に沿って画像を取得することです。
$newurl = "http://public.opencpu.org/R/tmp/".$result["graph"]."/png";
$image = drupal_http_request($newurl);
echo $image;
しかし、$result の個々の要素にアクセスする方法がわかりません。
編集#2
以下の回答と他の複数のヘルプセッションのおかげで、モニターに頭をぶつけて、これを機能させることができました。
さあ、cURL で完了です
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://public.opencpu.org/R/tmp/x0188b9b9ce/save');
curl_setopt($ch, CURLOPT_POST, 1); // Method is "POST"
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Returns the curl_exec string, rather than just Logical value
$result = curl_exec($ch);
curl_close($ch);
$new = json_decode($result,true); // $result is in 'json' format, decode it
$get = $new['graphs'][0]; // the 'hashkey for the image, "x2acba9501a" above
$img = 'http://public.opencpu.org/R/tmp/'.$get.'/png'; // link to the png image
echo <<<END // use this to display an image from the url
<a href="$img">
<img src="$img">
</a>
END
?>