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:
<?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:
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:
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: