He buscado en todo Internet tratando de encontrar un ejemplo simple que pueda orientarme en la dirección correcta, pero no tuve suerte, así que aquí vienen mis preguntas:
Quiero iniciar sesión en Ubuntu One y sincronizar (o casi leer) archivos de mi página web, todo hecho con PHP. Las necesidades para llegar a los archivos se describen en esa página: https://one.ubuntu.com/developer/account_admin/issue_tokens/cloud/
Puedo completar la primera solicitud con:
$url = 'https://login.ubuntu.com/api/1.0/authentications?ws.op=authenticate&token_name=Ubuntu%20One%20@%20try1';
$data = curlPetition(array('URL'=>$url,'USERPWD'=>'user:pass'));
$ar = fopen('uOne','w');fwrite($ar,$data['responseBody']);fclose($ar);
$tokenA = json_decode($data['responseBody'],1);
Ok, curlPetition solo hace peticiones básicas de curl. Tenga en cuenta que necesita un usuario válido: pase ubuntu una cuenta. Recibo la respuesta correctamente en json con "consumer_secret", "token", "consumer_key", "name", "token_secret". Incluso la entrada aparece en la lista de las aplicaciones otorgadas por ubuntu.
He instalado la extensión de php OAuth PCL más nueva y está funcionando bien. pero cuando trato de:
$api_url = 'https://one.ubuntu.com/api/file_storage/v1/';
$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);
$oauth->fetch($api_url.'~/Ubuntu%20One/');
print_r($oauth->getLastResponse());
Me trasladan a la página "Transacción de OpenID en progreso" donde pasas cuando haces un inicio de sesión web manual. Definitivamente estoy haciendo algo mal. Traté de obtener el segundo paso de https://one.ubuntu.com/developer/account_admin/issue_tokens/cloud/ con $ oauth-> fetch, $ oauth-> getAccessToken y $ oauth-> getRequestToken, la misma respuesta en todos con Error 403: S
Estaba tratando de imaginar cómo funciona la carga útil, pero los ejemplos principales están escritos con python, usando "import ubuntuone.couch.auth as auth" que hace que el token sea casi automático.
Me encantaría tener algunas pistas. Gracias
fuente
Respuestas:
Creo que el problema fue que el paso 2 del flujo de trabajo "crear un nuevo token", definido en https://one.ubuntu.com/developer/account_admin/issue_tokens/cloud/ , estaba fallando con un 503 para usted porque el servicio era abajo en un par de puntos este fin de semana. Tendrá que atrapar esta situación y tratarla (un 503 indica que debe volver a intentar la solicitud más tarde, según HTTP estándar).
He probado el siguiente PHP (cuidado: no soy un hacker de PHP, por lo que podría no ser el código más idiomático) y funciona bien para mí. Pasa por tres pasos:
Verá las partes individuales comentadas a continuación. Recuerde que esto solicita y obtiene un token nuevo; una vez que tenga el token (después del paso 2), guárdelo en algún lugar; no solicite uno nuevo cada vez.
fuente
Código de una clase de primer paso para hablar con ubuntuOne
Algunos ejemplos de llamadas (lo siento por el trastorno y el código comentado, tal vez documentación algún día):
Buena suerte, espero que ayude
fuente
Versión actualizada, algunas características agregadas, algunos errores detectados
fuente
¡Guau, Stuart Langridge, eres como una leyenda para mí!
Creo que mañana encontraré un poco de tiempo libre para hackear tu ejemplo y ver qué obtengo. Mientras tanto, desarrollé algunas funciones basadas en Curl para iniciar sesión y saquear la página HTML de UbuntuOne. Intentaré publicarlo aquí tan pronto como lo estabilice un poco.
Sí, escribiré una API basada en PHP casi completa y te notaré, solo dame un poco de tiempo, estoy un poco sobrecargada ahora: S
Me encantaría mostrarte mi trabajo, tal vez algún día superaré mis miedos y postularé para trabajar en Canonical, es como un sueño para mí. Por el momento, he escrito una pequeña reseña para mostrarle mi proyecto actual, estaré encantado de enviarle una copia si le importa. Quiero lanzarlo como software libre, pero soy de los que necesita crear un proyecto web y asegurarme de que sea seguro antes de lanzarlo.
(esto no es ningún tipo de enlace permanente, lo siento) http://marcos.colorvamp.com/mongo/lain-and-ubuntu-one/
Y si revisas la página base ... hmm como se dice en mi tierra. "En la casa del herrero, hay cuchillos de madera" :-)
Gracias por responder :-)
fuente