Je télécharge des photos sur TwitPic, en utilisant OAuth, à partir d'une application .NET écrite en C#.en utilisant TwitPic + OAuth pour télécharger une photo + tweet sur Twitter (.NET C#) - pourquoi pas de tweet?
Le truc oAuth est un peu compliqué. J'ai trouvé deux bits de code. NET pour le gérer, mais je n'étais pas satisfait non plus. DotNetOpenAuth semblait être assez lourd, plus que nécessaire. (Je veux juste faire des signatures oAuth et des demandes de jetons). Le code OAuthBase.cs semblait confus et inélégant pour moi. Je devais passer 6 paramètres de chaîne à des méthodes, et si je devais en déranger, malheur à moi.
J'ai donc écrit du code pour le faire moi-même, c'est assez petit et ça semble fonctionner. Cela fonctionne pour acquérir des "jetons de requête". Il fonctionne pour ouvrir la page Web d'autorisation et pour acquérir des «jetons d'accès». Il fonctionne également pour télécharger des photos sur TwitPic.
Toutes les réponses HTTP reviennent 200 ou 201.
Le upload HTTP message ressemble à ceci:
POST http://api.twitpic.com/2/upload.json HTTP/1.1
Content-Type: multipart/form-data; boundary=48cb9a6d-1f1d-432d-b6e3-307e32e8228a
X-Auth-Service-Provider: https://api.twitter.com/1/account/verify_credentials.json
X-Verify-Credentials-Authorization: OAuth realm="http://api.twitter.com/",
oauth_consumer_key="Dv1er93yKzEMn74hZfPmJA",
oauth_nonce="51fi305k",
oauth_signature="4oWcmZcd%2F%2F81JslJ70xFXFm8%2BQs%3D",
oauth_signature_method="HMAC-SHA1",
oauth_timestamp="1292277715",
oauth_token="59152613-z8EP4GoYS1Mgo3E29JfIqBnyTRlruAJs8Bkvs3q0T",
oauth_version="1.0"
Host: api.twitpic.com
Content-Length: 14605
Expect: 100-continue
Connection: Keep-Alive
--48cb9a6d-1f1d-432d-b6e3-307e32e8228a
Content-Disposition: file; name="media"; filename="CropperCapture[10].jpg"
Content-Type: image/jpeg
....
--48cb9a6d-1f1d-432d-b6e3-307e32e8228a
Content-Disposition: form-data; name="key"
twitpic-api-key-here
--48cb9a6d-1f1d-432d-b6e3-307e32e8228a
Content-Disposition: form-data; name="message"
uploaded from Yappy. (at 12/13/2010 5:01:55 PM)
--48cb9a6d-1f1d-432d-b6e3-307e32e8228a--
JSON Je reviens du téléchargement est comme ceci:
{"id":"3f0jeiw5",
"text":"uploaded from Yappy. (at 12\/13\/2010 5:01:55 PM)",
"url":"http:\\/twitpic.com\/3f0jeiw5",
"width":257,
"height":184,
"size":14156,
"type":"jpg",
"timestamp":"Mon, 13 Dec 2010 22:02:06 +0000",
"user":{
"id":54591561,"screen_name":"bfavre"}
}
Mais le problème est, après avoir téléchargé l'image sur Twitpic, l'image est disponible sur TwitPic, mais le message associé n'apparaît jamais sur Twitter.
Ce qui donne?
J'ai lu dans a random blog post que l'utilisation de TwitPic + oAuth nécessite que je publie le message tweet dans une transaction HTTP séparée, directement sur Twitter. Hein? Je pensais que le but du courrier d'oAuth était de permettre aux consommateurs de faire des choses en mon nom - comme permettre à TwitPic de publier un tweet pour moi.
Des indices?
EDIT
J'apprends un peu plus ici. This blog post à partir de mai 2010 me suggère que l'utilisation d'une valeur pour X-Auth-Service-Provider
de https://api.twitter.com/1/account/verify_credentials.json
dit à TwitPic d'appeler "verify_credentials.json" sur twitter.com quand il obtient ma demande. Si c'est vraiment juste vérifier mes informations d'identification, cela expliquerait pourquoi aucun Tweet n'est publié. Le poste suggère également que l'échange de cela et de le remplacer par https://api.twitter.com/1/status/update.json
devrait me permettre de mettre à jour Twitter via TwitPic avec délégation. Mais c'est un post tourné vers l'avenir - il dit que pour obtenir cette capacité, il faut travailler sur Twitter.
Je n'ai pas trouvé d'exemple de message HTTP qui le fait encore. N'importe qui?
MISE À JOUR
Après conversion de la vérification URL à https://api.twitter.com/1/status/update.json
et en utilisant POST pour la signature, je reçois un code de réponse 401:
{"errors":
[{"code":401,
"message":"Could not authenticate you (header rejected by twitter)."}]
}
Ceci est essentiellement le même problème que décrit here, in the twitter dev forum.La suggestion à la fin de ce thread était que l'algorithme de calcul de signature est faux, mais je pense que c'est incorrect, car mon algorithme sig fonctionne avec toutes les autres demandes.
FYI - J'aime votre bibliothèque OAuth simple. J'ai fait une solution rapide pour gérer les caractères étendus, et l'ai posté ici: http://cropperplugins.codeplex.com/discussions/249415 – russau
Juste après - merci, vos changements sont maintenant dans la bibliothèque OAuth; aussi, il y a une DLL maintenant, que n'importe qui peut télécharger. – Cheeso