Вход Ubuntu One Oauth с PHP

Существует еще одна программа с именем assoundconverter, и вы можете установить ее с помощью своего терминала sudo apt-get install soundconverter.

из параметров EDIT -> Preferences, которые вы можете настроить, как хотите.

Это конвертирует любой формат в mp3 и другие. надеюсь, что это поможет.

8
задан 23 July 2011 в 03:55

18 ответов

Я считаю, что проблема заключалась в том, что шаг 2 рабочего процесса «создать новый токен», определенный на https://one.ubuntu.com/developer/account_admin/issue_tokens/cloud/, терпел неудачу с 503 для вас, потому что в этот уик-энд сервис упал на пару пунктов. Вам нужно будет уловить эту ситуацию и разобраться с ней (503 означает, что вы должны повторить запрос позже, в соответствии со стандартным HTTP).

Я протестировал ниже PHP (будьте осторожны: я не хакер PHP, поэтому он может быть не самым идиоматическим кодом), и он отлично работает для меня. Он выполняет три этапа:

Создает новый токен в Ubuntu SSO (login.ubuntu.com) (документы API) Скажите Ubuntu One об этом новом токене (документы API) Используйте этот новый токен, чтобы подписать запрос к API файлов Ubuntu One (API docs)

Вы увидите отдельные части, приведенные ниже. Помните, что это запросы и получает новый токен; если у вас есть токен (после шага 2), сохраните его где-нибудь; не запрашивать новый каждый раз.

<?php
function curlPetition($arr){
    $curl = curl_init($arr['URL']);
    if($arr['USERPWD']){curl_setopt($curl, CURLOPT_USERPWD, $arr['USERPWD']);}  
    curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,FALSE);
    curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,2);
    curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
    $out = curl_exec($curl);
    curl_close($curl);
    $data['responseBody'] = $out;
    return $data;
}

/* Define username and password details */
$email_address = 'stuart.langridge@canonical.com';
$password = 'MY PASSWORD';

/* Step 1: Get a new OAuth token from Ubuntu Single-Sign-On */
$url = 'https://login.ubuntu.com/api/1.0/authentications?ws.op=authenticate&token_name=Ubuntu%20One%20@%20try1';
$data = curlPetition(array('URL'=>$url,'USERPWD'=> $email_address.':'.$password));
$tokenA = json_decode($data['responseBody'],1);

/* Set up that new token for use in OAuth requests */
$conskey = $tokenA['consumer_key'];
$conssec = $tokenA['consumer_secret'];
$token = $tokenA['token'];
$secret = $tokenA['token_secret'];
$oauth = new OAuth($conskey,$conssec,OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_URI);
$oauth->enableDebug();
$oauth->enableSSLChecks();
$oauth->setToken($token,$secret);

/* Step 2: tell Ubuntu One about the new token (signed with the token itself) */
$tell_u1_about_token_url = 'https://one.ubuntu.com/oauth/sso-finished-so-get-tokens/' . $email_address;
$oauth->fetch($tell_u1_about_token_url);
print_r($oauth->getLastResponse());

/* Step 3: use the token to make a request to the Files API */
$api_url = 'https://one.ubuntu.com/api/file_storage/v1/';
$oauth->fetch($api_url.'~/Ubuntu%20One/');
print_r($oauth->getLastResponse());
?>
11
ответ дан 25 May 2018 в 19:42
  • 1
    Кстати, если вы решите написать библиотеку обертки PHP для API Ubuntu One Files, расскажите мне об этом, и я свяжусь с ним из документации. Я также хотел бы видеть ваш сайт, когда это будет сделано! – sil 25 July 2011 в 20:00
  • 2
    Я тоже заинтересован в этом. Когда вы говорите «когда у вас есть токен (после шага 2), сохраните его где-нибудь» токен связан с приложением, которое использует api или для пользователя? Я думаю пользователю, но он всегда один и тот же, или он удаляет itsef после выхода из системы или когда сеанс заканчивается? – Matteo Pagliazzi 28 July 2011 в 01:28
  • 3
    Токен относится к обоим. Токен специфичен для пользователя, но это также отдельный токен, который был выдан вашему приложению для использования с этим пользователем. Он остается действительным навсегда, но пользователь может пойти и удалить этот токен (и, следовательно, аннулировать доступ вашего приложения к Ubuntu One как таковой). Токен не для приложения - это не ключ API. Ваше приложение не должно жестко кодировать токен в свой источник! – sil 29 July 2011 в 00:50

Я считаю, что проблема заключалась в том, что шаг 2 рабочего процесса «создать новый токен», определенный на https://one.ubuntu.com/developer/account_admin/issue_tokens/cloud/, терпел неудачу с 503 для вас, потому что в этот уик-энд сервис упал на пару пунктов. Вам нужно будет уловить эту ситуацию и разобраться с ней (503 означает, что вы должны повторить запрос позже, в соответствии со стандартным HTTP).

Я протестировал ниже PHP (будьте осторожны: я не хакер PHP, поэтому он может быть не самым идиоматическим кодом), и он отлично работает для меня. Он выполняет три этапа:

Создает новый токен в Ubuntu SSO (login.ubuntu.com) (документы API) Скажите Ubuntu One об этом новом токене (документы API) Используйте этот новый токен, чтобы подписать запрос к API файлов Ubuntu One (API docs)

Вы увидите отдельные части, приведенные ниже. Помните, что это запросы и получает новый токен; если у вас есть токен (после шага 2), сохраните его где-нибудь; не запрашивать новый каждый раз.

<?php function curlPetition($arr){ $curl = curl_init($arr['URL']); if($arr['USERPWD']){curl_setopt($curl, CURLOPT_USERPWD, $arr['USERPWD']);} curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,FALSE); curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,2); curl_setopt($curl,CURLOPT_RETURNTRANSFER,true); $out = curl_exec($curl); curl_close($curl); $data['responseBody'] = $out; return $data; } /* Define username and password details */ $email_address = 'stuart.langridge@canonical.com'; $password = 'MY PASSWORD'; /* Step 1: Get a new OAuth token from Ubuntu Single-Sign-On */ $url = 'https://login.ubuntu.com/api/1.0/authentications?ws.op=authenticate&token_name=Ubuntu%20One%20@%20try1'; $data = curlPetition(array('URL'=>$url,'USERPWD'=> $email_address.':'.$password)); $tokenA = json_decode($data['responseBody'],1); /* Set up that new token for use in OAuth requests */ $conskey = $tokenA['consumer_key']; $conssec = $tokenA['consumer_secret']; $token = $tokenA['token']; $secret = $tokenA['token_secret']; $oauth = new OAuth($conskey,$conssec,OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_URI); $oauth->enableDebug(); $oauth->enableSSLChecks(); $oauth->setToken($token,$secret); /* Step 2: tell Ubuntu One about the new token (signed with the token itself) */ $tell_u1_about_token_url = 'https://one.ubuntu.com/oauth/sso-finished-so-get-tokens/' . $email_address; $oauth->fetch($tell_u1_about_token_url); print_r($oauth->getLastResponse()); /* Step 3: use the token to make a request to the Files API */ $api_url = 'https://one.ubuntu.com/api/file_storage/v1/'; $oauth->fetch($api_url.'~/Ubuntu%20One/'); print_r($oauth->getLastResponse()); ?>
11
ответ дан 25 July 2018 в 21:33

Я считаю, что проблема заключалась в том, что шаг 2 рабочего процесса «создать новый токен», определенный на https://one.ubuntu.com/developer/account_admin/issue_tokens/cloud/, терпел неудачу с 503 для вас, потому что в этот уик-энд сервис упал на пару пунктов. Вам нужно будет уловить эту ситуацию и разобраться с ней (503 означает, что вы должны повторить запрос позже, в соответствии со стандартным HTTP).

Я протестировал ниже PHP (будьте осторожны: я не хакер PHP, поэтому он может быть не самым идиоматическим кодом), и он отлично работает для меня. Он выполняет три этапа:

Создает новый токен в Ubuntu SSO (login.ubuntu.com) (документы API) Скажите Ubuntu One об этом новом токене (документы API) Используйте этот новый токен, чтобы подписать запрос к API файлов Ubuntu One (API docs)

Вы увидите отдельные части, приведенные ниже. Помните, что это запросы и получает новый токен; если у вас есть токен (после шага 2), сохраните его где-нибудь; не запрашивать новый каждый раз.

<?php function curlPetition($arr){ $curl = curl_init($arr['URL']); if($arr['USERPWD']){curl_setopt($curl, CURLOPT_USERPWD, $arr['USERPWD']);} curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,FALSE); curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,2); curl_setopt($curl,CURLOPT_RETURNTRANSFER,true); $out = curl_exec($curl); curl_close($curl); $data['responseBody'] = $out; return $data; } /* Define username and password details */ $email_address = 'stuart.langridge@canonical.com'; $password = 'MY PASSWORD'; /* Step 1: Get a new OAuth token from Ubuntu Single-Sign-On */ $url = 'https://login.ubuntu.com/api/1.0/authentications?ws.op=authenticate&token_name=Ubuntu%20One%20@%20try1'; $data = curlPetition(array('URL'=>$url,'USERPWD'=> $email_address.':'.$password)); $tokenA = json_decode($data['responseBody'],1); /* Set up that new token for use in OAuth requests */ $conskey = $tokenA['consumer_key']; $conssec = $tokenA['consumer_secret']; $token = $tokenA['token']; $secret = $tokenA['token_secret']; $oauth = new OAuth($conskey,$conssec,OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_URI); $oauth->enableDebug(); $oauth->enableSSLChecks(); $oauth->setToken($token,$secret); /* Step 2: tell Ubuntu One about the new token (signed with the token itself) */ $tell_u1_about_token_url = 'https://one.ubuntu.com/oauth/sso-finished-so-get-tokens/' . $email_address; $oauth->fetch($tell_u1_about_token_url); print_r($oauth->getLastResponse()); /* Step 3: use the token to make a request to the Files API */ $api_url = 'https://one.ubuntu.com/api/file_storage/v1/'; $oauth->fetch($api_url.'~/Ubuntu%20One/'); print_r($oauth->getLastResponse()); ?>
11
ответ дан 31 July 2018 в 11:05

Я считаю, что проблема заключалась в том, что шаг 2 рабочего процесса «создать новый токен», определенный на https://one.ubuntu.com/developer/account_admin/issue_tokens/cloud/, терпел неудачу с 503 для вас, потому что в этот уик-энд сервис упал на пару пунктов. Вам нужно будет уловить эту ситуацию и разобраться с ней (503 означает, что вы должны повторить запрос позже, в соответствии со стандартным HTTP).

Я протестировал ниже PHP (будьте осторожны: я не хакер PHP, поэтому он может быть не самым идиоматическим кодом), и он отлично работает для меня. Он выполняет три этапа:

Создает новый токен в Ubuntu SSO (login.ubuntu.com) (документы API) Скажите Ubuntu One об этом новом токене (документы API) Используйте этот новый токен, чтобы подписать запрос к API файлов Ubuntu One (API docs)

Вы увидите отдельные части, приведенные ниже. Помните, что это запросы и получает новый токен; если у вас есть токен (после шага 2), сохраните его где-нибудь; не запрашивать новый каждый раз.

<?php function curlPetition($arr){ $curl = curl_init($arr['URL']); if($arr['USERPWD']){curl_setopt($curl, CURLOPT_USERPWD, $arr['USERPWD']);} curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,FALSE); curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,2); curl_setopt($curl,CURLOPT_RETURNTRANSFER,true); $out = curl_exec($curl); curl_close($curl); $data['responseBody'] = $out; return $data; } /* Define username and password details */ $email_address = 'stuart.langridge@canonical.com'; $password = 'MY PASSWORD'; /* Step 1: Get a new OAuth token from Ubuntu Single-Sign-On */ $url = 'https://login.ubuntu.com/api/1.0/authentications?ws.op=authenticate&token_name=Ubuntu%20One%20@%20try1'; $data = curlPetition(array('URL'=>$url,'USERPWD'=> $email_address.':'.$password)); $tokenA = json_decode($data['responseBody'],1); /* Set up that new token for use in OAuth requests */ $conskey = $tokenA['consumer_key']; $conssec = $tokenA['consumer_secret']; $token = $tokenA['token']; $secret = $tokenA['token_secret']; $oauth = new OAuth($conskey,$conssec,OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_URI); $oauth->enableDebug(); $oauth->enableSSLChecks(); $oauth->setToken($token,$secret); /* Step 2: tell Ubuntu One about the new token (signed with the token itself) */ $tell_u1_about_token_url = 'https://one.ubuntu.com/oauth/sso-finished-so-get-tokens/' . $email_address; $oauth->fetch($tell_u1_about_token_url); print_r($oauth->getLastResponse()); /* Step 3: use the token to make a request to the Files API */ $api_url = 'https://one.ubuntu.com/api/file_storage/v1/'; $oauth->fetch($api_url.'~/Ubuntu%20One/'); print_r($oauth->getLastResponse()); ?>
11
ответ дан 2 August 2018 в 03:10

Я считаю, что проблема заключалась в том, что шаг 2 рабочего процесса «создать новый токен», определенный на https://one.ubuntu.com/developer/account_admin/issue_tokens/cloud/, терпел неудачу с 503 для вас, потому что в этот уик-энд сервис упал на пару пунктов. Вам нужно будет уловить эту ситуацию и разобраться с ней (503 означает, что вы должны повторить запрос позже, в соответствии со стандартным HTTP).

Я протестировал ниже PHP (будьте осторожны: я не хакер PHP, поэтому он может быть не самым идиоматическим кодом), и он отлично работает для меня. Он выполняет три этапа:

Создает новый токен в Ubuntu SSO (login.ubuntu.com) (документы API) Скажите Ubuntu One об этом новом токене (документы API) Используйте этот новый токен, чтобы подписать запрос к API файлов Ubuntu One (API docs)

Вы увидите отдельные части, приведенные ниже. Помните, что это запросы и получает новый токен; если у вас есть токен (после шага 2), сохраните его где-нибудь; не запрашивать новый каждый раз.

<?php function curlPetition($arr){ $curl = curl_init($arr['URL']); if($arr['USERPWD']){curl_setopt($curl, CURLOPT_USERPWD, $arr['USERPWD']);} curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,FALSE); curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,2); curl_setopt($curl,CURLOPT_RETURNTRANSFER,true); $out = curl_exec($curl); curl_close($curl); $data['responseBody'] = $out; return $data; } /* Define username and password details */ $email_address = 'stuart.langridge@canonical.com'; $password = 'MY PASSWORD'; /* Step 1: Get a new OAuth token from Ubuntu Single-Sign-On */ $url = 'https://login.ubuntu.com/api/1.0/authentications?ws.op=authenticate&token_name=Ubuntu%20One%20@%20try1'; $data = curlPetition(array('URL'=>$url,'USERPWD'=> $email_address.':'.$password)); $tokenA = json_decode($data['responseBody'],1); /* Set up that new token for use in OAuth requests */ $conskey = $tokenA['consumer_key']; $conssec = $tokenA['consumer_secret']; $token = $tokenA['token']; $secret = $tokenA['token_secret']; $oauth = new OAuth($conskey,$conssec,OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_URI); $oauth->enableDebug(); $oauth->enableSSLChecks(); $oauth->setToken($token,$secret); /* Step 2: tell Ubuntu One about the new token (signed with the token itself) */ $tell_u1_about_token_url = 'https://one.ubuntu.com/oauth/sso-finished-so-get-tokens/' . $email_address; $oauth->fetch($tell_u1_about_token_url); print_r($oauth->getLastResponse()); /* Step 3: use the token to make a request to the Files API */ $api_url = 'https://one.ubuntu.com/api/file_storage/v1/'; $oauth->fetch($api_url.'~/Ubuntu%20One/'); print_r($oauth->getLastResponse()); ?>
11
ответ дан 4 August 2018 в 19:03

Я считаю, что проблема заключалась в том, что шаг 2 рабочего процесса «создать новый токен», определенный на https://one.ubuntu.com/developer/account_admin/issue_tokens/cloud/, терпел неудачу с 503 для вас, потому что в этот уик-энд сервис упал на пару пунктов. Вам нужно будет уловить эту ситуацию и разобраться с ней (503 означает, что вы должны повторить запрос позже, в соответствии со стандартным HTTP).

Я протестировал ниже PHP (будьте осторожны: я не хакер PHP, поэтому он может быть не самым идиоматическим кодом), и он отлично работает для меня. Он выполняет три этапа:

Создает новый токен в Ubuntu SSO (login.ubuntu.com) (документы API) Скажите Ubuntu One об этом новом токене (документы API) Используйте этот новый токен, чтобы подписать запрос к API файлов Ubuntu One (API docs)

Вы увидите отдельные части, приведенные ниже. Помните, что это запросы и получает новый токен; если у вас есть токен (после шага 2), сохраните его где-нибудь; не запрашивать новый каждый раз.

<?php function curlPetition($arr){ $curl = curl_init($arr['URL']); if($arr['USERPWD']){curl_setopt($curl, CURLOPT_USERPWD, $arr['USERPWD']);} curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,FALSE); curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,2); curl_setopt($curl,CURLOPT_RETURNTRANSFER,true); $out = curl_exec($curl); curl_close($curl); $data['responseBody'] = $out; return $data; } /* Define username and password details */ $email_address = 'stuart.langridge@canonical.com'; $password = 'MY PASSWORD'; /* Step 1: Get a new OAuth token from Ubuntu Single-Sign-On */ $url = 'https://login.ubuntu.com/api/1.0/authentications?ws.op=authenticate&token_name=Ubuntu%20One%20@%20try1'; $data = curlPetition(array('URL'=>$url,'USERPWD'=> $email_address.':'.$password)); $tokenA = json_decode($data['responseBody'],1); /* Set up that new token for use in OAuth requests */ $conskey = $tokenA['consumer_key']; $conssec = $tokenA['consumer_secret']; $token = $tokenA['token']; $secret = $tokenA['token_secret']; $oauth = new OAuth($conskey,$conssec,OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_URI); $oauth->enableDebug(); $oauth->enableSSLChecks(); $oauth->setToken($token,$secret); /* Step 2: tell Ubuntu One about the new token (signed with the token itself) */ $tell_u1_about_token_url = 'https://one.ubuntu.com/oauth/sso-finished-so-get-tokens/' . $email_address; $oauth->fetch($tell_u1_about_token_url); print_r($oauth->getLastResponse()); /* Step 3: use the token to make a request to the Files API */ $api_url = 'https://one.ubuntu.com/api/file_storage/v1/'; $oauth->fetch($api_url.'~/Ubuntu%20One/'); print_r($oauth->getLastResponse()); ?>
11
ответ дан 6 August 2018 в 03:22

Я считаю, что проблема заключалась в том, что шаг 2 рабочего процесса «создать новый токен», определенный на https://one.ubuntu.com/developer/account_admin/issue_tokens/cloud/, терпел неудачу с 503 для вас, потому что в этот уик-энд сервис упал на пару пунктов. Вам нужно будет уловить эту ситуацию и разобраться с ней (503 означает, что вы должны повторить запрос позже, в соответствии со стандартным HTTP).

Я протестировал ниже PHP (будьте осторожны: я не хакер PHP, поэтому он может быть не самым идиоматическим кодом), и он отлично работает для меня. Он выполняет три этапа:

Создает новый токен в Ubuntu SSO (login.ubuntu.com) (документы API) Скажите Ubuntu One об этом новом токене (документы API) Используйте этот новый токен, чтобы подписать запрос к API файлов Ubuntu One (API docs)

Вы увидите отдельные части, приведенные ниже. Помните, что это запросы и получает новый токен; если у вас есть токен (после шага 2), сохраните его где-нибудь; не запрашивать новый каждый раз.

<?php function curlPetition($arr){ $curl = curl_init($arr['URL']); if($arr['USERPWD']){curl_setopt($curl, CURLOPT_USERPWD, $arr['USERPWD']);} curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,FALSE); curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,2); curl_setopt($curl,CURLOPT_RETURNTRANSFER,true); $out = curl_exec($curl); curl_close($curl); $data['responseBody'] = $out; return $data; } /* Define username and password details */ $email_address = 'stuart.langridge@canonical.com'; $password = 'MY PASSWORD'; /* Step 1: Get a new OAuth token from Ubuntu Single-Sign-On */ $url = 'https://login.ubuntu.com/api/1.0/authentications?ws.op=authenticate&token_name=Ubuntu%20One%20@%20try1'; $data = curlPetition(array('URL'=>$url,'USERPWD'=> $email_address.':'.$password)); $tokenA = json_decode($data['responseBody'],1); /* Set up that new token for use in OAuth requests */ $conskey = $tokenA['consumer_key']; $conssec = $tokenA['consumer_secret']; $token = $tokenA['token']; $secret = $tokenA['token_secret']; $oauth = new OAuth($conskey,$conssec,OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_URI); $oauth->enableDebug(); $oauth->enableSSLChecks(); $oauth->setToken($token,$secret); /* Step 2: tell Ubuntu One about the new token (signed with the token itself) */ $tell_u1_about_token_url = 'https://one.ubuntu.com/oauth/sso-finished-so-get-tokens/' . $email_address; $oauth->fetch($tell_u1_about_token_url); print_r($oauth->getLastResponse()); /* Step 3: use the token to make a request to the Files API */ $api_url = 'https://one.ubuntu.com/api/file_storage/v1/'; $oauth->fetch($api_url.'~/Ubuntu%20One/'); print_r($oauth->getLastResponse()); ?>
11
ответ дан 7 August 2018 в 21:08

Код из одного класса первого шага, чтобы поговорить с ubuntuOne

<?php
class ubuntuOne{
    var $curl = array('cookieSrc'=>'cookie.txt','enableCookies'=>false);
    var $auth = array('consumer_key'=>false,'consumer_secret'=>false,'token'=>false,'token_secret'=>false);
    var $oauth = false;
    function ubuntuOne(){

    }
    function u1_getRoot(){
        if($this->oauth === false){return false;}
        $url = 'https://one.ubuntu.com/api/file_storage/v1';
        $this->oauth->fetch($url);
        print_r($this->oauth->getLastResponse());
    }
    function u1_listFolder($path){
        if($this->oauth === false){return false;}
        //FIXME: parse $path
        $url = 'https://one.ubuntu.com/api/file_storage/v1';
        //FIXME: $path debe terminar en '/'
        $url .= str_replace(' ','%20',$path);

        $this->oauth->fetch($url);
        $lr = $this->oauth->getLastResponse();
        if($lr === '{"error": "not found"}'){return false;}
        print_r($this->oauth->getLastResponse());
    }
    function u1_createFolder($name,$path = ''){
        //FIXME: folder exists?
        $url = 'https://one.ubuntu.com/api/file_storage/v1';
        //FIXME: $path debe terminar en '/'
        $url .= str_replace(' ','%20',$path);
        //FIXME: $name no puede contener '/'
        $url .= str_replace(' ','%20',$name);

        $this->oauth->fetch($url,'{"kind":"directory"}',OAUTH_HTTP_METHOD_PUT);
        print_r($this->oauth->getLastResponse());
    }
    function u1_file_exists($path){
        //FIXME: cache?
        $url = 'https://one.ubuntu.com/api/file_storage/v1';
        $url .= str_replace(' ','%20',$path);

        try{$this->oauth->fetch($url);}
        catch(OAuthException $E){if($E->lastResponse === '{"error": "not found"}'){return false;}}
        $i = $this->oauth->getLastResponseInfo();
        if($i['http_code'] === 200){}
        print_r($this->oauth->getLastResponseInfo());
    }
    function requestAuthentification($user,$pass,$name){
        $url = 'https://login.ubuntu.com/api/1.0/authentications?ws.op=authenticate&token_name=Ubuntu%20One%20@%20'.rawurlencode($name);
        $data = curlPetition(array('URL'=>$url,'USERPWD'=>$user.':'.$pass));
        //FIXME: check the response header -> 200
        $this->auth = json_decode($data['responseBody'],1);
    }
    function registerToken($user){
        $url = 'https://one.ubuntu.com/oauth/sso-finished-so-get-tokens/'.$user;
        $this->oauth->fetch($url);
        $r = $this->oauth->getLastResponse();
        if(substr($r,02) !== 'ok'){
            //FIXME: poner error
        }
        print_r($this->oauth->getLastResponse());
    }
    function saveAuth($fileName){$ar = fopen($fileName,'w');fwrite($ar,json_encode($this->auth));fclose($ar);return true;}
    function loadAuth($fileName){
        if(!file_exists($fileName)){return false;}
        $this->auth = json_decode(file_get_contents($fileName),1);
        if($this->auth === NULL){return false;}
        $this->oauth = new OAuth($this->auth['consumer_key'],$this->auth['consumer_secret'],OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_URI);
        $this->oauth->enableDebug();
        $this->oauth->enableSSLChecks();
        $this->oauth->setToken($this->auth['token'],$this->auth['token_secret']);
        return true;
    }
    function curlPetition($arr,$data = array()){
        $curl = curl_init($arr['URL']);
        if(!isset($data['URLTRACK'])){$data['URLTRACK'] = array();}
        $data['URLTRACK'][] = $arr['URL'];

        if(isset($this->curl['userAgent'])){curl_setopt($curl,CURLOPT_USERAGENT,$this->curl['userAgent']);}
        if(count($data['URLTRACK']) > 1){curl_setopt($curl,CURLOPT_REFERER,$data['URLTRACK'][count($data['URLTRACK'])-2]);}
        if(isset($arr['USERPWD'])){curl_setopt($curl,CURLOPT_USERPWD,$arr['USERPWD']);}
        if(isset($arr['userAgent'])){curl_setopt($curl,CURLOPT_USERAGENT,$arr['userAgent']);}
        if(isset($arr['POST'])){curl_setopt($curl,CURLOPT_POST,true);curl_setopt($curl,CURLOPT_POSTFIELDS,$arr['POST']);}
        if(isset($arr['referer'])){curl_setopt($curl,CURLOPT_REFERER,$arr['referer']);}
        if(isset($arr['timeout'])){curl_setopt($curl,CURLOPT_TIMEOUT,$arr['timeout']);}
        curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,FALSE);
        curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,2);
        curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
        curl_setopt($curl,CURLOPT_HEADER,true);

        if($this->curl['enableCookies'] !== false ){$cookieSrc = $this->curl['cookieSrc'];curl_setopt($curl,CURLOPT_COOKIEFILE,$cookieSrc);curl_setopt($curl,CURLOPT_COOKIEJAR,$cookieSrc);}
        if(isset($arr['header'])){curl_setopt($curl,CURLOPT_HTTPHEADER,$arr['header']);}
        curl_setopt($curl,CURLOPT_TIMEOUT,25);

        $viewcode = curl_exec($curl);
        $curlInfo = curl_getinfo($curl);
        curl_close($curl);
        if(empty($viewcode)){return false;}
        $data['responseHeader'] = substr($viewcode,0,$curlInfo['header_size']);
        $data['responseBody'] = substr($viewcode,$curlInfo['header_size']);
        //$data['viewcode'] = $viewcode;

        if(isset($arr['FOLLOWLOCATION']) && preg_match('/HTTP\/1\.1 30[12]{1}/',$data['responseHeader'])){
            preg_match('/Location: (.*)/',$data['responseHeader'],$p);
            $nurl = trim($p[1]);
            if($nurl[0]=='/'){list($arr['URL'],) = explode('/',str_replace('http://','',$arr['URL']));$nurl = 'http://'.$arr['URL'].$nurl;}
            $arr['URL'] = $nurl;
            unset($arr['POST']);
            return curlPetition($arr,$data);
        }

        return $data;
    }
}
?>

Некоторые примеры вызовов (srry для расстройства и комментария кода, возможно, документация в один прекрасный день):

echo time()."\n";
$ub = new ubuntuOne;
/* The first time you made the commented calls, then you save the authorization 
 * to a file. Once you have it on a file, you load it every time from there */
//$ub->requestAuthentification('sombra2eternity@gmail.com','*****','st');
//$ub->registerToken('sombra2eternity@gmail.com');
//print_r($ub->auth);
//$ub->saveAuth($GLOBALS['userPath'].'db/uOne.protected');
$ub->loadAuth($GLOBALS['userPath'].'db/uOne.protected');
//$ub->registerToken('sombra2eternity@gmail.com');
$ub->u1_getRoot();
//$ub->u1_file_exists('/~/Ubuntu One/non_exists/');
echo "\n";
$ub->u1_listFolder('/~/Ubuntu One/');
echo "\n";
$ub->u1_createFolder('new folder','/~/Ubuntu One/');

Удачи, надеюсь, это поможет

2
ответ дан 25 May 2018 в 19:42

Обновленная версия, некоторые функции добавлены, некоторые ошибки уловлены

    class ubuntuOne{
        var $curl = array('cookieSrc'=>'cookie.txt','enableCookies'=>false);
        var $auth = array('consumer_key'=>false,'consumer_secret'=>false,'token'=>false,'token_secret'=>false);
        var $oneInfo = false;
        var $oauth = false;
        var $E = array('errorCode'=>0,'errorDescription'=>'');
        var $fs = array();
        function ubuntuOne(){
            $this->fs['/'] = $this->helper_nodeSkeleton(array('name'=>'/','kind'=>'directory','resource_path'=>'/'));
        }
        function helper_nodeSkeleton($a = array()){return array_merge(array('name'=>false,'kind'=>false,'when_created'=>false,'generation'=>false,'has_children'=>false,'content_path'=>false,'generation_created'=>false,'parent_path'=>false,'resource_path'=>false,'when_changed'=>false,'key'=>false,'path'=>false,'volume_path'=>false,'size'=>0,'children'=>array()),$a);}
        function helper_storePath($path,$node = false){
            $path = explode('/',$path);
            $curPath = &$this->fs['/'];
            $resPath = '';
            foreach($path as $p){if($p === ''){continue;}$resPath .= '/'.$p;if(!isset($curPath['children'][$p])){$curPath['children'][$p] = $this->helper_nodeSkeleton(array('name'=>$p,'kind'=>'directory','resource_path'=>$resPath));}$curPath = &$curPath['children'][$p];}
            if($node !== false){$curPath = array_merge($curPath,$node);if($curPath['kind'] == 'file'){unset($curPath['children']);}}
        }
        function helper_storeNode($node){
            if(!isset($node['name'])){$r = preg_match('/\/([^\/]+)$/',$node['resource_path'],$name);if($r === 0){$this->E = array('errorCode'=>1,'errorDescription'=>'NAME_NOT_PARSED');return null;}$node['name'] = $name[1];}
            $this->helper_storePath($node['resource_path'],$node);
            $this->E = array('errorCode'=>0,'errorDescription'=>'');
        }
        function u1_getRoot(){
            if($this->oauth === false){return false;}
            $url = 'https://one.ubuntu.com/api/file_storage/v1';
            try{$this->oauth->fetch($url);}
            catch(OAuthException $E){print_r($E);return false;}
            $lr = json_decode($this->oauth->getLastResponse(),1);
            $this->helper_storePath($lr['root_node_path']);
            foreach($lr['user_node_paths'] as $np){$this->helper_storePath($np);}
            $this->oneInfo = $lr;
            return $lr;
        }
        function u1_getVolumeTree(){
            if($this->oneInfo === false){$r = $this->u1_getRoot();if($r === null){return $r;}}
            $base = $this->fs['/']['children']['~']['children'];
            foreach($base as $k=>$node){$this->u1_helper_getVolumeTree($node);}
            return $this->fs;
        }
        function u1_helper_getVolumeTree($node,$i = 0){
            if($node['kind'] == 'file'){return;}
            $r = $this->u1_folder_list($node['resource_path']);
            foreach($r['children'] as $child){$this->u1_helper_getVolumeTree($child,$i);}
        }
        function u1_folder_list($path){
            if($this->oauth === false){$this->E = array('errorCode'=>99,'errorDescription'=>'NO_OAUTH_DATA');return null;}
            if(substr($path,-1) != '/'){$path .= '/';}
            $url = 'https://one.ubuntu.com/api/file_storage/v1'.$this->helper_encodeURL($path).'?include_children=true';

            try{$this->oauth->fetch($url);}
            catch(OAuthException $E){echo $path;print_r($E);return null;}
            $lr = $this->oauth->getLastResponse();
            if($lr === '{"error": "not found"}'){return null;}
            $lr = json_decode($lr,1);

            /* Store the base node */
            $node = $lr;unset($node['children']);
            $this->helper_storeNode($node);
            foreach($lr['children'] as $child){$this->helper_storeNode($child);}
            return $lr;
        }
        function u1_folder_create($name,$path = '/~/Ubuntu One/'){
            if($this->oauth === false){$this->E = array('errorCode'=>99,'errorDescription'=>'NO_OAUTH_DATA');return null;}
            if(substr($path,-1) != '/'){$path .= '/';}
            $name = preg_replace(array('/[\.]$/','/[\/]*/'),'',$name);

            //FIXME: folder exists?
            $url = 'https://one.ubuntu.com/api/file_storage/v1'.$this->helper_encodeURL($path).$this->helper_encodeURL($name);

            $this->oauth->fetch($url,'{"kind":"directory"}',OAUTH_HTTP_METHOD_PUT);
            $node = json_decode($this->oauth->getLastResponse(),1);
            $this->helper_storeNode($node);
            return $node;
        }
        function u1_file_create($path,$blob){
            if($this->oauth === false){$this->E = array('errorCode'=>99,'errorDescription'=>'NO_OAUTH_DATA');return null;}
            //if(substr($path,-1) != '/'){$path .= '/';}
            $url = 'https://files.one.ubuntu.com/content'.$this->helper_encodeURL($path);
            //FIXME: u1_file_exists

            $this->oauth->fetch($url,$blob,OAUTH_HTTP_METHOD_PUT,array('Content-Type'=>'application/json'));
            //$i = $this->oauth->getLastResponseInfo();
            //print_r($i);
            $node = json_decode($this->oauth->getLastResponse(),1);
            $this->helper_storeNode($node);
            return $node;
        }
        function u1_file_exists($path,$nocache = false){
            if($this->oauth === false){$this->E = array('errorCode'=>99,'errorDescription'=>'NO_OAUTH_DATA');return null;}
            //FIXME: cache?
            $url = 'https://one.ubuntu.com/api/file_storage/v1'.$this->helper_encodeURL($path);

            try{$this->oauth->fetch($url);}
            catch(OAuthException $E){if($E->lastResponse === '{"error": "not found"}'){return false;}}
            $i = $this->oauth->getLastResponseInfo();
            if($i['http_code'] === 200){}
            //FIXME: respuesta adecuada
            print_r($this->oauth->getLastResponseInfo());
        }
        function u1_file_get($contentPath,$destinyPath = false){
            if($this->oauth === false){$this->E = array('errorCode'=>99,'errorDescription'=>'NO_OAUTH_DATA');return null;}
            if(substr($contentPath,0,9) != '/content/'){$this->E = array('errorCode'=>1,'errorDescription'=>'NO_CONTENT_PATH');return null;}
            $url = 'https://files.one.ubuntu.com'.$this->helper_encodeURL($contentPath);

            /* I hope nobody ask me about the following concat, never gonna give you up!! */
            $time = time();
            $data = array('oauth_consumer_key'=>$this->auth['consumer_key'],'oauth_nonce'=>$time*rand(0,200),'oauth_signature_method'=>'HMAC-SHA1','oauth_timestamp'=>$time,'oauth_token'=>$this->auth['token'],'oauth_version'=>'1.0');
            $b = '';foreach($data as $k=>$v){$b .= '&'.$k.'='.$v;}
            $b = 'GET&'.rawurlencode($url).'&'.rawurlencode(substr($b,1));

            $key = $this->auth['consumer_secret'].'&'.$this->auth['token_secret'];
            $signature = $this->helper_oauth_hmacsha1($key,$b);

            $data['oauth_signature'] = $signature;
            $a = $url.'?';foreach($data as $k=>$v){$a .= $k.'='.rawurlencode($v).'&';}

            $h = fopen($a,'r');
            if(!$h){
                //FIXME: poner error
                return null;
            }

            //FIXME: is_writable
            //FIXME: file_exists
            $fileName = basename($contentPath);
            $ar = fopen($destinyPath.$fileName,'w');

            //FIXME: comprobar los primeros bits del buffer para asegurarse de que no está fallando
            $buffer = '';while(!feof($h)){$buffer = fgets($h,8192);fwrite($ar,$buffer);}fclose($h);

            fclose($ar);
            $filehash = sha1_file($destinyPath.$fileName);
            //echo "\n".$filehash."\n";

            return array('fileName'=>$fileName,'filePath'=>$destinyPath,'fileHash'=>$filehash);
        }
        function u1_file_unlink($path){
            if($this->oauth === false){$this->E = array('errorCode'=>99,'errorDescription'=>'NO_OAUTH_DATA');return null;}
            $url = 'https://one.ubuntu.com/api/file_storage/v1'.$this->helper_encodeURL($path);
            //FIXME: u1_file_exists

            try{$this->oauth->fetch($url,$blob,OAUTH_HTTP_METHOD_DELETE,array('Content-Type'=>'application/json'));}
            catch(OAuthException $E){print_r($E);$this->E = array('errorCode'=>1,'errorDescription'=>'FILE_NOT_EXISTS');return null;}
            $i = $this->oauth->getLastResponseInfo();
    //FIXME: eliminar el fichero de la caché
            //print_r($i);
        }
        function requestAuthentification($user,$pass,$name){
            $url = 'https://login.ubuntu.com/api/1.0/authentications?ws.op=authenticate&token_name=Ubuntu%20One%20@%20'.rawurlencode($name);
            $data = $this->curlPetition(array('URL'=>$url,'USERPWD'=>$user.':'.$pass));
            //FIXME: check the response header -> 200
            $this->auth = json_decode($data['responseBody'],1);
            if($this->auth === NULL){return false;}
            $this->oauth = new OAuth($this->auth['consumer_key'],$this->auth['consumer_secret'],OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_URI);
            $this->oauth->enableDebug();
            $this->oauth->enableSSLChecks();
            $this->oauth->setToken($this->auth['token'],$this->auth['token_secret']);
            return true;
        }
        function registerToken($user){
    //FIXME: check $this->oauth == false
            $url = 'https://one.ubuntu.com/oauth/sso-finished-so-get-tokens/'.$user;
            $this->oauth->fetch($url);
            $r = $this->oauth->getLastResponse();
            if(substr($r,02) !== 'ok'){
                //FIXME: poner error
            }
            //print_r($this->oauth->getLastResponse());
        }
        function saveAuth($fileName){$ar = fopen($fileName,'w');fwrite($ar,json_encode($this->auth));fclose($ar);return true;}
        function loadAuth($fileName){
            if(!file_exists($fileName)){return false;}
            $this->auth = json_decode(file_get_contents($fileName),1);
            if($this->auth === NULL){return false;}
            return $this->helper_makeOauth();
        }
        function setAuth($auth){$this->auth = $auth;return $this->helper_makeOauth();}
        function helper_makeOauth(){
            $this->oauth = new OAuth($this->auth['consumer_key'],$this->auth['consumer_secret'],OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_URI);
            $this->oauth->enableDebug();
            $this->oauth->enableSSLChecks();
            $this->oauth->setToken($this->auth['token'],$this->auth['token_secret']);
            return true;
        }
        function helper_encodeURL($url){return str_replace('%2F','/',rawurlencode($url));}
        function helper_oauth_hmacsha1($key,$data){
            $blocksize=64;$hashfunc='sha1';
            if(strlen($key)>$blocksize){$key=pack('H*',$hashfunc($key));}
            $key=str_pad($key,$blocksize,chr(0x00));
            $ipad=str_repeat(chr(0x36),$blocksize);
            $opad=str_repeat(chr(0x5c),$blocksize);
            $hmac=pack('H*',$hashfunc(($key^$opad).pack('H*',$hashfunc(($key^$ipad).$data))));
            return base64_encode($hmac);
        }
        function curlPetition($arr,$data = array()){
            //FIXME: data puede ser una propiedad de la clase
            $curl = curl_init($arr['URL']);
            if(!isset($data['URLTRACK'])){$data['URLTRACK'] = array();}
            $data['URLTRACK'][] = $arr['URL'];

            if(isset($this->curl['userAgent'])){curl_setopt($curl,CURLOPT_USERAGENT,$this->curl['userAgent']);}
            if(count($data['URLTRACK']) > 1){curl_setopt($curl,CURLOPT_REFERER,$data['URLTRACK'][count($data['URLTRACK'])-2]);}
            if(isset($arr['USERPWD'])){curl_setopt($curl,CURLOPT_USERPWD,$arr['USERPWD']);}
            if(isset($arr['userAgent'])){curl_setopt($curl,CURLOPT_USERAGENT,$arr['userAgent']);}
            if(isset($arr['POST'])){curl_setopt($curl,CURLOPT_POST,true);curl_setopt($curl,CURLOPT_POSTFIELDS,$arr['POST']);}
            if(isset($arr['referer'])){curl_setopt($curl,CURLOPT_REFERER,$arr['referer']);}
            if(isset($arr['timeout'])){curl_setopt($curl,CURLOPT_TIMEOUT,$arr['timeout']);}
            curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,FALSE);
            curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,2);
            curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
            curl_setopt($curl,CURLOPT_HEADER,true);

            if($this->curl['enableCookies'] !== false ){$cookieSrc = $this->curl['cookieSrc'];curl_setopt($curl,CURLOPT_COOKIEFILE,$cookieSrc);curl_setopt($curl,CURLOPT_COOKIEJAR,$cookieSrc);}
            if(isset($arr['header'])){curl_setopt($curl,CURLOPT_HTTPHEADER,$arr['header']);}
            curl_setopt($curl,CURLOPT_TIMEOUT,25);

            $viewcode = curl_exec($curl);
            $curlInfo = curl_getinfo($curl);
            curl_close($curl);
            if(empty($viewcode)){return false;}
            $data['responseHeader'] = substr($viewcode,0,$curlInfo['header_size']);
            $data['responseBody'] = substr($viewcode,$curlInfo['header_size']);
            //$data['viewcode'] = $viewcode;

            if(isset($arr['FOLLOWLOCATION']) && preg_match('/HTTP\/1\.1 30[12]{1}/',$data['responseHeader'])){
                preg_match('/Location: (.*)/',$data['responseHeader'],$p);
                $nurl = trim($p[1]);
                if($nurl[0]=='/'){list($arr['URL'],) = explode('/',str_replace('http://','',$arr['URL']));$nurl = 'http://'.$arr['URL'].$nurl;}
                $arr['URL'] = $nurl;
                unset($arr['POST']);
                return $this->curlPetition($arr,$data);
            }

            return $data;
        }
    }
1
ответ дан 25 May 2018 в 19:42
  • 1
    Быстрый пример: $ ub = new ubuntuOne; $ r = $ ub- & gt; requestAuthentification ($ arr ['user'], $ arr ['pass'], $ arr ['name']); if ($ r === false) {return json_encode (array ('errorCode' = & gt; 2, 'errorDescription' = & gt; 'AUTH_ERROR', 'file' = & gt; __ FILE __, 'line' = & gt; __ LINE__)) ;} $ r = $ ub- & gt; registerToken ($ arr ['user']); if ($ r === false) {return json_encode (array ('errorCode' = & gt; 3, 'errorDescription' = & gt; 'TOKEN_ERROR', 'file' = & gt; __ FILE __, 'line' = & gt; __ LINE__)) ;} $ files = $ ub- & gt; u1_getVolumeTree (); print_r ($ файлов); – Marcos Fernandez Ramos 24 August 2011 в 18:11

Ничего себе, Стюарт Лангридж, ты для меня как легенда !!

Думаю, завтра я найду немного свободного времени, чтобы взломать ваш пример и посмотреть, что я получу. Тем временем я разработал некоторые функции, зависящие от Curl, чтобы войти в систему и украсть HTML-страницу UbuntuOne. Я попытаюсь опубликовать его здесь, как только немного стабилизирую его.

Да, я напишу почти полный API на основе PHP и заметлю вас, только дай мне время, я добрый перегрузки прямо сейчас: S

Я буду рад показать вам свою работу, возможно, однажды я преодолею свои страхи и поработаю на работе в Canonical, это похоже на сон для меня. На данный момент я написал небольшой обзор, чтобы показать вам мой текущий проект, я с удовольствием пришлю вам копию, если вам будет интересно. Я хочу выпустить его как бесплатное программное обеспечение, но я один из тех, кому нужно бункер веб-проекта, и убедитесь, что он безопасен, прежде чем выпустить его.

(это не какая-то перма-ссылка, извините ) http://marcos.colorvamp.com/mongo/lain-and-ubuntu-one/

И если вы проверите базовую страницу ... хм, как говорится на моей земле. «В кузнечном доме есть деревянные ножи»: -)

Спасибо за ответ: -)

0
ответ дан 25 May 2018 в 19:42
  • 1
    Этот материал выглядит очень круто! Я был бы рад поговорить о том, как вы можете наиболее эффективно связать себя с Ubuntu One. Затем я расскажу вам о том, как делать то, что вы хотите, без экранирования страниц HTML, которые мы хотели бы, чтобы вы этого не сделали. :) – sil 29 July 2011 в 02:19
  • 2
    Мне было бы очень приятно получить от вас какой-либо намек. У моего проекта есть некоторые потребности, над которыми я работаю (интерфейс, ядро, безопасность, приложения js, разрешения), поэтому мой прогресс иногда немного медленный, обычно, когда мне приходится касаться некоторых областей. Я собираюсь опубликовать здесь базовый класс, который реализует очень первые шаги ubuntu. Одно сообщение - далеко не готово, но может указать несколько человек в правильном направлении, если у них есть какие-либо сомнения. Я буду обновлять его в свободное время, которое мог бы найти и опубликовать здесь, если все будет в порядке. – Marcos Fernandez Ramos 1 August 2011 в 01:20
  • 3
    Во всяком случае, когда я заканчиваю «Reveal», протокол Я бы хотел отправить вам копию и получить ваши отзывы, если у вас мало свободного времени. Его полный "свиней" (тестовые примеры, слишком много чтения mesa-devel :)), чтобы избежать регрессий, которые служат примерами. Возможно, команда UbuntuOne может получить некоторые идеи кэширования из кода (я скептически, но все же ...). Спасибо за ваше время! – Marcos Fernandez Ramos 1 August 2011 в 01:24
  • 4
    Определенно пришлите мне копию и детали и так далее. Я нахожусь на irc как "aquarius". если вы хотите догнать чат, или мы можем скайп или что угодно :) – sil 1 August 2011 в 16:39

Ничего себе, Стюарт Лангридж, ты для меня как легенда !!

Думаю, завтра я найду немного свободного времени, чтобы взломать ваш пример и посмотреть, что я получу. Тем временем я разработал некоторые функции, зависящие от Curl, чтобы войти в систему и украсть HTML-страницу UbuntuOne. Я попытаюсь опубликовать его здесь, как только немного стабилизирую его.

Да, я напишу почти полный API на основе PHP и заметлю вас, только дай мне время, я добрый перегрузки прямо сейчас: S

Я буду рад показать вам свою работу, возможно, однажды я преодолею свои страхи и поработаю на работе в Canonical, это похоже на сон для меня. На данный момент я написал небольшой обзор, чтобы показать вам мой текущий проект, я с удовольствием пришлю вам копию, если вам будет интересно. Я хочу выпустить его как бесплатное программное обеспечение, но я один из тех, кому нужно бункер веб-проекта, и убедитесь, что он безопасен, прежде чем выпустить его.

(это не какая-то перма-ссылка, извините ) http://marcos.colorvamp.com/mongo/lain-and-ubuntu-one/

И если вы проверите базовую страницу ... хм, как говорится на моей земле. «В кузнечном доме есть деревянные ножи»: -)

Спасибо за ответ: -)

0
ответ дан 25 July 2018 в 21:33
  • 1
    Этот материал выглядит очень круто! Я был бы рад поговорить о том, как вы можете наиболее эффективно связать себя с Ubuntu One. Затем я расскажу вам о том, как делать то, что вы хотите, без экранирования страниц HTML, которые мы хотели бы, чтобы вы этого не сделали. :) – sil 29 July 2011 в 02:19
  • 2
    Мне было бы очень приятно получить от вас какой-либо намек. У моего проекта есть некоторые потребности, над которыми я работаю (интерфейс, ядро, безопасность, приложения js, разрешения), поэтому мой прогресс иногда немного медленный, обычно, когда мне приходится касаться некоторых областей. Я собираюсь опубликовать здесь базовый класс, который реализует очень первые шаги ubuntu. Одно сообщение - далеко не готово, но может указать несколько человек в правильном направлении, если у них есть какие-либо сомнения. Я буду обновлять его в свободное время, которое мог бы найти и опубликовать здесь, если все будет в порядке. – Marcos Fernandez Ramos 1 August 2011 в 01:20
  • 3
    Во всяком случае, когда я заканчиваю «Reveal», протокол Я бы хотел отправить вам копию и получить ваши отзывы, если у вас мало свободного времени. Его полный "свиней" (тестовые примеры, слишком много чтения mesa-devel :)), чтобы избежать регрессий, которые служат примерами. Возможно, команда UbuntuOne может получить некоторые идеи кэширования из кода (я скептически, но все же ...). Спасибо за ваше время! – Marcos Fernandez Ramos 1 August 2011 в 01:24
  • 4
    Определенно пришлите мне копию и детали и так далее. Я нахожусь на irc как "aquarius". если вы хотите догнать чат, или мы можем скайп или что угодно :) – sil 1 August 2011 в 16:39
  • 5
    Быстрый пример: $ ub = new ubuntuOne; $ r = $ ub- & gt; requestAuthentification ($ arr ['user'], $ arr ['pass'], $ arr ['name']); if ($ r === false) {return json_encode (array ('errorCode' = & gt; 2, 'errorDescription' = & gt; 'AUTH_ERROR', 'file' = & gt; __ FILE __, 'line' = & gt; __ LINE__)) ;} $ r = $ ub- & gt; registerToken ($ arr ['user']); if ($ r === false) {return json_encode (array ('errorCode' = & gt; 3, 'errorDescription' = & gt; 'TOKEN_ERROR', 'file' = & gt; __ FILE __, 'line' = & gt; __ LINE__)) ;} $ files = $ ub- & gt; u1_getVolumeTree (); print_r ($ файлов); – Marcos Fernandez Ramos 24 August 2011 в 18:11

Ничего себе, Стюарт Лангридж, ты для меня как легенда !!

Думаю, завтра я найду немного свободного времени, чтобы взломать ваш пример и посмотреть, что я получу. Тем временем я разработал некоторые функции, зависящие от Curl, чтобы войти в систему и украсть HTML-страницу UbuntuOne. Я попытаюсь опубликовать его здесь, как только немного стабилизирую его.

Да, я напишу почти полный API на основе PHP и заметлю вас, только дай мне время, я добрый перегрузки прямо сейчас: S

Я буду рад показать вам свою работу, возможно, однажды я преодолею свои страхи и поработаю на работе в Canonical, это похоже на сон для меня. На данный момент я написал небольшой обзор, чтобы показать вам мой текущий проект, я с удовольствием пришлю вам копию, если вам будет интересно. Я хочу выпустить его как бесплатное программное обеспечение, но я один из тех, кому нужно бункер веб-проекта, и убедитесь, что он безопасен, прежде чем выпустить его.

(это не какая-то перма-ссылка, извините ) http://marcos.colorvamp.com/mongo/lain-and-ubuntu-one/

И если вы проверите базовую страницу ... хм, как говорится на моей земле. «В кузнечном доме есть деревянные ножи»: -)

Спасибо за ответ: -)

2
ответ дан 31 July 2018 в 11:05
  • 1
    Этот материал выглядит очень круто! Я был бы рад поговорить о том, как вы можете наиболее эффективно связать себя с Ubuntu One. Затем я расскажу вам о том, как делать то, что вы хотите, без экранирования страниц HTML, которые мы хотели бы, чтобы вы этого не сделали. :) – sil 29 July 2011 в 02:19
  • 2
    Мне было бы очень приятно получить от вас какой-либо намек. У моего проекта есть некоторые потребности, над которыми я работаю (интерфейс, ядро, безопасность, приложения js, разрешения), поэтому мой прогресс иногда немного медленный, обычно, когда мне приходится касаться некоторых областей. Я собираюсь опубликовать здесь базовый класс, который реализует очень первые шаги ubuntu. Одно сообщение - далеко не готово, но может указать несколько человек в правильном направлении, если у них есть какие-либо сомнения. Я буду обновлять его в свободное время, которое мог бы найти и опубликовать здесь, если все будет в порядке. – Marcos Fernandez Ramos 1 August 2011 в 01:20
  • 3
    Во всяком случае, когда я заканчиваю «Reveal», протокол Я бы хотел отправить вам копию и получить ваши отзывы, если у вас мало свободного времени. Его полный "свиней" (тестовые примеры, слишком много чтения mesa-devel :)), чтобы избежать регрессий, которые служат примерами. Возможно, команда UbuntuOne может получить некоторые идеи кэширования из кода (я скептически, но все же ...). Спасибо за ваше время! – Marcos Fernandez Ramos 1 August 2011 в 01:24
  • 4
    Определенно пришлите мне копию и детали и так далее. Я нахожусь на irc как "aquarius". если вы хотите догнать чат, или мы можем скайп или что угодно :) – sil 1 August 2011 в 16:39
  • 5
    Быстрый пример: $ ub = new ubuntuOne; $ r = $ ub- & gt; requestAuthentification ($ arr ['user'], $ arr ['pass'], $ arr ['name']); if ($ r === false) {return json_encode (array ('errorCode' = & gt; 2, 'errorDescription' = & gt; 'AUTH_ERROR', 'file' = & gt; __ FILE __, 'line' = & gt; __ LINE__)) ;} $ r = $ ub- & gt; registerToken ($ arr ['user']); if ($ r === false) {return json_encode (array ('errorCode' = & gt; 3, 'errorDescription' = & gt; 'TOKEN_ERROR', 'file' = & gt; __ FILE __, 'line' = & gt; __ LINE__)) ;} $ files = $ ub- & gt; u1_getVolumeTree (); print_r ($ файлов); – Marcos Fernandez Ramos 24 August 2011 в 18:11

Ничего себе, Стюарт Лангридж, ты для меня как легенда !!

Думаю, завтра я найду немного свободного времени, чтобы взломать ваш пример и посмотреть, что я получу. Тем временем я разработал некоторые функции, зависящие от Curl, чтобы войти в систему и украсть HTML-страницу UbuntuOne. Я попытаюсь опубликовать его здесь, как только немного стабилизирую его.

Да, я напишу почти полный API на основе PHP и заметлю вас, только дай мне время, я добрый перегрузки прямо сейчас: S

Я буду рад показать вам свою работу, возможно, однажды я преодолею свои страхи и поработаю на работе в Canonical, это похоже на сон для меня. На данный момент я написал небольшой обзор, чтобы показать вам мой текущий проект, я с удовольствием пришлю вам копию, если вам будет интересно. Я хочу выпустить его как бесплатное программное обеспечение, но я один из тех, кому нужно бункер веб-проекта, и убедитесь, что он безопасен, прежде чем выпустить его.

(это не какая-то перма-ссылка, извините ) http://marcos.colorvamp.com/mongo/lain-and-ubuntu-one/

И если вы проверите базовую страницу ... хм, как говорится на моей земле. «В кузнечном доме есть деревянные ножи»: -)

Спасибо за ответ: -)

2
ответ дан 2 August 2018 в 03:10
  • 1
    Этот материал выглядит очень круто! Я был бы рад поговорить о том, как вы можете наиболее эффективно связать себя с Ubuntu One. Затем я расскажу вам о том, как делать то, что вы хотите, без экранирования страниц HTML, которые мы хотели бы, чтобы вы этого не сделали. :) – sil 29 July 2011 в 02:19
  • 2
    Мне было бы очень приятно получить от вас какой-либо намек. У моего проекта есть некоторые потребности, над которыми я работаю (интерфейс, ядро, безопасность, приложения js, разрешения), поэтому мой прогресс иногда немного медленный, обычно, когда мне приходится касаться некоторых областей. Я собираюсь опубликовать здесь базовый класс, который реализует очень первые шаги ubuntu. Одно сообщение - далеко не готово, но может указать несколько человек в правильном направлении, если у них есть какие-либо сомнения. Я буду обновлять его в свободное время, которое мог бы найти и опубликовать здесь, если все будет в порядке. – Marcos Fernandez Ramos 1 August 2011 в 01:20
  • 3
    Во всяком случае, когда я заканчиваю «Reveal», протокол Я бы хотел отправить вам копию и получить ваши отзывы, если у вас мало свободного времени. Его полный "свиней" (тестовые примеры, слишком много чтения mesa-devel :)), чтобы избежать регрессий, которые служат примерами. Возможно, команда UbuntuOne может получить некоторые идеи кэширования из кода (я скептически, но все же ...). Спасибо за ваше время! – Marcos Fernandez Ramos 1 August 2011 в 01:24
  • 4
    Определенно пришлите мне копию и детали и так далее. Я нахожусь на irc как "aquarius". если вы хотите догнать чат, или мы можем скайп или что угодно :) – sil 1 August 2011 в 16:39
  • 5
    Быстрый пример: $ ub = new ubuntuOne; $ r = $ ub- & gt; requestAuthentification ($ arr ['user'], $ arr ['pass'], $ arr ['name']); if ($ r === false) {return json_encode (array ('errorCode' = & gt; 2, 'errorDescription' = & gt; 'AUTH_ERROR', 'file' = & gt; __ FILE __, 'line' = & gt; __ LINE__)) ;} $ r = $ ub- & gt; registerToken ($ arr ['user']); if ($ r === false) {return json_encode (array ('errorCode' = & gt; 3, 'errorDescription' = & gt; 'TOKEN_ERROR', 'file' = & gt; __ FILE __, 'line' = & gt; __ LINE__)) ;} $ files = $ ub- & gt; u1_getVolumeTree (); print_r ($ файлов); – Marcos Fernandez Ramos 24 August 2011 в 18:11

Ничего себе, Стюарт Лангридж, ты для меня как легенда !!

Думаю, завтра я найду немного свободного времени, чтобы взломать ваш пример и посмотреть, что я получу. Тем временем я разработал некоторые функции, зависящие от Curl, чтобы войти в систему и украсть HTML-страницу UbuntuOne. Я попытаюсь опубликовать его здесь, как только немного стабилизирую его.

Да, я напишу почти полный API на основе PHP и заметлю вас, только дай мне время, я добрый перегрузки прямо сейчас: S

Я буду рад показать вам свою работу, возможно, однажды я преодолею свои страхи и поработаю на работе в Canonical, это похоже на сон для меня. На данный момент я написал небольшой обзор, чтобы показать вам мой текущий проект, я с удовольствием пришлю вам копию, если вам будет интересно. Я хочу выпустить его как бесплатное программное обеспечение, но я один из тех, кому нужно бункер веб-проекта, и убедитесь, что он безопасен, прежде чем выпустить его.

(это не какая-то перма-ссылка, извините ) http://marcos.colorvamp.com/mongo/lain-and-ubuntu-one/

И если вы проверите базовую страницу ... хм, как говорится на моей земле. «В кузнечном доме есть деревянные ножи»: -)

Спасибо за ответ: -)

2
ответ дан 4 August 2018 в 19:03
  • 1
    Этот материал выглядит очень круто! Я был бы рад поговорить о том, как вы можете наиболее эффективно связать себя с Ubuntu One. Затем я расскажу вам о том, как делать то, что вы хотите, без экранирования страниц HTML, которые мы хотели бы, чтобы вы этого не сделали. :) – sil 29 July 2011 в 02:19
  • 2
    Мне было бы очень приятно получить от вас какой-либо намек. У моего проекта есть некоторые потребности, над которыми я работаю (интерфейс, ядро, безопасность, приложения js, разрешения), поэтому мой прогресс иногда немного медленный, обычно, когда мне приходится касаться некоторых областей. Я собираюсь опубликовать здесь базовый класс, который реализует очень первые шаги ubuntu. Одно сообщение - далеко не готово, но может указать несколько человек в правильном направлении, если у них есть какие-либо сомнения. Я буду обновлять его в свободное время, которое мог бы найти и опубликовать здесь, если все будет в порядке. – Marcos Fernandez Ramos 1 August 2011 в 01:20
  • 3
    Во всяком случае, когда я заканчиваю «Reveal», протокол Я бы хотел отправить вам копию и получить ваши отзывы, если у вас мало свободного времени. Его полный "свиней" (тестовые примеры, слишком много чтения mesa-devel :)), чтобы избежать регрессий, которые служат примерами. Возможно, команда UbuntuOne может получить некоторые идеи кэширования из кода (я скептически, но все же ...). Спасибо за ваше время! – Marcos Fernandez Ramos 1 August 2011 в 01:24
  • 4
    Определенно пришлите мне копию и детали и так далее. Я нахожусь на irc как "aquarius". если вы хотите догнать чат, или мы можем скайп или что угодно :) – sil 1 August 2011 в 16:39
  • 5
    Быстрый пример: $ ub = new ubuntuOne; $ r = $ ub- & gt; requestAuthentification ($ arr ['user'], $ arr ['pass'], $ arr ['name']); if ($ r === false) {return json_encode (array ('errorCode' = & gt; 2, 'errorDescription' = & gt; 'AUTH_ERROR', 'file' = & gt; __ FILE __, 'line' = & gt; __ LINE__)) ;} $ r = $ ub- & gt; registerToken ($ arr ['user']); if ($ r === false) {return json_encode (array ('errorCode' = & gt; 3, 'errorDescription' = & gt; 'TOKEN_ERROR', 'file' = & gt; __ FILE __, 'line' = & gt; __ LINE__)) ;} $ files = $ ub- & gt; u1_getVolumeTree (); print_r ($ файлов); – Marcos Fernandez Ramos 24 August 2011 в 18:11

Ничего себе, Стюарт Лангридж, ты для меня как легенда !!

Думаю, завтра я найду немного свободного времени, чтобы взломать ваш пример и посмотреть, что я получу. Тем временем я разработал некоторые функции, зависящие от Curl, чтобы войти в систему и украсть HTML-страницу UbuntuOne. Я попытаюсь опубликовать его здесь, как только немного стабилизирую его.

Да, я напишу почти полный API на основе PHP и заметлю вас, только дай мне время, я добрый перегрузки прямо сейчас: S

Я буду рад показать вам свою работу, возможно, однажды я преодолею свои страхи и поработаю на работе в Canonical, это похоже на сон для меня. На данный момент я написал небольшой обзор, чтобы показать вам мой текущий проект, я с удовольствием пришлю вам копию, если вам будет интересно. Я хочу выпустить его как бесплатное программное обеспечение, но я один из тех, кому нужно бункер веб-проекта, и убедитесь, что он безопасен, прежде чем выпустить его.

(это не какая-то перма-ссылка, извините ) http://marcos.colorvamp.com/mongo/lain-and-ubuntu-one/

И если вы проверите базовую страницу ... хм, как говорится на моей земле. «В кузнечном доме есть деревянные ножи»: -)

Спасибо за ответ: -)

2
ответ дан 6 August 2018 в 03:22
  • 1
    Этот материал выглядит очень круто! Я был бы рад поговорить о том, как вы можете наиболее эффективно связать себя с Ubuntu One. Затем я расскажу вам о том, как делать то, что вы хотите, без экранирования страниц HTML, которые мы хотели бы, чтобы вы этого не сделали. :) – sil 29 July 2011 в 02:19
  • 2
    Мне было бы очень приятно получить от вас какой-либо намек. У моего проекта есть некоторые потребности, над которыми я работаю (интерфейс, ядро, безопасность, приложения js, разрешения), поэтому мой прогресс иногда немного медленный, обычно, когда мне приходится касаться некоторых областей. Я собираюсь опубликовать здесь базовый класс, который реализует очень первые шаги ubuntu. Одно сообщение - далеко не готово, но может указать несколько человек в правильном направлении, если у них есть какие-либо сомнения. Я буду обновлять его в свободное время, которое мог бы найти и опубликовать здесь, если все будет в порядке. – Marcos Fernandez Ramos 1 August 2011 в 01:20
  • 3
    Во всяком случае, когда я заканчиваю «Reveal», протокол Я бы хотел отправить вам копию и получить ваши отзывы, если у вас мало свободного времени. Его полный "свиней" (тестовые примеры, слишком много чтения mesa-devel :)), чтобы избежать регрессий, которые служат примерами. Возможно, команда UbuntuOne может получить некоторые идеи кэширования из кода (я скептически, но все же ...). Спасибо за ваше время! – Marcos Fernandez Ramos 1 August 2011 в 01:24
  • 4
    Определенно пришлите мне копию и детали и так далее. Я нахожусь на irc как "aquarius". если вы хотите догнать чат, или мы можем скайп или что угодно :) – sil 1 August 2011 в 16:39
  • 5
    Быстрый пример: $ ub = new ubuntuOne; $ r = $ ub- & gt; requestAuthentification ($ arr ['user'], $ arr ['pass'], $ arr ['name']); if ($ r === false) {return json_encode (array ('errorCode' = & gt; 2, 'errorDescription' = & gt; 'AUTH_ERROR', 'file' = & gt; __ FILE __, 'line' = & gt; __ LINE__)) ;} $ r = $ ub- & gt; registerToken ($ arr ['user']); if ($ r === false) {return json_encode (array ('errorCode' = & gt; 3, 'errorDescription' = & gt; 'TOKEN_ERROR', 'file' = & gt; __ FILE __, 'line' = & gt; __ LINE__)) ;} $ files = $ ub- & gt; u1_getVolumeTree (); print_r ($ файлов); – Marcos Fernandez Ramos 24 August 2011 в 18:11

Ничего себе, Стюарт Лангридж, ты для меня как легенда !!

Думаю, завтра я найду немного свободного времени, чтобы взломать ваш пример и посмотреть, что я получу. Тем временем я разработал некоторые функции, зависящие от Curl, чтобы войти в систему и украсть HTML-страницу UbuntuOne. Я попытаюсь опубликовать его здесь, как только немного стабилизирую его.

Да, я напишу почти полный API на основе PHP и заметлю вас, только дай мне время, я добрый перегрузки прямо сейчас: S

Я буду рад показать вам свою работу, возможно, однажды я преодолею свои страхи и поработаю на работе в Canonical, это похоже на сон для меня. На данный момент я написал небольшой обзор, чтобы показать вам мой текущий проект, я с удовольствием пришлю вам копию, если вам будет интересно. Я хочу выпустить его как бесплатное программное обеспечение, но я один из тех, кому нужно бункер веб-проекта, и убедитесь, что он безопасен, прежде чем выпустить его.

(это не какая-то перма-ссылка, извините ) http://marcos.colorvamp.com/mongo/lain-and-ubuntu-one/

И если вы проверите базовую страницу ... хм, как говорится на моей земле. «В кузнечном доме есть деревянные ножи»: -)

Спасибо за ответ: -)

2
ответ дан 7 August 2018 в 21:08
  • 1
    Этот материал выглядит очень круто! Я был бы рад поговорить о том, как вы можете наиболее эффективно связать себя с Ubuntu One. Затем я расскажу вам о том, как делать то, что вы хотите, без экранирования страниц HTML, которые мы хотели бы, чтобы вы этого не сделали. :) – sil 29 July 2011 в 02:19
  • 2
    Мне было бы очень приятно получить от вас какой-либо намек. У моего проекта есть некоторые потребности, над которыми я работаю (интерфейс, ядро, безопасность, приложения js, разрешения), поэтому мой прогресс иногда немного медленный, обычно, когда мне приходится касаться некоторых областей. Я собираюсь опубликовать здесь базовый класс, который реализует очень первые шаги ubuntu. Одно сообщение - далеко не готово, но может указать несколько человек в правильном направлении, если у них есть какие-либо сомнения. Я буду обновлять его в свободное время, которое мог бы найти и опубликовать здесь, если все будет в порядке. – Marcos Fernandez Ramos 1 August 2011 в 01:20
  • 3
    Во всяком случае, когда я заканчиваю «Reveal», протокол Я бы хотел отправить вам копию и получить ваши отзывы, если у вас мало свободного времени. Его полный "свиней" (тестовые примеры, слишком много чтения mesa-devel :)), чтобы избежать регрессий, которые служат примерами. Возможно, команда UbuntuOne может получить некоторые идеи кэширования из кода (я скептически, но все же ...). Спасибо за ваше время! – Marcos Fernandez Ramos 1 August 2011 в 01:24
  • 4
    Определенно пришлите мне копию и детали и так далее. Я нахожусь на irc как "aquarius". если вы хотите догнать чат, или мы можем скайп или что угодно :) – sil 1 August 2011 в 16:39
  • 5
    Быстрый пример: $ ub = new ubuntuOne; $ r = $ ub- & gt; requestAuthentification ($ arr ['user'], $ arr ['pass'], $ arr ['name']); if ($ r === false) {return json_encode (array ('errorCode' = & gt; 2, 'errorDescription' = & gt; 'AUTH_ERROR', 'file' = & gt; __ FILE __, 'line' = & gt; __ LINE__)) ;} $ r = $ ub- & gt; registerToken ($ arr ['user']); if ($ r === false) {return json_encode (array ('errorCode' = & gt; 3, 'errorDescription' = & gt; 'TOKEN_ERROR', 'file' = & gt; __ FILE __, 'line' = & gt; __ LINE__)) ;} $ files = $ ub- & gt; u1_getVolumeTree (); print_r ($ файлов); – Marcos Fernandez Ramos 24 August 2011 в 18:11

Обновленная версия, некоторые функции добавлены, некоторые ошибки уловлены

    class ubuntuOne{
        var $curl = array('cookieSrc'=>'cookie.txt','enableCookies'=>false);
        var $auth = array('consumer_key'=>false,'consumer_secret'=>false,'token'=>false,'token_secret'=>false);
        var $oneInfo = false;
        var $oauth = false;
        var $E = array('errorCode'=>0,'errorDescription'=>'');
        var $fs = array();
        function ubuntuOne(){
            $this->fs['/'] = $this->helper_nodeSkeleton(array('name'=>'/','kind'=>'directory','resource_path'=>'/'));
        }
        function helper_nodeSkeleton($a = array()){return array_merge(array('name'=>false,'kind'=>false,'when_created'=>false,'generation'=>false,'has_children'=>false,'content_path'=>false,'generation_created'=>false,'parent_path'=>false,'resource_path'=>false,'when_changed'=>false,'key'=>false,'path'=>false,'volume_path'=>false,'size'=>0,'children'=>array()),$a);}
        function helper_storePath($path,$node = false){
            $path = explode('/',$path);
            $curPath = &$this->fs['/'];
            $resPath = '';
            foreach($path as $p){if($p === ''){continue;}$resPath .= '/'.$p;if(!isset($curPath['children'][$p])){$curPath['children'][$p] = $this->helper_nodeSkeleton(array('name'=>$p,'kind'=>'directory','resource_path'=>$resPath));}$curPath = &$curPath['children'][$p];}
            if($node !== false){$curPath = array_merge($curPath,$node);if($curPath['kind'] == 'file'){unset($curPath['children']);}}
        }
        function helper_storeNode($node){
            if(!isset($node['name'])){$r = preg_match('/\/([^\/]+)$/',$node['resource_path'],$name);if($r === 0){$this->E = array('errorCode'=>1,'errorDescription'=>'NAME_NOT_PARSED');return null;}$node['name'] = $name[1];}
            $this->helper_storePath($node['resource_path'],$node);
            $this->E = array('errorCode'=>0,'errorDescription'=>'');
        }
        function u1_getRoot(){
            if($this->oauth === false){return false;}
            $url = 'https://one.ubuntu.com/api/file_storage/v1';
            try{$this->oauth->fetch($url);}
            catch(OAuthException $E){print_r($E);return false;}
            $lr = json_decode($this->oauth->getLastResponse(),1);
            $this->helper_storePath($lr['root_node_path']);
            foreach($lr['user_node_paths'] as $np){$this->helper_storePath($np);}
            $this->oneInfo = $lr;
            return $lr;
        }
        function u1_getVolumeTree(){
            if($this->oneInfo === false){$r = $this->u1_getRoot();if($r === null){return $r;}}
            $base = $this->fs['/']['children']['~']['children'];
            foreach($base as $k=>$node){$this->u1_helper_getVolumeTree($node);}
            return $this->fs;
        }
        function u1_helper_getVolumeTree($node,$i = 0){
            if($node['kind'] == 'file'){return;}
            $r = $this->u1_folder_list($node['resource_path']);
            foreach($r['children'] as $child){$this->u1_helper_getVolumeTree($child,$i);}
        }
        function u1_folder_list($path){
            if($this->oauth === false){$this->E = array('errorCode'=>99,'errorDescription'=>'NO_OAUTH_DATA');return null;}
            if(substr($path,-1) != '/'){$path .= '/';}
            $url = 'https://one.ubuntu.com/api/file_storage/v1'.$this->helper_encodeURL($path).'?include_children=true';

            try{$this->oauth->fetch($url);}
            catch(OAuthException $E){echo $path;print_r($E);return null;}
            $lr = $this->oauth->getLastResponse();
            if($lr === '{"error": "not found"}'){return null;}
            $lr = json_decode($lr,1);

            /* Store the base node */
            $node = $lr;unset($node['children']);
            $this->helper_storeNode($node);
            foreach($lr['children'] as $child){$this->helper_storeNode($child);}
            return $lr;
        }
        function u1_folder_create($name,$path = '/~/Ubuntu One/'){
            if($this->oauth === false){$this->E = array('errorCode'=>99,'errorDescription'=>'NO_OAUTH_DATA');return null;}
            if(substr($path,-1) != '/'){$path .= '/';}
            $name = preg_replace(array('/[\.]$/','/[\/]*/'),'',$name);

            //FIXME: folder exists?
            $url = 'https://one.ubuntu.com/api/file_storage/v1'.$this->helper_encodeURL($path).$this->helper_encodeURL($name);

            $this->oauth->fetch($url,'{"kind":"directory"}',OAUTH_HTTP_METHOD_PUT);
            $node = json_decode($this->oauth->getLastResponse(),1);
            $this->helper_storeNode($node);
            return $node;
        }
        function u1_file_create($path,$blob){
            if($this->oauth === false){$this->E = array('errorCode'=>99,'errorDescription'=>'NO_OAUTH_DATA');return null;}
            //if(substr($path,-1) != '/'){$path .= '/';}
            $url = 'https://files.one.ubuntu.com/content'.$this->helper_encodeURL($path);
            //FIXME: u1_file_exists

            $this->oauth->fetch($url,$blob,OAUTH_HTTP_METHOD_PUT,array('Content-Type'=>'application/json'));
            //$i = $this->oauth->getLastResponseInfo();
            //print_r($i);
            $node = json_decode($this->oauth->getLastResponse(),1);
            $this->helper_storeNode($node);
            return $node;
        }
        function u1_file_exists($path,$nocache = false){
            if($this->oauth === false){$this->E = array('errorCode'=>99,'errorDescription'=>'NO_OAUTH_DATA');return null;}
            //FIXME: cache?
            $url = 'https://one.ubuntu.com/api/file_storage/v1'.$this->helper_encodeURL($path);

            try{$this->oauth->fetch($url);}
            catch(OAuthException $E){if($E->lastResponse === '{"error": "not found"}'){return false;}}
            $i = $this->oauth->getLastResponseInfo();
            if($i['http_code'] === 200){}
            //FIXME: respuesta adecuada
            print_r($this->oauth->getLastResponseInfo());
        }
        function u1_file_get($contentPath,$destinyPath = false){
            if($this->oauth === false){$this->E = array('errorCode'=>99,'errorDescription'=>'NO_OAUTH_DATA');return null;}
            if(substr($contentPath,0,9) != '/content/'){$this->E = array('errorCode'=>1,'errorDescription'=>'NO_CONTENT_PATH');return null;}
            $url = 'https://files.one.ubuntu.com'.$this->helper_encodeURL($contentPath);

            /* I hope nobody ask me about the following concat, never gonna give you up!! */
            $time = time();
            $data = array('oauth_consumer_key'=>$this->auth['consumer_key'],'oauth_nonce'=>$time*rand(0,200),'oauth_signature_method'=>'HMAC-SHA1','oauth_timestamp'=>$time,'oauth_token'=>$this->auth['token'],'oauth_version'=>'1.0');
            $b = '';foreach($data as $k=>$v){$b .= '&'.$k.'='.$v;}
            $b = 'GET&'.rawurlencode($url).'&'.rawurlencode(substr($b,1));

            $key = $this->auth['consumer_secret'].'&'.$this->auth['token_secret'];
            $signature = $this->helper_oauth_hmacsha1($key,$b);

            $data['oauth_signature'] = $signature;
            $a = $url.'?';foreach($data as $k=>$v){$a .= $k.'='.rawurlencode($v).'&';}

            $h = fopen($a,'r');
            if(!$h){
                //FIXME: poner error
                return null;
            }

            //FIXME: is_writable
            //FIXME: file_exists
            $fileName = basename($contentPath);
            $ar = fopen($destinyPath.$fileName,'w');

            //FIXME: comprobar los primeros bits del buffer para asegurarse de que no está fallando
            $buffer = '';while(!feof($h)){$buffer = fgets($h,8192);fwrite($ar,$buffer);}fclose($h);

            fclose($ar);
            $filehash = sha1_file($destinyPath.$fileName);
            //echo "\n".$filehash."\n";

            return array('fileName'=>$fileName,'filePath'=>$destinyPath,'fileHash'=>$filehash);
        }
        function u1_file_unlink($path){
            if($this->oauth === false){$this->E = array('errorCode'=>99,'errorDescription'=>'NO_OAUTH_DATA');return null;}
            $url = 'https://one.ubuntu.com/api/file_storage/v1'.$this->helper_encodeURL($path);
            //FIXME: u1_file_exists

            try{$this->oauth->fetch($url,$blob,OAUTH_HTTP_METHOD_DELETE,array('Content-Type'=>'application/json'));}
            catch(OAuthException $E){print_r($E);$this->E = array('errorCode'=>1,'errorDescription'=>'FILE_NOT_EXISTS');return null;}
            $i = $this->oauth->getLastResponseInfo();
    //FIXME: eliminar el fichero de la caché
            //print_r($i);
        }
        function requestAuthentification($user,$pass,$name){
            $url = 'https://login.ubuntu.com/api/1.0/authentications?ws.op=authenticate&token_name=Ubuntu%20One%20@%20'.rawurlencode($name);
            $data = $this->curlPetition(array('URL'=>$url,'USERPWD'=>$user.':'.$pass));
            //FIXME: check the response header -> 200
            $this->auth = json_decode($data['responseBody'],1);
            if($this->auth === NULL){return false;}
            $this->oauth = new OAuth($this->auth['consumer_key'],$this->auth['consumer_secret'],OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_URI);
            $this->oauth->enableDebug();
            $this->oauth->enableSSLChecks();
            $this->oauth->setToken($this->auth['token'],$this->auth['token_secret']);
            return true;
        }
        function registerToken($user){
    //FIXME: check $this->oauth == false
            $url = 'https://one.ubuntu.com/oauth/sso-finished-so-get-tokens/'.$user;
            $this->oauth->fetch($url);
            $r = $this->oauth->getLastResponse();
            if(substr($r,02) !== 'ok'){
                //FIXME: poner error
            }
            //print_r($this->oauth->getLastResponse());
        }
        function saveAuth($fileName){$ar = fopen($fileName,'w');fwrite($ar,json_encode($this->auth));fclose($ar);return true;}
        function loadAuth($fileName){
            if(!file_exists($fileName)){return false;}
            $this->auth = json_decode(file_get_contents($fileName),1);
            if($this->auth === NULL){return false;}
            return $this->helper_makeOauth();
        }
        function setAuth($auth){$this->auth = $auth;return $this->helper_makeOauth();}
        function helper_makeOauth(){
            $this->oauth = new OAuth($this->auth['consumer_key'],$this->auth['consumer_secret'],OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_URI);
            $this->oauth->enableDebug();
            $this->oauth->enableSSLChecks();
            $this->oauth->setToken($this->auth['token'],$this->auth['token_secret']);
            return true;
        }
        function helper_encodeURL($url){return str_replace('%2F','/',rawurlencode($url));}
        function helper_oauth_hmacsha1($key,$data){
            $blocksize=64;$hashfunc='sha1';
            if(strlen($key)>$blocksize){$key=pack('H*',$hashfunc($key));}
            $key=str_pad($key,$blocksize,chr(0x00));
            $ipad=str_repeat(chr(0x36),$blocksize);
            $opad=str_repeat(chr(0x5c),$blocksize);
            $hmac=pack('H*',$hashfunc(($key^$opad).pack('H*',$hashfunc(($key^$ipad).$data))));
            return base64_encode($hmac);
        }
        function curlPetition($arr,$data = array()){
            //FIXME: data puede ser una propiedad de la clase
            $curl = curl_init($arr['URL']);
            if(!isset($data['URLTRACK'])){$data['URLTRACK'] = array();}
            $data['URLTRACK'][] = $arr['URL'];

            if(isset($this->curl['userAgent'])){curl_setopt($curl,CURLOPT_USERAGENT,$this->curl['userAgent']);}
            if(count($data['URLTRACK']) > 1){curl_setopt($curl,CURLOPT_REFERER,$data['URLTRACK'][count($data['URLTRACK'])-2]);}
            if(isset($arr['USERPWD'])){curl_setopt($curl,CURLOPT_USERPWD,$arr['USERPWD']);}
            if(isset($arr['userAgent'])){curl_setopt($curl,CURLOPT_USERAGENT,$arr['userAgent']);}
            if(isset($arr['POST'])){curl_setopt($curl,CURLOPT_POST,true);curl_setopt($curl,CURLOPT_POSTFIELDS,$arr['POST']);}
            if(isset($arr['referer'])){curl_setopt($curl,CURLOPT_REFERER,$arr['referer']);}
            if(isset($arr['timeout'])){curl_setopt($curl,CURLOPT_TIMEOUT,$arr['timeout']);}
            curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,FALSE);
            curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,2);
            curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
            curl_setopt($curl,CURLOPT_HEADER,true);

            if($this->curl['enableCookies'] !== false ){$cookieSrc = $this->curl['cookieSrc'];curl_setopt($curl,CURLOPT_COOKIEFILE,$cookieSrc);curl_setopt($curl,CURLOPT_COOKIEJAR,$cookieSrc);}
            if(isset($arr['header'])){curl_setopt($curl,CURLOPT_HTTPHEADER,$arr['header']);}
            curl_setopt($curl,CURLOPT_TIMEOUT,25);

            $viewcode = curl_exec($curl);
            $curlInfo = curl_getinfo($curl);
            curl_close($curl);
            if(empty($viewcode)){return false;}
            $data['responseHeader'] = substr($viewcode,0,$curlInfo['header_size']);
            $data['responseBody'] = substr($viewcode,$curlInfo['header_size']);
            //$data['viewcode'] = $viewcode;

            if(isset($arr['FOLLOWLOCATION']) && preg_match('/HTTP\/1\.1 30[12]{1}/',$data['responseHeader'])){
                preg_match('/Location: (.*)/',$data['responseHeader'],$p);
                $nurl = trim($p[1]);
                if($nurl[0]=='/'){list($arr['URL'],) = explode('/',str_replace('http://','',$arr['URL']));$nurl = 'http://'.$arr['URL'].$nurl;}
                $arr['URL'] = $nurl;
                unset($arr['POST']);
                return $this->curlPetition($arr,$data);
            }

            return $data;
        }
    }
2
ответ дан 15 August 2018 в 22:25

Код из одного класса первого шага, чтобы поговорить с ubuntuOne

<?php
class ubuntuOne{
    var $curl = array('cookieSrc'=>'cookie.txt','enableCookies'=>false);
    var $auth = array('consumer_key'=>false,'consumer_secret'=>false,'token'=>false,'token_secret'=>false);
    var $oauth = false;
    function ubuntuOne(){

    }
    function u1_getRoot(){
        if($this->oauth === false){return false;}
        $url = 'https://one.ubuntu.com/api/file_storage/v1';
        $this->oauth->fetch($url);
        print_r($this->oauth->getLastResponse());
    }
    function u1_listFolder($path){
        if($this->oauth === false){return false;}
        //FIXME: parse $path
        $url = 'https://one.ubuntu.com/api/file_storage/v1';
        //FIXME: $path debe terminar en '/'
        $url .= str_replace(' ','%20',$path);

        $this->oauth->fetch($url);
        $lr = $this->oauth->getLastResponse();
        if($lr === '{"error": "not found"}'){return false;}
        print_r($this->oauth->getLastResponse());
    }
    function u1_createFolder($name,$path = ''){
        //FIXME: folder exists?
        $url = 'https://one.ubuntu.com/api/file_storage/v1';
        //FIXME: $path debe terminar en '/'
        $url .= str_replace(' ','%20',$path);
        //FIXME: $name no puede contener '/'
        $url .= str_replace(' ','%20',$name);

        $this->oauth->fetch($url,'{"kind":"directory"}',OAUTH_HTTP_METHOD_PUT);
        print_r($this->oauth->getLastResponse());
    }
    function u1_file_exists($path){
        //FIXME: cache?
        $url = 'https://one.ubuntu.com/api/file_storage/v1';
        $url .= str_replace(' ','%20',$path);

        try{$this->oauth->fetch($url);}
        catch(OAuthException $E){if($E->lastResponse === '{"error": "not found"}'){return false;}}
        $i = $this->oauth->getLastResponseInfo();
        if($i['http_code'] === 200){}
        print_r($this->oauth->getLastResponseInfo());
    }
    function requestAuthentification($user,$pass,$name){
        $url = 'https://login.ubuntu.com/api/1.0/authentications?ws.op=authenticate&token_name=Ubuntu%20One%20@%20'.rawurlencode($name);
        $data = curlPetition(array('URL'=>$url,'USERPWD'=>$user.':'.$pass));
        //FIXME: check the response header -> 200
        $this->auth = json_decode($data['responseBody'],1);
    }
    function registerToken($user){
        $url = 'https://one.ubuntu.com/oauth/sso-finished-so-get-tokens/'.$user;
        $this->oauth->fetch($url);
        $r = $this->oauth->getLastResponse();
        if(substr($r,02) !== 'ok'){
            //FIXME: poner error
        }
        print_r($this->oauth->getLastResponse());
    }
    function saveAuth($fileName){$ar = fopen($fileName,'w');fwrite($ar,json_encode($this->auth));fclose($ar);return true;}
    function loadAuth($fileName){
        if(!file_exists($fileName)){return false;}
        $this->auth = json_decode(file_get_contents($fileName),1);
        if($this->auth === NULL){return false;}
        $this->oauth = new OAuth($this->auth['consumer_key'],$this->auth['consumer_secret'],OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_URI);
        $this->oauth->enableDebug();
        $this->oauth->enableSSLChecks();
        $this->oauth->setToken($this->auth['token'],$this->auth['token_secret']);
        return true;
    }
    function curlPetition($arr,$data = array()){
        $curl = curl_init($arr['URL']);
        if(!isset($data['URLTRACK'])){$data['URLTRACK'] = array();}
        $data['URLTRACK'][] = $arr['URL'];

        if(isset($this->curl['userAgent'])){curl_setopt($curl,CURLOPT_USERAGENT,$this->curl['userAgent']);}
        if(count($data['URLTRACK']) > 1){curl_setopt($curl,CURLOPT_REFERER,$data['URLTRACK'][count($data['URLTRACK'])-2]);}
        if(isset($arr['USERPWD'])){curl_setopt($curl,CURLOPT_USERPWD,$arr['USERPWD']);}
        if(isset($arr['userAgent'])){curl_setopt($curl,CURLOPT_USERAGENT,$arr['userAgent']);}
        if(isset($arr['POST'])){curl_setopt($curl,CURLOPT_POST,true);curl_setopt($curl,CURLOPT_POSTFIELDS,$arr['POST']);}
        if(isset($arr['referer'])){curl_setopt($curl,CURLOPT_REFERER,$arr['referer']);}
        if(isset($arr['timeout'])){curl_setopt($curl,CURLOPT_TIMEOUT,$arr['timeout']);}
        curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,FALSE);
        curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,2);
        curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
        curl_setopt($curl,CURLOPT_HEADER,true);

        if($this->curl['enableCookies'] !== false ){$cookieSrc = $this->curl['cookieSrc'];curl_setopt($curl,CURLOPT_COOKIEFILE,$cookieSrc);curl_setopt($curl,CURLOPT_COOKIEJAR,$cookieSrc);}
        if(isset($arr['header'])){curl_setopt($curl,CURLOPT_HTTPHEADER,$arr['header']);}
        curl_setopt($curl,CURLOPT_TIMEOUT,25);

        $viewcode = curl_exec($curl);
        $curlInfo = curl_getinfo($curl);
        curl_close($curl);
        if(empty($viewcode)){return false;}
        $data['responseHeader'] = substr($viewcode,0,$curlInfo['header_size']);
        $data['responseBody'] = substr($viewcode,$curlInfo['header_size']);
        //$data['viewcode'] = $viewcode;

        if(isset($arr['FOLLOWLOCATION']) && preg_match('/HTTP\/1\.1 30[12]{1}/',$data['responseHeader'])){
            preg_match('/Location: (.*)/',$data['responseHeader'],$p);
            $nurl = trim($p[1]);
            if($nurl[0]=='/'){list($arr['URL'],) = explode('/',str_replace('http://','',$arr['URL']));$nurl = 'http://'.$arr['URL'].$nurl;}
            $arr['URL'] = $nurl;
            unset($arr['POST']);
            return curlPetition($arr,$data);
        }

        return $data;
    }
}
?>

Некоторые примеры вызовов (srry для расстройства и прокомментированный код, возможно, документация в один прекрасный день):

echo time()."\n";
$ub = new ubuntuOne;
/* The first time you made the commented calls, then you save the authorization 
 * to a file. Once you have it on a file, you load it every time from there */
//$ub->requestAuthentification('sombra2eternity@gmail.com','*****','st');
//$ub->registerToken('sombra2eternity@gmail.com');
//print_r($ub->auth);
//$ub->saveAuth($GLOBALS['userPath'].'db/uOne.protected');
$ub->loadAuth($GLOBALS['userPath'].'db/uOne.protected');
//$ub->registerToken('sombra2eternity@gmail.com');
$ub->u1_getRoot();
//$ub->u1_file_exists('/~/Ubuntu One/non_exists/');
echo "\n";
$ub->u1_listFolder('/~/Ubuntu One/');
echo "\n";
$ub->u1_createFolder('new folder','/~/Ubuntu One/');

Удачи, надеюсь, это поможет

2
ответ дан 19 August 2018 в 00:47

Другие вопросы по тегам:

Похожие вопросы: