Adsense_top

2009年7月9日木曜日

C# Twitter API でつぶやいてみた。

今日はTwitter APIを使って、つぶやいて(投稿)みました
今回は、前回と違い認証を行う必要があります。殆どAPIで認証が必要ですので、他のAPIの雛形になる思います。
投稿に使うAPIは「statuses/update」です。


今回も画面がないと淋しいので、前回にと同じく一応画面ありです。


フォームにアカウント名を指定する「userTextBox」とパスワードを指定する「passTextBox」、メッセージを入力する「mesTextBox」()受信したXMLを表示する「resTextBox」、「button1」を配置しました。
「mesTextBox」のMaxLengthは、160文字以内におさめる必要があり、ただし、140文字を超えた部分は表示される保証がないため「140」にします。

using System;
using System.Windows.Forms;
using System.Net;
using System.IO;
using System.Web;

public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private string PostData(string url, string user,
string pass, string mes)
{
// 投稿内容をURLエンコードする。
string encMes = System.Web.HttpUtility.UrlEncode(mes);

HttpWebRequest request =
(HttpWebRequest)HttpWebRequest.Create(url);
request.Method = "POST";
// 認証情報を設定
request.Credentials =
new NetworkCredential(user, pass);
// Content-typeヘッダを設定
request.ContentType =
"application/x-www-form-urlencoded";
// request.UserAgent = "Twitter API Tester"; 無くても大丈夫
request.Timeout = 10000; // 規定値は100,000(100秒)
// Twitterのサーバーが「100-Continue 」ヘッダを
// サポートしていないので、これを設定しないと
// 「417」ステータスコードが返ってくるらしい
System.Net.ServicePointManager.Expect100Continue = false;
// 書き込む
StreamWriter writer =
new StreamWriter(request.GetRequestStream());
writer.Write("status={0}", encMes);
writer.Close();
// 読み込む
WebResponse response = request.GetResponse();
StreamReader reader =
new StreamReader(response.GetResponseStream());
string result = reader.ReadToEnd();
// 後処理
reader.Close();
response.Close();

return result;
}

private void button1_Click(object sender, EventArgs e)
{
const string EXP = "http://twitter.com/statuses/update.xml";
string user = userTextBox.Text;
string pass = passTextBox.Text;
string mes = mesTextBox.Text;
resTextBox.Text = PostData(EXP, user, pass, mes);
}
}

こんな感じです。ユーザー名とパスワードのところは隠しているため、汚らしくてすみません。


前回同様 XMLでの返答を受けますので、「statuses/update」に拡張子「xml」を付加しています。
やり始めたばかりなので、理解する意味もこめて前回同様に出来るだけ簡潔に最小のコードにするように努めました。
また、同一内容の投稿を連続してしようとした場合、最初の投稿以外は無視されますので、同じ内容を続けて投稿動作の可否テストとしは無駄になります。(レスポンス確認としては意味はありますが...)


今回もTwitter APIについては、「観測気球」様のTwitter API 仕様書 (日本語) [最新版]を参考にさせていただきました。


5 件のコメント:

  1. twitterでつぶやく短いコードを探していたら、このサイトに辿り着きました。
    参考にさせていただきました!ありがとうございました。

    返信削除
  2. 久々のコメントが何か嬉しいので、TwitterのAPIを、またやってみようかな。変わっていたり、機能が増えているみたいだし。

    返信削除
  3. 仕事でTwitterについて調べています。
    わかりやすいサンプルありがとうございました。
    参考にさせてもらいました。

    返信削除
  4. 初心者なんで簡単に説明していただけると助かります。記事のコードをそのまま使ったのに『型または名前空間名 'HttpUtility' は名前空間 'System.Web' に存在しません。アセンブリ参照が不足しています。』というエラーがでてしまいます。どうしたらいいですか?

    返信削除
  5.  わかりやすいサンプル感謝です!
     認証が入ってから自作ソフトがうまく動かなくなって困ってました。
     Visual Studio2010を使うとデフォルトが.Net 4.0 clientになるのでSystem.Web名前空間が使えません。
     プロジェクトのプロパティで.Net 4.0に変更してから参照にSystem.Webを追加する必要があります。

    返信削除