usando TwitPic + OAuth para subir una foto + tweet a Twitter (.NET C #): ¿por qué no tweet?

Estoy subiendo fotos a TwitPic, usandoOAuth, desde una aplicación .NET escrita en C #.

El material de oAuth es un poco complicado. Encontré dos bits de código .NET para manejarlo, pero tampoco estaba satisfecho.DotNetOpenAuth Parecía ser bastante pesado, más de lo que necesitaba. (Solo quiero hacer firmas oAuth y solicitudes de token). losOAuthBase.cs El código me pareció confuso y poco elegante. Tuve que pasar 6 parámetros de cadena a los métodos, y si tengo alguno fuera de servicio, ¡ay de mí!

Así que escribí un código para hacerlo yo mismo, es bastante pequeño y parece funcionar. Funciona para adquirir "tokens de solicitud". Funciona para abrir la página web autorizada y para adquirir "tokens de acceso". También funciona para subir fotos a TwitPic.

Todas las respuestas HTTP vuelven como 200 o 201.

lossubir mensaje HTTP Se ve como esto:

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

El json que recibo de la carga es así:

{"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"}
}

Pero el problema es que, después de cargar la imagen en Twitpic, la imagen está disponible en TwitPic, pero el mensaje asociado nunca aparece en Twitter.

¿Lo que da?

Yo leo enuna publicación de blog al azar que usar TwitPic + oAuth requiere que publique el mensaje de tweet en una transacción HTTP separada, directo a Twitter. eh? Pensé que el propósito del correo de oAuth era permitir a los consumidores hacer cosas en mi nombre, como permitir que TwitPic publique un tweet por mí.

¿Alguna pista?

EDITAR
Estoy aprendiendo un poco más aquí.Esta entrada de blog desde mayo de 2010 me sugiere que usar un valor paraX-Auth-Service-Provider dehttps://api.twitter.com/1/account/verify_credentials.json le dice a TwitPic que llame a "generate_credentials.json" en twitter.com cuando reciba mi solicitud. Si realmente ES solo verificar mis credenciales, esto explicaría por qué no se publica ningún Tweet.

La publicación también sugiere que cambiar eso y reemplazarlo conhttps://api.twitter.com/1/status/update.json debería permítame actualizar Twitter a través de TwitPic con delegación. Pero es una publicación prospectiva: dice que obtener esta capacidad requiere trabajo por parte de Twitter.

No he encontrado un mensaje HTTP de ejemplo que haga esto todavía. ¿Nadie?

ACTUALIZAR
Después de convertir la URL de verificación ahttps://api.twitter.com/1/status/update.json y usando POST para la firma, obtengo un código de respuesta 401:

{"errors":
  [{"code":401,
    "message":"Could not authenticate you (header rejected by twitter)."}]
}

Este es básicamente el mismo problema descritoaquí, en el foro de desarrollo de twitter. La sugerencia al final de ese hilo era que el algoritmo de cálculo de firma está mal, pero creo que es incorrecto, ya que mi algoritmo sig funciona con todas las demás solicitudes.

Respuestas a la pregunta(2)

Su respuesta a la pregunta