Просто следите - спасибо, ваши изменения теперь в библиотеке OAuth; Кроме того, теперь есть DLL, которую может скачать каждый.
ружаю фотографии в 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 опубликовать твит для меня.
Есть намеки?
РЕДАКТИРОВАТЬ
Я учусь немного больше здесь.Этот пост в блоге с мая 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-сообщения, которое делает это еще. Кто-нибудь?
ОБНОВИТЬ
После преобразования проверить URL вhttps://api.twitter.com/1/status/update.json
и используя POST для подписи, я получаю код ответа 401:
{"errors":
[{"code":401,
"message":"Could not authenticate you (header rejected by twitter)."}]
}
Это в основном та же проблема, что и описаннаяздесь, на твиттере, В конце этого потока было высказано предположение, что алгоритм вычисления сигнатуры неверен, но я думаю, что это неверно, поскольку мой алгоритм sig работает со всеми другими запросами.