This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm that you accept these cookies being set.

Rewrite Curl to LUA?
#1
Hello,

Can anyone tell me if this sample script can be "transplanted" to LM?

Code:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
<?php $username = 'xxx@xxx.xxx'; $password = 'xxx; $serial = 'xxx'; $nonce; $jsessionid; $token; $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "https://my.zipato.com/zipato-web/v2/user/init";, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_HTTPHEADER => array( ), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { echo "cURL Error #:" . $err; } else { $json = json_decode($response, true); $nonce = $json['nonce']; $jsessionid = $json['jsessionid']; $password = sha1($password); $token = $nonce . $password; $token = sha1($token); } $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "https://my.zipato.com/zipato-web/v2/user/login?token=$token&username=$username";, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_HTTPHEADER => array( "accept: application/json", "cookie: JSESSIONID = $jsessionid;"     ), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { echo "cURL Error #:" . $err; } $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "https://my.zipato.com/zipato-web/v2/box/reboot/$serial";, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_HTTPHEADER => array( "accept: application/json", "cookie: JSESSIONID = $jsessionid;" ), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { echo "cURL Error #:" . $err; } else { echo 'success'; } ?>

If yes, can you give some guidance if not the full code?
I'm using ZipaTile as room thermostat (and lights, Sonos, etc. UI ), but sometimes it fails to send temperature data. The idea is to check periodically the group update time from resident script, and if it is to long issue a reboot command.

Thanks, Z
Reply
#2
Try this:
Code:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
username = 'xxx@xxx.xxx' password = 'xxx' serial = 'xxx' https = require('ssl.https') ltn12 = require('ltn12') sha1 = require('encdec').sha1 json = require('json') function dorequest(url, headers)   local tbl = {}   local res, err = https.request({     url = url,     headers = headers,     sink = ltn12.sink.table(tbl)   })   if res then     return table.concat(tbl)   else     return nil, err   end end res, err = dorequest('https://my.zipato.com/zipato-web/v2/user/init') log('init', res, err) if res then   data = json.decode(res)   password = sha1(password)   token = sha1(data.nonce .. password)   headers = {     ['accept'] = 'application/json',     ['cookie'] = 'JSESSIONID=' .. data.jsessionid .. ';',   }   url = 'https://my.zipato.com/zipato-web/v2/user/login?token=' .. token .. '&username=' .. username   res, err = dorequest(url, headers)   log('login', res, err)   if res then     url = 'https://my.zipato.com/zipato-web/v2/box/reboot/' .. serial     res, err = dorequest(url, headers)     log('reboot', res, err)   end end
Reply
#3
Thanks Admin,

It works as advertised Smile
Reply
#4
Hi,

I´ve tried to traslate this code to LM with your example but something is wrong.

Can anyone help me?

Code:

<?php
// set variables
$queryUrl = "http://api.kairos.com/detect";
$imageObject = '{"image":"YOUR_IMAGE_URL"}';
$APP_ID = "YOUR_APP_ID";
$APP_KEY = "YOUR_APP_KEY";
$request = curl_init($queryUrl);
// set curl options
curl_setopt($request, CURLOPT_POST, true);
curl_setopt($request,CURLOPT_POSTFIELDS, $imageObject);
curl_setopt($request, CURLOPT_HTTPHEADER, array(
"Content-type: application/json",
"app_id:" . $APP_ID,
"app_key:" . $APP_KEY
)
);
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($request);
// show the API response
echo $response;
// close the session
curl_close($request);

Thanks
Reply
#5
Code:
1234567891011121314151617181920212223242526272829303132333435363738394041
http = require('socket.http') ltn12 = require('ltn12') json = require('json') function dorequest(url, headers, data)   local resp = {}   headers['Content-Length'] = #data   local res, err = http.request({     url = url,     method = 'POST',     headers = headers,     sink = ltn12.sink.table(resp),     source = ltn12.source.string(data)   })   if res then     return table.concat(resp)   else     return nil, err   end end url = 'http://api.kairos.com/detect' imageurl = 'http://...' app_id = 'YOUR_APP_ID' app_key = 'YOUR_APP_KEY' headers = {   ['Content-Type'] = 'application/json',   ['app_id'] = app_id,   ['app_key'] = app_key, } data = json.encode({   ['image'] = imageurl }) res, err = dorequest(url, headers, data) log(res, err)
Reply
#6
Thanks!!

It works fine!
Reply


Forum Jump: