DSからtwitterに投稿するには(1)
ツイッタ(twitter)が流行っているので、DSからtwitterに投稿するプログラムを考えてみます。昨日のブログに少し書いたのですが、twitterの投稿するのは、httpプロトコルでPOSTすればいいだけのようです。
twitterの認証
twitterはユーザとパスワードで認証することにより、ログインできます。それでは、DS等のクライアントから自動投稿するにはどうするのかというと、twitterでは、現在、BASIC認証をサポートしています。現在と書いたのは、2010年6月以降はサポートしなくなる予定なのだそうです。とりあえず、今はBASIC認証が使えるので、これを使います。
BASIC認証
BASIC認証はhttpプロトコルを送信するときのヘッダに、Authorizationヘッダを付ければ認証してもらえるようです。書式は下記です。
- Authorization: BASIC "認証コード"
認証コードというのは、IDとパスワードをコロン":"で繋いだものをBase64でエンコードしたものになります。
例えば、ID: momoonga、パスワード: aabbcc だとすると、認証コードは、bW9tb29uZ2E6YWFiYmNj となります。
Base64エンコード
Base64エンコードは、バイナリコードを64個のテキストコード(A〜Z, a〜z, 0〜9, +, / )で表すための変換方法です。簡単に説明すると、バイナリコードの並びをビット列にして、先頭から6ビットずつ取って、64個のテキストコードに変換していきます。変換テーブルは、上のカッコ内の並びの順番そのままです。00000bが'A'で、111111bが'/'になります。データのビット量が6で割り切れないときは、6の倍数となるように0を追加して変換します。
また、変換したコードの長さは4の倍数となる必要があるので、4の倍数にならないときには、'='を追加して4の倍数となるようにします。
下記に自作したBase64エンコードプログラムを書きます。
//************************************************************** // Base64エンコード // sdadta: 変換元データ, dText: 変換後データ, 変換元データサイズ //************************************************************** void eBase64( char *sdata, char *dText, int byte ) { int htbl[64]; int i, j; unsigned char un; int cnum; int bnum; //テーブル作成 for( i=0; i<26; i++ ){ htbl[i] = 0x41+i; htbl[i+26] = 0x61+i; if( i<10 ){ htbl[52+i] = 0x30+i; } } htbl[62] = '+'; htbl[63] = '/'; //エンコード開始 cnum = byte*8 / 6; for( j=0; j<cnum; j++ ){ if( (j%4)==0 ){ dText[j] = (char)htbl[*sdata>>2]; } else if( (j%4)==1 ){ un = *sdata<<4; sdata++; dText[j] = (char)htbl[(un + (*sdata>>4)) & 0x3f]; } else if( (j%4)==2 ){ un = *sdata<<2; sdata++; dText[j] = (char)htbl[(un + (*sdata>>6)) & 0x3f]; } else if( (j%4)==3 ){ dText[j] = (char)htbl[*sdata & 0x3f]; sdata++; } } if( (j%4)!=0 ){ if( (j%4)==1 ){ dText[j] = (char)htbl[(*sdata<<4) & 0x3f]; } else if( (j%4)==2 ){ dText[j] = (char)htbl[(*sdata<<2) & 0x3f]; } else if( (j%4)==3 ){ dText[j] = (char)htbl[*sdata & 0x3f]; } j++; } dText[j] = 0; //4の倍数となるように'='を追加する bnum = 4 - (j%4); if( bnum<4 ){ for( i=0; i<bnum; i++ ){ dText[j+i] = '='; } dText[j+i] = 0; } }
続きは、明日にします。今日はこの辺で・・・。
本当にやりたいことリスト
(ブログの終わりにやりたいことを書いておきたいと思います)
- 求職活動・・・このブログで興味を持った人一声かけてください。m(_ _)m
- Androidプログラム
- Web系のプログラム