C#|TwitterのAPIを叩くライブラリを作ってみた

 Twitter始めました。Twitterの先輩がいましたら是非是非followして下さい。

http://twitter.com/anis774

 TwitterはWebAPIを公開しているとのことで、それを利用したクライアントも多数あります。その中でもJavaで実装されたPeraPeraPrvが気に入ったので導入しました。

 でもやっぱり、サンデーヘボグラマなら自分で作ってみたくなりますよね。さらに楽して作りたいとも思う筈です。面倒なことはしたくないですよね。

 そこでライブラリを探したところ、

http://devblog.yedda.com/index.php/twitter-c-library/

こんなのを見付けました。なんだ英語じゃないですか。英語怖いよ、英語怖い。でも恐る恐るDLしてソースを読んでみると、読めるじゃないですか。英語は読めないけどC#は読めるって当たり前の話でした。短いソースコードだったのでさらっと読んで…捨てました。オプションの引数の指定とか全く出来ないんですもん。サンプルとしては参考になるのでしょうけど、そのまま実用にはなりませんね。実はサンプルなのかも知れませんが…、英語読めないから分かりません。

 やはり自分で書くしかないと…。書きました。ここを参考にしました。

http://watcher.moe-nifty.com/memo/docs/twitterAPI13.txt

 ここの『ステータス関連のAPI』の実装が出来たので、実際に動くサンプルのビューアと、コマンド形式のランチャから呼び出して使える投稿プログラムを書いて見ました。

 疲れたのでひとまず公開します。何の反響も無ければこれで終わりにします。反響があれば少しだけやる気が出るかも。むしろ誰かが完成させて公開してくれると嬉しいかも。そう言う意味で、恥ずかしいけどソース付きです。

 煮るなり焼くなり好きにして下さい。

TwitterClient.zip

VB.NET|任意のタイミングでキーボードの状態を取得

 フレームごとに計算をするゲームのプログラムなんかだと、イベント発生時以外にキーボードの状態を取得したいと思うでしょう。

 そこで通常ならDirectInputを使うのでしょうが、あえて使わないで解決してみようと書いたコードがこれ。今回はVB2005です。

Imports System.Windows.Forms

Module KeysState

    Dim keysState As New Dictionary(Of Keys, List(Of Boolean))

    ''' <summary>
    ''' 毎フレーム呼び出す
    ''' </summary>
    Public Sub UpDate()
        For Each key As Keys In keysState.Keys
            keysState(key).RemoveAt(1)
            keysState(key).Add(keysState(key)(0))
        Next
    End Sub

    ''' <summary>
    ''' キーが押し始められたかを取得
    ''' </summary>
    ''' <param name="key">押し始められたかどうかを取得するキー</param>
    ''' <returns>押し始められていたらTrue、押し始められていなければFalse</returns>
    Public Function IsPush(ByVal key As Keys) As Boolean
        Return keysState.ContainsKey(key) AndAlso Not keysState(key)(1) AndAlso keysState(key)(2)
    End Function

    ''' <summary>
    ''' キーが押されているか取得
    ''' </summary>
    ''' <param name="key">押されているかどうかを取得するキー</param>
    ''' <returns>押されていたらTrue、押されていなければFalse</returns>
    Public Function IsPress(ByVal key As Keys) As Boolean
        Return keysState(key)(0)
    End Function

    ''' <summary>
    ''' キーが離されたかを取得
    ''' </summary>
    ''' <param name="key">離されたかどうかを取得するキー</param>
    ''' <returns>離されたらTrue、離されていなければFalse</returns>
    Public Function IsUp(ByVal key As Keys) As Boolean
        Return keysState.ContainsKey(key) AndAlso keysState(key)(1) AndAlso Not keysState(key)(2)
    End Function

    ''' <summary>
    ''' 対象のコントロールのKeyDownイベントハンドラに追加する
    ''' </summary>
    Public Sub KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs)
        If keysState.ContainsKey(e.KeyCode) Then
            keysState(e.KeyCode)(0) = True
        Else
            keysState.Add(e.KeyCode, New List(Of Boolean)(New Boolean() {True, False, False}))
        End If
    End Sub

    ''' <summary>
    ''' 対象のコントロールのKeyUpイベントハンドラに追加する
    ''' </summary>
    Public Sub KeyUp(ByVal sender As Object, ByVal e As KeyEventArgs)
        If keysState.ContainsKey(e.KeyCode) Then
            keysState(e.KeyCode)(0) = False
        Else
            keysState.Add(e.KeyCode, New List(Of Boolean)(New Boolean() {False, False, False}))
        End If
    End Sub
End Module