「tC」と命名。OAuthのアプリケーション登録で空いてたから。ただそれだけ。twitterClientってことです。でも「twitter」が含まれる名前には出来ませんでした。
そして、今のところはこんな感じ。

設定画面(OAuthの暗証番号入力する画面)。
OAuthはシグネチャの生成が非常に面倒でした。
as3corelib と as3crypto を使ってHMAC-SHA1とかやりました。たぶん、as3cryptoだけでも出来るんじゃないかな?とか思ったり。
なぜ両方使ったかと言うと、初めにas3corelibを発見し、HMAC-SHA1のダイジェスト値の生成には成功したのですが、戻り値がバイナリのHEXがStringで返ってくるので、それをバイナリにしてbase64encodeしないといけないので、そこでas3cryptoを使ったわけです。ついでにbase64encodeも、こっちのほうが扱いやすかったので、こちらのものを使いました。
で、シグネチャ生成部分のコードはこんな感じ。
// (OAuth)シグネチャ生成
private function oAuthCreateSignature(requestMethod:String, requestUrl:String, param:Array, secret:String="", token:String=""):String
{
param = param.sort();
paramString = "";
param.forEach(createParamString);
paramString = paramString.replace(/&$/g, "");
var signatureHmac:String = Base64.encodeByteArray(Hex.toArray(
HMAC.hash(secret + "&" + token, encodeURIComponent(requestMethod) + "&" + encodeURIComponent(requestUrl) + "&" + encodeURIComponent(paramString), SHA1)
));
return signatureHmac;
}
private function createParamString(element:*, index:int, arr:Array):void {
paramString += element+"&";
}
この関数にMethodとURL、パラメータ、secretを渡してやればいいわけです。
なんか、引数の定義のところでtoken:Stringとか書いてますが、これは私の勘違いですね(汗)。両方ともsecretです。TwitterならConsumer secretと、oauth_token_secretって感じでしょうか。Request token取得時にはoauth_token_secretはいらないですね。Consumer secretは絶対に入るはずなので secret:String=”" とやる必要もないかもしれません。
Arrayで渡されたパラメータをソートして、&でつないでます
// シグネチャ生成
var consumerKey:String = "123aBc456DeF"; // Consumer key
var consumerSecret:String = "ABC987def654"; // Consumer secret
var oAuthToken:String = "ABC987def654"; // OAuth token
var oAuthTokenSecret:String = "ABC987def654"; // OAuth token secret
var unixTime:String = (Math.floor(new Date().getTime()/1000)).toString();
var nonce:String = MD5.hash(MD5.hash(unixTime) + MD5.hash((Math.floor(Math.random()*4096)+1).toString()));
var param:Array = new Array();
param.push("oauth_consumer_key="+consumerKey);
param.push("oauth_nonce="+nonce);
param.push("oauth_signature_method=HMAC-SHA1");
param.push("oauth_timestamp="+unixTime);
param.push("oauth_token="+oAuthToken);
param.push("oauth_version=1.0");
var signatureHmac:String = oAuthCreateSignature(METHOD, URL, param, consumerSecret, oAuthTokenSecret);
どっかから関数をこんな感じで呼び出してやればOKです。Nonce(一意の文字列)は乱数と時間でMD5でHash化して適当に生成してます。
HTTP Request時のパラメータが増える場合は param.push() してやればOKです。関数側でソートしているので、pushする順番はあまり気にしなくてもOKです。
シグネチャを生成した後もいろいろ苦労しました。が、いろいろやっているうちにできたので、よしとします(笑)。
意見やわからないことなどがありましたら、コメント or メールで。




(4.50 / 5)