Я загружаю фотографии в TwitPic, используя OAuth , из приложения .NET, написанного на C #.
Материал oAuth немного хитрый. Я нашел два бита кода .NET, чтобы справиться с этим, но не был удовлетворен ни тем, ни другим. DotNetOpenAuth казалось довольно тяжелым, больше, чем мне нужно. (Просто хочу сделать oAuth подписи и запросы токенов). Код OAuthBase.cs показался мне запутанным и не элегантным. Я должен был передать 6 строковых параметров в методы, и если я получу какие-либо не в порядке, горе мне.
Итак, я написал некоторый код, чтобы сделать это сам, он довольно маленький и, кажется, работает. Это работает, чтобы приобрести "токены запроса". Он работает, чтобы открыть веб-страницу авторизации и получить «токены доступа». Он также работает для загрузки фотографий в TwitPic.
Все ответы HTTP возвращаются как 200 или 201.
HTTP-сообщение для загрузки выглядит следующим образом:
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, который я получаю после загрузки, выглядит так:
{"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"}
}
Но проблема в том, что после загрузки изображения в Twitpic изображение становится доступным на TwitPic, но соответствующее сообщение никогда не появляется в Twitter.
Что дает?
Я прочитал в случайную запись в блоге , что при использовании TwitPic + oAuth требуется, чтобы я отправил твит-сообщение в отдельной HTTP-транзакции, прямо в Twitter. да? Я думал, что целью oAuth по почте было позволить потребителям делать что-то от моего имени - например, разрешить TwitPic опубликовать твит для меня.
Есть подсказки?
EDIT
Я учусь немного больше здесь. Это сообщение в блоге от мая 2010 г. подсказывает мне, что использование значения для X-Auth-Service-Provider
из https://api.twitter.com/1/account/verify_credentials.json
говорит TwitPic вызывать «verify_credentials.json» на twitter.com при получении моего запроса. Если это действительно просто проверка моих учетных данных, это объясняет, почему не опубликован твит.
В посте также предлагается заменить его на https://api.twitter.com/1/status/update.json
, что должно , чтобы я мог обновить Twitter через TwitPic с делегированием. Но это прогнозная статья, в которой говорится, что получение этой возможности требует работы со стороны Twitter.
Я не нашел пример HTTP-сообщения, которое делает это. Кто-нибудь?
UPDATE
После преобразования проверочного URL-адреса в https://api.twitter.com/1/status/update.json
и использования POST для подписи я получаю код ответа 401:
{"errors":
[{"code":401,
"message":"Could not authenticate you (header rejected by twitter)."}]
}
Это в основном та же проблема, что и описанная здесь, на форуме Twitter dev . В конце этого потока было высказано предположение, что алгоритм вычисления сигнатуры неверен, но я думаю, что это неверно, поскольку мой алгоритм sig работает со всеми другими запросами.