2012年9月29日土曜日

JavaFXを使ってデジタルフォトフレームもどきを作った時のまとめ2

JavaでJSON形式のデータを解析する方法

JSONが何だか知らない方は「http://json.org/」を見て下さい

JavaでJSONを扱うために今回は「JSON-java」を利用します
ダウンロードは「https://github.com/douglascrockford/JSON-java」から。
説明は「http://json.org/java/」のサイトにあるようです。

今回使用したのは「JSONArray」「JSONException」「JSONObject」の3つですが、依存関係があるので「JSONString」と「JSONTokener」もダウロードして1つのフォルダにまとめてビルドパス設定を設定する必要があります。

準備はここまでです。

実際の使い方はgetで取得したいデータのキーを指定してデータを取得します。
データが配列の場合はgetJSONArray
普通のデータの場合はgetJSONObject
で大丈夫です。 ソースにするとこんな感じ
 
//json にはJSONデータの文字列が入っている
  try{
    JSONObject json = new JSONObject(json);
    JSONArray jsonArray = json.getJSONArray("items");
    for (int j = 0; j < jsonArray.length(); j++) {
      JSONObject tmp = jsonArray.getJSONObject(j);
      System.out.println(tmp.getString("link"));
    }
  }catch(JSONException e){
     e.printStackTrace();
  }
次回で取得したurlをJavaFXで表示してアニメーションを設定すれば完成です。

2012年9月23日日曜日

JavaFXを使ってデジタルフォトフレームもどきを作った時のまとめ1

使ったもの
・JavaFX2(GUI部分)
・Google Custom Search API (写真の検索)
・JSON-java (JSONの解析)

完成したのはこちら
テキストボックスに検索ワード入力してボタンを押したらCustom Searchで画像を検索してきてその結果の画像を連続で表示していきます。

流れとしては検索した結果がJSON形式で帰ってくるのでそれを解析してURLを取り出して表示しています。

Google Custom Searchの使い方
「https://developers.google.com/custom-search/v1/using_rest」にあるようにJSON形式で結果を返してもらう方法。
 
    private static final String QUERY_URL = "https://www.googleapis.com/customsearch/v1";
    private static final String KEY = "APIキー";//APIKey
    private static final String CX = "Custom SearchのID";//カスタム検索ID
    private static final String PAGE = "ページの数字";//1~101で指定して検索のスタート位置を指定
    private static final String PARA = "&alt=json&searchType=image&q=";//検索オプションの指定(jsonで結果を返す、画像検索を行う、等)
       

    //テキストフィールドに入力した値で検索
    //inputは検索文字列
    String query = QUERY_URL + KEY + CX + PAGE + i + PARA + inputText;
    //検索クエリを実行
    URL url = new URL(query);
    URLConnection connection = url.openConnection();
    BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
カスタムサーチは予め「http://www.google.com/cse/manage/all」で作成し、作成したカスタムサーチを使う。
APIキーは「https://code.google.com/apis/console/」で作成した自分のAPIキーを指定
次回はJSON解析部分について書きます

2012年9月20日木曜日

JavaFXでのアニメーション作成

Bloggerにソースコードを載せる時に利用するシンタックスハイライトを設定しようと思って 「http://goo.gl/IJEs9」を使っていたらなんと言語の欄にJavaFXを見つけたのでさっそくJavaFXのハイライトを試してみようってだけなのでテストも兼ねてます。
JavaFXでアニメーションを自分で設定する時はTimelineクラスを使うと経過秒毎に処理が書けるので簡単にアニメーションが作れます。
とりあえずソースの載せときます。
  
private Timeline timeline;
timeline = new Timeline(
  new KeyFrame(
    new Duration(100),//ミリ秒で指定
      new EventHandler() {
        @Override
        public void handle(ActionEvent event) {/*処理1*/}        
      }
  ),
  new KeyFrame(
    new Duration(200),//ミリ秒で指定
      new EventHandler() {
        @Override
        public void handle(ActionEvent event) {/*処理2*/}        
      }
  )
);
//タイムラインの無限に繰り返す
timeline.setCycleCount(Timeline.INDEFINITE);
timeline.play();//タイムライン開始
timeline.stop();//タイムラインを明示的に終了

使い方は
  
    new Duration(100)

のところでアニメーション開始からの経過秒をミリ秒で指定し、指定秒毎にアニメーションを記述していくだけ。
タイムラインを無限に繰り返す設定にしてると指定したアニメーションが終わったらまた先頭のアニメーションから 実行していってくれます。
このソースの形だとタイムライン開始から100ミリ秒で処理1が200ミリ秒で処理2をやってまた最初に戻ってタイムラインの開始から300ミリ秒の時はまた処理1を実行します。

本当はソースは17行目で終わってるんですがなんか変なタグと無駄な改行がまざっちゃってますね、どうやっても消えないのでとりあえずこのままで。

2012年9月16日日曜日

安全なWebサイトの作り方のまとめ

IPAの「安全なWebサイトの作り方」を読んだのでまとめ
http://www.ipa.go.jp/security/vuln/websecurity.html

SQLインジェクションはプリアドステートメントを使って対策
エラーメッセージをブラウザに表示しない

OSコマンドインジェクション
なるべく使わないで使う場合は引数を全てチェックする

ファイルへのアクセス
ファイル名を指定する時はファイル名だけを取るようにしないと「../../a.txt」のような文字列で想定外のディレクトリのファイルを指定されるのでパスの中からファイル名だけを取得するようにする
ファイル名のチェックを行う

セッションの管理
セッションIDは乱数等から生成して、第三者が予測不可能にする
セッションIDをURLパラメータに格納しない
HTTPSで使うCookieにはsecure属性を指定してHTTPS以外で使えなくする
セッションはログイン後に開始する

クロスサイト・スクリプティング対策
 入力された時じゃなくて出力の時にエスケープ処理をする用にして、出力するものにはすべてエスケープ処理を行う、文字コードの指定は必ず行う
スクリプトタグを動的に作らない
CSSを任意のサイトから取り込まないようにする

CSRF対策
  登録情報等のユーザ情報を変更する時は変更する時にパスワード等の秘密情報を確認する
  変更の直前にパスワードを入力させるか、直前のページで秘密情報を埋め込んで確認ページで確認する

ヘッダの取り扱い
HTTPヘッダ、メールヘッダ共に基本的にはユーザからの入力を使用する時は改行文字を取り除いてから使用する

その他
アクセス制御はしっかりとする
機密情報扱うならパスワードの入力を求める