Twitter APIについて
Twitterは140文字以内のつぶやきを投稿しあうことでタイムラインという時系列な呟きリストを形成するコミュニケーションツールです。
Twitterは短い文章しか打てないため気軽に発言できるのも特徴と言われていますが、タイムラインも同じくらい重要な特徴です。
Twitterにおける呟きは「自分の呟き」「自分がフォローしている人の呟き」「自分宛ての呟き」「その他の人の呟く」に大別できますが、通常はこの中から「自分の呟き」「自分がフォローしている人の呟き」「自分宛ての呟き」の3つを自分のタイムラインに表示するように設定しておきます。
※フォローしていない人からの自分宛ての呟きは表示されない事があります。
Twitterを使う場合、公式サイトである http://Twitter.com/ より表示や更新を行うのが基本的な使い方です。
しかし、公式サイトはhtmlですので独自のクライアントなどを作る場合には処理しやすいデータ形式とは言えません。そのため、XML形式のようなデータ処理しやすいデータ形式でやりとりできるTwitter-APIと呼ばれるインターフェースも存在します。
タイムラインを表示する
タイムラインを表示するにはHTTP-GETを使用しますが、HTTP-GETは60分間に70回までと回数制限がかけられています。ですので、あまり頻繁にクロールするようにすると取得に失敗する時間帯ができてしまうので注意が必要です。
この回数制限はTwitter-API利用時だけの制限ですので公式サイトを使っていれば適用されません。
タイムラインの取得フォーマットは何種類かありますが、VB2008を使っているのならば、LINQ to XMLで構造体配列にXML形式のタイムラインを設定するのも比較的簡単ですので、タイムラインはXMLで取得するのが良いでしょう。
XMLで取得したい場合は、htt@://Twitter.com/statuses/friends_timeline.xmlに対してHTTP-GETを行います。そうすれば、レスポンスとして20行分のタイムラインがXML形式で取得できます。
Public Class TwitterTimeline
Implements System.IDisposable
''' <summary>
''' 取得リスト定義
''' </summary>
''' <remarks></remarks>
Public Class TStatus
Public ID As Integer
Public ScreenName As String
Public Text As String
End Class
''' <summary>
''' Friends_timelineの最新20個を取得します。
''' </summary>
''' <returns>IList(Of TStatus)</returns>
''' <remarks>userAccontにIDとパスワードが設定されていること</remarks>
Public Function GetFriendsTimeLineList() As IList(Of TStatus)
Const url As String = "http://Twitter.com/statuses/friends_timeline.xml"
Dim client As New System.Net.WebClient
client.Credentials = New System.Net.NetworkCredential(_userAccount.UserID, _userAccount.Password)
client.Encoding = System.Text.Encoding.UTF8
Dim xml As System.Xml.Linq.XElement = XElement.Parse(client.DownloadString(url))
Dim res = From status In Xml.Descendants("status") _
Order By status.Element("id").Value Descending _
Select New TStatus With { _
.ID = CType(status.Element("id").Value, Integer), _
.ScreenName = status.Element("user").Descendants("screen_name").Value, _
.Text = status.Element("text").Value}
Return res.ToList()
End Function
End Class
- Twitter-APIを使用するにはBASIC認証が必要なので、NetworkCredentialを使ってBASIC認証用の情報をWebClientオブジェクトに設定します。
- コード系としてUTF8を設定します。
- DownloadString("http://Twitter.com/statuses/friends_timeline.xml")によりXMLを取得します。
- LINQ to XMLを使って、XMLよりID、名前、本文を取得します。
発言する
Twitterでは発言する事を「ステータスを更新する」と表記する事が多いようです。発言はHTTP-POSTを使用しますので、HTTP-GETの回数制限がかかった状態でも発言はできます。しかし、それに対する返信もできないので回数制限中は一方的に呟く事になります。
Twitter-APIを使った発言はURLパラメタに発言内容を設定して行います。例えば、http://Twitter/com/statuses/update.xml?status=test とすれば、「test」とつぶやく事になります。
Public Class TwitterTimeline
Implements System.IDisposable
''' <summary>
''' 取得リスト定義
''' </summary>
''' <remarks></remarks>
Public Class TStatus
Public ID As Integer
Public ScreenName As String
Public Text As String
End Class
''' <summary>
''' 発言を行います。
''' </summary>
''' <param name="message">発言</param>
''' <returns>IList(Of TStatus)</returns>
''' <remarks>userAccontにIDとパスワードが設定されていること</remarks>
Public Function SetUpdate(ByVal message As String) As IList(Of TStatus)
Const url As String = "http://Twitter.com/statuses/update.xml"
Dim client As New System.Net.WebClient
client.Credentials = New System.Net.NetworkCredential(_userAccount.UserID, _userAccount.Password)
Dim byt As Byte() = client.UploadData(url & "?status=" & System.Web.HttpUtility.UrlEncode(message), _
"POST", _
System.Text.Encoding.Default.GetBytes(""))
Dim xml As System.Xml.Linq.XElement = XElement.Parse(System.Text.Encoding.UTF8.GetString(byt))
Dim res = From status In xml.Descendants("status") _
Order By status.Element("id").Value Descending _
Select New TStatus With { _
.ID = CType(status.Element("id").Value, Integer), _
.ScreenName = status.Element("user").Descendants("screen_name").Value, _
.Text = status.Element("text").Value}
Return res.ToList()
End Function
End Class
- Twitter-APIを使用するにはBASIC認証が必要なので、NetworkCredentialを使ってBASIC認証用の情報をWebClientオブジェクトに設定します。
- UploadDataを使ってURLエンコードした発言をPOSTします。
- 発言した結果をXMLで取得します。
- LINQ to XMLを使って、XMLよりID、名前、本文を取得します。