2010年8月27日金曜日

ProcessingでPOSTコマンドを使う(httpclient改)

訂正:下記のスケッチでWEBページへのアクセスは成功しましたが、まだPOSTには成功していませんでした。成功したらまた修正します。(なぜかPOSTの情報が受け取られないみたいです。)

arduinoとProcessingでフィジカルコンピューティングを始めましたが、Processingに関する情報が少なくて困っています。

レンタルサーバー上のデータをProcessingのhttpクライアントでアクセスして、シリアル通信でaduinoを操作しようと思いましたが、なぜかProcessingのサンプルにあるHttpClientのプログラムではアクセス出来ませんでした。(サンプルのプログラムでアクセスできるWebページと出来ないページがあるのはどうしてでしょうか?)

あれこれジタバタした結果、一応なんとかProcessingで目的のページにアクセスして情報を入手できるようになったので、忘備録として記載しておきます。

参考にさせてもらったのは、http://forum.processing.org/topic/http-post-processingに紹介されていた、http://www.jackkern.com/downloads/examples/processing/PostFromProcessing.zipのプログラムです。
どうも上記のように工夫するとjavaのコードがそのままProcessingで使える可能性があるみたいですね。
で、一部を変更して、下記のような形で、一応アクセスした内容をテキストとして利用できるようになりました。下記を実行するには、上記のzipファイルにあるcodeフォルダーの内容が必要となります。(POSTが必要ない場合は、POSTのパラメーターはそのまま無視しても大丈夫みたいです。)

色々と超初心者ですので、お気づきの点は教えて頂けると助かります。



import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

void setup()
{
String url = "http://xxx.yyy.zzz.jp/aaa.bbb";//URL address
String texts = "";

try
{
DefaultHttpClient httpClient = new DefaultHttpClient();

HttpPost httpPost = new HttpPost( url );
HttpParams postParams = new BasicHttpParams();
postParams.setParameter( "your_name", "John Smith" );// For Post
postParams.setParameter( "fruit", "Apricot" ); // Configure the form parameters
httpPost.setParams( postParams );

println( "executing request: " + httpPost.getRequestLine() );

HttpResponse response = httpClient.execute( httpPost );
HttpEntity entity = response.getEntity();

texts = EntityUtils.toString(entity);

println("----------------------------------------");
println( response.getStatusLine() );

println("----------------------------------------");

println( texts );
if( entity != null ) entity.consumeContent();

if (texts.equals("39") == true) println("You got it!!");
// When HttpClient instance is no longer needed,
// shut down the connection manager to ensure
// immediate deallocation of all system resources
httpClient.getConnectionManager().shutdown();

} catch( Exception e ) { e.printStackTrace(); }

exit();
}

2009年2月1日日曜日

ポメラの文章をパソコンとオンラインで閲覧・同期

キングジムのポメラを使っています。
魅力は単4電池2本で20時間以上使えるため、バッテリーのことを気にしないでどこでも使えるところと、2秒でサクッと起動するところです。
しかし、そのためにポメラで編集した文章をオンラインやパソコンで使うのは少し不便です。

そこで、ポメラで編集した文章の続きをパソコンやオンラインで編集したり、その逆をする時のために、オンラインとローカルフォルダーとポメラの文章を同期する方法を試しました。(パソコン初心者の自分でもできた方法です)

RealSyncは異なる二つのフォルダーをミラーして内容を同じものにするフリーソフトです。
Dropboxは パソコンのフォルダーとオンラインのフォルダーを同期してくれるサービスです。Dropboxにはフリーと有料のサービスがありますが、フリーでも今のと ころ問題なさそうです。(同じようなサービスでパソコンのローカルフォルダーとGooleドキュメントを同期してくれるDocSyncerというサービス があったようですが、今はサービスを停止しているようです。)

この二つを使えば、ポメラをパソコンに接続→RealSyncを立ち上げる→RealSyncでDropBoxのポメラのフォルダーと同期→オンラインのDropBoxも自動的に同期という流れで可能になります。

Windows VistaはUSBストレージ(パソコンから見たポメラのこと)に対してもオートラン(自動再生)の設定ができるので、 autorun.infというオートランの設定ファイルをポメラに作っておくと、RealSyncを立ち上げるのが楽になります。(別のソフトを利用すればXPでも同様のことが可能)

自分はパソコンに詳しくないので、autorun.infの作成にAutoRun Makerというソフトを使いました。



左の設
定で、A
utoRun MakerでポメラのMaicroSDにコピーしたRealSyncを起動させる

[autorun]
action=RealSync
open="RealSync\RealSync.exe" 

というAutorun.infをポメラのMicroSDのルートフォルダ(左の場合、G¥)に作成してくれます。

(RealSyncはポメラにコピーせず、
パソコン上にあってもOKです)







その結果、下のような流れで、ポメラのファイルとパソコンとオンライン上のDropboxとが同期されます。




(左のアイコンは変更してあります)






































簡単な説明ですが、ご紹介まで。