liboauthというライブラリがあるらしいが、そういうのを使わずにやらなイカ。
https://dev.twitter.com/docs/api
OAuth Core 1.0
準備(ここが難所)
HTTPクライアント
winsockプログラミング:Geekなぺーじ
ここのHTTPクライアントの作成というところを見て(コピペして)、
HTTP/1.1で好きなページのHTMLをゲットできるようにしておく。
ちなみに、C#ならWebRequestクラスというのがある。
署名の生成
文字列と暗号鍵から署名を生成できるようにする。
汝の隣人のブログを愛せよ | LOVELOG
このようにすればWindowsのAPIだけで可能。
ちなみにC#ならHMACSHA1クラスというのがあって簡単。
UNIX time
1970年1月1日から何秒経過したのかを知る必要がある。
SYSTEMTIME st = {1970, 1, 4, 1, 0, 0, 0, 0}; のように初期化して、
GetSystemTime(GetLocalTimeではなく)で得た時刻との差をとればいい。
C#では、DateTimeクラスで同様のことが(少ない行数で)できる。
BASE64
CryptBinaryToStringAでCRYPT_STRING_BASE64を指定すればいい。
ただし、最後に付加される改行を含めないように注意すること。
C#なら、ConvertクラスのToBase64Stringメソッドを使えばいい。
実際に作ってみる
アプリケーションの登録
http://lab.klab.org/young/2010/06/%E3%81%A8%E3%81%82%E3%82%8Boauth%E3%81%AEtwitter%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88/
Twitterのホームから、設定、連携アプリ、開発者の方へ、と辿り、
http://twitter.com/apps/newにアクセスし、必要事項を埋める。
このとき、クライアントアプリケーション・Read & Writeを選択するでゲソ。
認証
http://watcher.moe-nifty.com/memo/docs/twitterAPI.txt
これのOAuth関連の項にあるように、認証をする。
一文字でも間違えると認証されないので、仕様通りにやるでゲソ。
http://developer.yahoo.co.jp/other/oauth/signinrequest.html
ここの説明がわかりやすい。
アプリケーションのConsumer keyとConsumer secretによって、
ユーザーにアクセス許可を求めるためのURLが得られ、
Twitterにログインした状態のユーザーがそこにアクセスすることで、
ユーザーがアプリケーションにアクセス許可を与えることができる。
それも、ユーザーがアプリケーションにパスワードを教えずに。
つぶやく
こうして得られたTokenとToken secretを使えば、Twitterでつぶやくことができる。
具体的には、次のように送信する(アクセストークンなどはXXXXで伏字にした)。
POST http://api.twitter.com/1/statuses/update.xml?oauth_consumer_key=XXXX&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1291280948&oauth_token=XXXX&oauth_version=1.0&status=%XX%XX%XX&oauth_signature=XXXX HTTP/1.1 Host: api.twitter.com
(追記)XML
つぶやくだけなら関係ないが、取得したデータを表示するにはXMLを扱う必要がある。
VC++ならXmlLiteのIXmlReader、C#ならXmlReader Class (System.Xml) | Microsoft Docsが使える。
サンプルは、XmlLite プログラミング、http://wawatete.ddo.jp/exec/program/cs/xml_xmlreader1。
(追記)認証の具体例
Consumer key:AAAA
Consumer secret:BBBB
"BBBB&"をkeyとして署名DDDDを生成。
POST http://api.twitter.com/oauth/request_token?oauth_consumer_key=AAAA&oauth_nonce=CCCC&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1312714856&oauth_version=1.0&oauth_signature=DDDD HTTP/1.1 Host: api.twitter.com
成功すると下のようなデータが得られる。
oauth_token=EEEE&oauth_token_secret=FFFF&oauth_callback_confirmed=true
oauth_tokenを使って次のURLにアクセスする(ShellExecuteなどを使う)。
http://api.twitter.com/oauth/authorize?oauth_token=EEEE
GGGGというPINが表示される。それを入力してもらう。
"BBBB&FFFF"をkeyとして署名IIIIを生成。
POST http://api.twitter.com/oauth/access_token?oauth_consumer_key=AAAA&oauth_nonce=HHHH&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1312714868&oauth_token=EEEE&oauth_verifier=GGGG&oauth_version=1.0&oauth_signature=IIII HTTP/1.1 Host: api.twitter.com
成功すると下のようなデータが得られる。
oauth_token=JJJJ&oauth_token_secret=KKKK&user_id=72810881&screen_name=merom686
これで準備完了。さっそく「てすと」とつぶやいてみる。
"BBBB&KKKK"をkeyとして署名LLLLを生成。
POST http://api.twitter.com/1/statuses/update.xml?oauth_consumer_key=AAAA&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1312722001&oauth_token=JJJJ&oauth_version=1.0&status=%E3%81%A6%E3%81%99%E3%81%A8&oauth_signature=LLLL HTTP/1.1 Host: api.twitter.com