twitter.c ー ①ー1

twitterAPI利用プログラム作成に向けて。

 

① httpメッセージの作成

② tcpでtwitterAPI提供サーバにつなぎ、(https用ポート)sslコネクションも作る

③ リクエストの送信

④ RestAPIではメッセージを全て受信し、解析

  StreamingAPIではメッセージを随時読み込み、解析

 

①ー1 oauth_nonce を作る

①ー2 oauth_timestamp を作る

①ー3 oauth_signature を作る(一番大変)

①ー4 ちょちょいのちょいでできる

 


なお、全て説明したら全体のソースコードも掲載する予定です。

今回はまず①ー1を説明したいのですが、その前にいくつかプログラムを作らねばなりません。
というのも、①ー1は、

(ⅰ)32バイトのランダムなバイト列を作成
(ⅱ)それをbase64エンコード
(ⅲ)そこから英数字以外を除く

という作業で作れるのですが、
(ⅰ)は以前書いたrandom.cを用いて、
(ⅱ)は次に書くbase64.cを用いたいからです。

・・・

ということで準備出来ましたでしょうか。 二つの.cファイルをincludeしておけば、以下のプログラムで作成完了です。
// make nonce(random sequence)
char *twi_mk_nonce(){
   printf("[make oauth_nonce]\n");
   unsigned char rn[32];
   int k;
   for(k = 0; k < 32; ++k) rn[k] = rnd_int(0, 255);
   printf("random 32Byte : ");
   for(k = 0; k < 32; ++k) printf("%s%02X ", (k == 16) ? "\n                " : "", rn[k]);
   char *en = b64_encode((char *)rn, 32);
   printf("\nbase64 encode : %s\n", en);
   char *nonce = (char *)malloc(sizeof(char) * (strlen(en) + 1));
   int kn = 0;
   for(k = 0; k < strlen(en); ++k) if(en[k] != '+' && en[k] != '/' && en[k] != '=') nonce[kn++] = en[k];
   nonce[kn++] = '\0';
   printf("strip         : %s\n", nonce);
   return nonce;
}


注釈全くなかったですね。ごめんなさい笑

詳しく説明すると、
32バイトのバイト列を作成し、
エンコードし、
返すために十分なバイトを確保し、
+,/,=以外をそこにコピーし、
返すだけです!十分詳しいやね(`・ω・´)

適当にこの関数を使って実行すると下のような出力が得られると思います。
[make oauth_nonce]
myrand: initialization complete!
random 32Byte : 36 2D 66 9E A8 10 BE BB AA E2 A3 D5 DB CD CF E7 
                7A 2D 22 99 D3 27 ED BD 53 39 C3 D0 B9 10 8B EF 
base64 encode : Ni1mnqgQvruq4qPV283P53otIpnTJ+29UznD0LkQi+8=
strip         : Ni1mnqgQvruq4qPV283P53otIpnTJ29UznD0LkQi8