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
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.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する。