Friday 13 April 2012

Add JSON support to javascript sandbox

Add JSON support to javascript sandbox
This task use JSON-lib to add JSON support to javascript sandbox.
Add JSON support to javascript sandbox
  1. Create javascript sandbox with jsoup support
  2. Modify com.paesia.schema.script.Machine class as following
  3. Create javascript as following
Modify com.paesia.schema.script.Machine class
public class Machine {

    private Handler handler;
 
    public static void run(Machine env, String js, Map args) throws Exception {
        try {
            Context cx = Context.enter();
            cx.setClassShutter(new ClassShutter() {
                public boolean visibleToScripts(String className) {  
...........

                    if (className.startsWith("com.paesia.schema.script.safe.")) return true;
                    if ("org.jsoup.helper.HttpConnection$Response".equals(className)) return true;

                    if ("net.sf.json.JSONArray".equals(className)) return true;
                    if ("net.sf.json.JSONObject".equals(className)) return true;

                    return false;
                }
            });   

...........

        } catch (Exception e) {
            throw e;
        } finally {
            Context.exit();   
        }
    }
 
    public JSONArray newJSONArray() {
        return new JSONArray();
    }
 
    public JSONObject newJSONObject() {
        return new JSONObject();
    }

...........

}
    
javascript
function main(env, args) {
  var links = args.get('links');
  try {
    var json = env.newJsoup().connect(env.newURL('https://www.odesk.com/api/profiles/v1/search/jobs.json?page=0;50&sort=date_posted;D')).execute().body();
    var root = env.newJSONObject().fromObject(json);
    var jobs = root.getJSONObject('jobs').getJSONArray('job');
    for (var i = 0; i < jobs.size(); i++) {
      var job = jobs.getJSONObject(i);
      var desc = job.getString('op_description');
      var title = job.getString('op_title');
      var url = 'https://www.odesk.com/jobs/' + job.getString('ciphertext');
      var item = env.newHashMap();
      item.put('title', title);
      item.put('desc', desc);
      item.put('url', url);
      links.add(item);
    }
  } catch (e) {
    env.error(e);
  }
}
    

  Protected by Copyscape Online Copyright Protection

No comments:

Post a Comment