2012-04-18 6 views
2

Tumblr APIを使用するiOSアプリケーションでOAuthConsumerを使用しています。一般的にAPI呼び出しをうまく動かす。しかし、私はあらゆるメディアのアップロードに苦労しています。私の要求のすべてのパラメータがintまたは文字列である場合、私はそれらを次のように追加します:iOS用のOAuthConsumerを使用してtumblrに画像をアップロードする

明らかに、画像。 application/x-www-form-urlencodedの代わりにこのデータをmultipart/form-dataとして送信しなければならないことがわかったため、oAuth署名には影響しません。しかし、私が知る限り、OAuthConsumerはx-www-form-urlencoded(関連するコードはNSMutableURLRequest+Parameters.mにあります)だけをサポートしています。しかし、これが正しいかどうかは分かりませんが、もしそうなら、実際にConsumerを正しく修正する方法がわかりません。どんな助けもありがとう!

答えて

8

わかりました。これにはいくつかの部分があり、他の人が同様の質問をしているのを見てから、私は全長になるでしょう:

まず、OAuthConsumerの古いバージョンを使用していました。 linked on Google Codeのバージョンを使用する代わりに、より新しいバージョンのfrom githubを使用する必要があります。これには、複数の文字列を含むマルチパートフォームを送信する手段が含まれているためです。

//Setup the request... 
[request setParameters:params];  
[request attachFileWithName:@"data" filename:@"photo.jpg" contentType:@"image/jpeg" data:dataProp.data]; 
//Setup the fetcher and send the request... 

これは、すべての他の変数を入れ、唯一oauth_... - 変数を含んでいるのOAuth署名を生成します:私は完全に間違っていないよ場合

さて、あなたは理論的に今やるべきことは以下のとおりです。マルチパート形式に変換します。これはどのようにしなければならないのかであり、文書によれば、あなたはうまくいくはずです。残念ながら、あなたはそうではありません、tumblrは401エラーを返します。ここで

は、あなたが本当に何をすべきかです:

//Setup the request... 
[request setParameters:params]; 
[request prepare]; //Whaaaat? 
[request attachFileWithName:@"data" filename:@"photo.jpg" contentType:@"image/jpeg" data:dataProp.data]; 
//Setup the fetcher, make sure "prepare" isn't called again, send the request... 

これは動作します...繰り返しますが、私はこれはOAuthのは、これを処理することになっているかではないことをかなり確信しているが、少なくとも、それが動作します。

+2

私はこれ以上投票することができればいいと思っています... – coneybeare

+0

私のための鍵は、 "確かめてください"という準備が "もう一度呼ばれない"ことでした。 – Alex

+0

素晴らしい!これは、Mac OS Xを使ってEtsy APIにアクセスする私の仕事でした。 –

1

TumblrのOAuthの実装はかなり奇妙です。私はなぜそれが認証とブログの要求(see here)のためにOKであることが分かった。私が知っているように、Tumblrは新しいOAuthライブラリ(this one)でうまく動作します。私は自分の無意識のうちに、古いOAuthでShareKitとの互換性のためにすべての作業をしようとしていました。 解決策は、ASIFormDataRequestを使用し、OAuth認証情報(originally found here)で署名することを提案しました。はい、それは草のヘビでヘッジホッグを交雑しようとしているように見えますが、何とかそれは単一のイメージのために働きます。しかし、このコードを修正した後、私は複数の画像をアップロードすることができませんでした。 もう1つの解決策は"TumblrUploadr"ですが、それはあまりにも生のように見えます。

関連する問題