YQL JavaScript メモ その1 yオブジェクト

大本の文書はここ

y.cache

y.cacheはcache操作のプロパティ及びメソッドを持つ。
※Sampleを見てもいまいちよく分からない、実際に動かしてみてもエラー吐くので後日追記。

CacheOpResultオブジェクト

下記メソッド群の返り値となる。opとresultという2つのプロパティを持つ。opは実行されたメソッド名、resultは実行結果を返す。

y.cache.decr(key, step, init, timeOut)
y.cache.get(key)
y.cache.get(key,timeOut)
y.cache.incr(key, step, init, timeOut)
y.cache.put(key, value, timeOut)
y.cache.remove(key)

y.context

現在の所tableプロパティのみでありこれはtable名を返す。

y.crypto

MD5SHA1等のハッシュ関数を持つ。

var md5string = y.crypto.encodeMd5("encode this string to md5");   

y.crypto.encodeHmacSHA256(String secret, String plaintext)
y.crypto.encodeHmacSHA1(String secret, String plaintext)
y.crypto.encodeMd5(String plaintext)
y.crypto.encodeSha(String plaintext)
y.crypto.encodeBase64(String plaintext)
y.crypto.decodeBase64(String plaintext)
y.crypto.uuid()

y.date

現在getOffsetFromEpochInMillisメソッドのみらしい。

y.date.getOffsetFromEpochInMillis(time_format)

RFC3339で定義された日付文字列を与えるとUNIX timeを返す。下記のように普通にnew Date()じゃ出来ない事が簡単に出来るようになる。nowやyesterdayなんかDateオブジェクトは認識してくれない。

var start_time = parseInt(y.date.getOffsetFromEpochInMillis("now"));
var start_date = new Date(start_time);
var yesterday_time =  parseInt(y.date.getOffsetFromEpochInMillis("yesterday"));
var yesterday_date =  new Date(yesterday_time);
var month_from_now =  new Date(parseInt(y.date.getOffsetFromEpochInMillis("now + 1 month")));
var ali_liston_fight = new Date(parseInt(y.date.getOffsetFromEpochInMillis("1964-02-25")));

y.decompress(base64_compressed_string)

字面だけ見るとy.crypto.decodeBase64との違いが分からない。原文には「Allows you to decompress query parameters and the HTTP POST request body. The decompress method decodes a base64 string and then uses gunzip to decompress the string.」とある。どうもbase64でデコードした後更にgzipで解凍するらしい。HTTP POSTのrequest bodyをdecompressする事が出来ると書いてあるのでpostのエンコード処理ってのはこうなってるんだろうきっと。

y.deflate(string, level)

Deflateアルゴリズムで文字列を圧縮後base64エンコードする。

var data = "{ customer: { name: 'John Lucas' }}"; 
var compressed_data = y.deflate(data, 1); 
var ret = y.rest("http://example-webservice.com").post(compressed_data).response; 
response.object = ret;

y.diagnostics

YQL Consoleでのクエリー実行結果のdiagnosticsタグを返す。

y.env(environment file)

environment fileをIncludeする。environment fileの説明はここの辺を参照。

y.exit(status_code, msg)

scriptの実行を中止する。任意のstatus_codeとmessageを指定する事も出来る。

y.include(url)

JavaScript fileをIncludeする。

y.getTenantContextsAvailable()

※なんだかよく分からないので後で書く。

y.inflate(base64_deflated_string)

y.deflateとは逆のメソッド。

y.jsonToXml(object)

jsonxmlに変換する。戻り値はE4Xオブジェクト。

y.log(message)

diagnosticsタグ内にlogを残す。

y.query(statement, params, timeout, callback)

YQLクエリーを実行する。statementがYQL文でparamsがkey。timeoutはミリ秒で指定。callbackを指定する事も出来る。statement以外は省略可。

var q = y.query("select * from answers.search where query=@query and category_id=@cat_id and type=@type", {query:"cars",cat_id:"2115500137",type:"resolved"});
var results = q.results;  

戻り値はオブジェクトで「results」「diagnostics」「query」「timeout」の計4つのプロパティを持つ。resultsはクエリーの実行結果、diagnosticsはy.diagnosticsと同様、queryはy.queryに引数として与えられたstatementを返す。

y.rest(url, callback)

指定されたURLに対してGETメソッドを実行する。戻り値はrestオブジェクト。callbackは省略可。

var myRequest = y.rest('http://example.com');
var data = myRequest.get().response;

y.sync(flag)

y.restとy.queryを複数同時に実行した時の非同期処理に関するメソッド。引数flagがtrueの場合、全てのrequest処理終了時trueを返す。要するに同期処理。flagがfalseの場合、いずれかのrequest処理が1つ終了した時点でtrueを返す。要するに非同期処理。
という事らしいんだけど、非同期処理時に2番目以降のrequest処理完了をどうやって取得するんだろうかこれ。

y.tidy(html)

HTML TIDYでHTMLを整形したHTMLを返す。

y.use(url, namespace)

URLで指定されたopen data tableをimportする。

y.xparseJson(json_str)

json文字列をjsonオブジェクトにparseする。与えられた文字列がjsonの仕様に適合しない場合例外を投げる。

y.xpath(object, xpath)

E4XオブジェクトにXPathを適用する。戻り値もやはりE4Xオブジェクト。

y.xmlToJson(object)

E4Xオブジェクトをjsonオブジェクトに変換する。