2010-05-09 4 views
2

C'est une question assez simple, mais je ne suis pas tout à fait clair comment faire cela. J'essaie d'utiliser un service tiers qui a un service basé sur le Web. Le service s'appelle Postful. Mais je ne sais pas exactement quoi faire? J'ai examiné ActiveResource (http://api.rubyonrails.org/classes/ActiveResource/Base.html) et rest-client, mais je ne suis toujours pas clair exactement ce que les étapes, le code et les fichiers à créer. J'essaie d'utiliser Nestful mais je ne suis pas tout à fait clair sur la façon de faire ce travail. http://github.com/maccman/nestfulComment POST/GET de rails à API avec Nestful?

http://www.postful.com/service/mail est l'un des services (détails trouvés http://www.postful.com/developer/guide#rest), mais pour télécharger une image que je dois afficher les éléments suivants (mais je ne sais pas comment je fait cela?). Merci!

> http://www.postful.com/service/upload 
> 
> Be sure to include the Content-Type 
> and Content-Length headers and the 
> image itself as the body of the 
> request. 
> 
> POST /upload HTTP/1.0 Content-Type: 
> application/octet-stream 
> Content-Length: 301456 
> 
> ... file content here ... 
> 
> If the upload is successful, you will 
> receive a response like the following: 
> 
> <?xml version="1.0" encoding="UTF-8"?> 
> <upload> 
> <id>290797321.waltershandy.2</id> 
> </upload> 
+0

Avez-vous été en mesure de déterminer si elles ont une interface RESTful pour le téléchargement de fichiers? – nfm

+0

Je ne pense pas - la seule interface est celle décrite ci-dessus .... :( – Angela

Répondre

1

est vraiment facile nichée, vous devriez être en mesure de faire ceci:

Nestful.post 'http://www.postful.com/service/upload', :format => :multipart, :user => 'foo', :password => 'bar', :params => {:file => File.open('YOUR_FILE')} 
1

J'ai eu un oeil à leur API et il ne semble pas comme ajout de fixation est RESTful - il semble que seule la création de correspondance est. Donc, ActiveResource ne fera pas l'affaire ici. En fonction de votre environnement de développement/production, vous pouvez envisager d'utiliser quelque chose de plus générique comme curl.

A partir du manuel: curl est un outil pour transférer des données depuis ou vers un serveur ... La commande est conçue pour fonctionner sans interaction de l'utilisateur.

Vous voulez quelque chose comme ceci:

# Encode your username:password as base64 
USERNAME="[email protected]" 
PASSWORD="yourpostfulpassword" 
BASE64_ENCODED_AUTH = `echo $USERNAME:PASSWORD | base64` 

curl -F "@path/to/file/to/upload;type=application/octet-stream" http://[email protected]/service/upload 

Je ne l'ai pas testé ce que je n'ai pas un nom d'utilisateur/mot de passe - mais vous devriez obtenir sur la bonne voie.

Vous pouvez mettre ceci dans un script en /lib et l'appeler à partir de votre contrôleur en utilisant votre méthode préférée.

Edit:

donc j'ai essayé cela avec un nom d'utilisateur et mot de passe factice, et en utilisant le drapeau --verbose-curl, et les en-têtes regardé à droite. J'ai également obtenu une réponse 401 UNAUTHORISED, donc il semble que cela fonctionne correctement.

+0

Avez-vous utilisé Nestful, il ressemble à un moyen d'interactivité avec HTTP et API REST .... – Angela

+0

Je n'ai pas Après un bref coup d'œil à Nestful, vous aurez l'impression d'appeler Nestful.post url, options = {} '(à moins que postful * n'ait * le téléchargement d'une pièce jointe RESTful) Cela équivaudra à utiliser 'curl', sauf que vous l'écrivez en Ruby plutôt que bash. – nfm