SkyDrive へ移動( Form 用 )VS2012 になると、使うクラスや非同期の扱いがかなり変わって来ます。一般的に使用する場合は、ユーザ毎にログインしてもらって専用のアクセストークンを取得してもらうので、WebBrowser コントロールを利用するのが簡単だと思います。(専用のCallback URL も必要になります) ですが、とりあえず API をテストするのならば自分のアプリのトークンをそのまま使うと簡単です。 VS2010_Twitter.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Security.Cryptography; using System.Net; using System.Diagnostics; namespace LBOX_Tool { class VS2010_Twitter { private string _consumer_key; private string _consumer_secret; private string _token; private string _secret; private string _tweet_api = "https://api.twitter.com/1.1/statuses/update.json"; public VS2010_Twitter ( string consumer_key, string consumer_secret, string token, string secret ) { _consumer_key = consumer_key; _consumer_secret = consumer_secret; _token = token; _secret = secret; } public void Tweet(string text,UploadStringCompletedEventHandler newEvent=null) { WebClient wc = new WebClient(); if (newEvent != null) { wc.UploadStringCompleted += newEvent; } // ソートされるリスト SortedList<string, string> sl = new SortedList<string, string>(); sl.Add("oauth_consumer_key", _consumer_key); sl.Add("oauth_nonce", Nonce()); sl.Add("oauth_signature_method", "HMAC-SHA1"); sl.Add("oauth_timestamp", TimeStamp()); sl.Add("oauth_token", _token); sl.Add("oauth_version", "1.0"); sl.Add("status", Uri.EscapeDataString(text)); // http ヘッダ用シグネチャ作成 string work = ""; foreach (KeyValuePair<string, string> kvp in sl) { if (work != "") { work += "&"; } work += kvp.Key + "=" + kvp.Value; } string work2 = ""; // メソッド work2 += "POST" + "&"; // API URL work2 += Uri.EscapeDataString(_tweet_api) + "&"; // Oauth + データ work2 += Uri.EscapeDataString(work); // OAuth tool チェック用 Debug.WriteLine(work2); string oauth_signature = Signature(work2); // ヘッダ情報を作成 work = ""; foreach (KeyValuePair<string, string> kvp in sl) { // oauth_* のみを使用する if (work != "") { if (kvp.Key.Substring(0, 6) == "oauth_") { work += ", "; } } if (kvp.Key.Substring(0, 6) == "oauth_") { work += kvp.Key + "=" + Dd(kvp.Value); } } // シグネチャを追加( ヘッダーはソートの必要は無い ) work += ", oauth_signature=" + Dd(Uri.EscapeDataString(oauth_signature)); // OAuth tool チェック用 Debug.WriteLine(work); // フォーマットは、 OAuth tool で確認。 wc.Headers["Authorization"] = "OAuth " + work; // POST 用ヘッダ wc.Headers["Content-Type"] = "application/x-www-form-urlencoded"; // 投稿 wc.UploadStringAsync(new Uri(_tweet_api), "POST", "status=" + sl["status"] ); } // ダブルクォートで挟む private string Dd(string base_string) { return "\"" + base_string + "\""; } private string Nonce() { Random rand = new Random(); int nonce = rand.Next(1000000000); return nonce.ToString(); } // タイムスタンプ private string TimeStamp() { TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0); return Convert.ToInt64(ts.TotalSeconds).ToString(); } // シグネチャ private string Signature(string target) { string work = _consumer_secret + "&" + _secret; byte[] bin = Encoding.UTF8.GetBytes(target); HMACSHA1 hmacsha1 = new HMACSHA1(); hmacsha1.Key = Encoding.UTF8.GetBytes(work); byte[] hash = hmacsha1.ComputeHash(bin); return Convert.ToBase64String(hash); } } }
以下は、実行時のコードです。 Form1.cs
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net; using LBOX_Tool; namespace WindowsFormsApplication { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { VS2010_Twitter twitter = new VS2010_Twitter( "Consumer key", "Consumer secret", "Access token", "Access token secret" ); // ただ投稿するだけなら twitter.Tweet(this.textBox1.Text); twitter.Tweet(this.textBox1.Text, (object _sender, UploadStringCompletedEventArgs _e) => { if (_e.Error == null) { // JSON String stringResult = _e.Result; MessageBox.Show(_e.Result); } else { MessageBox.Show("通信エラーが発生しました。\r\n" + _e.Error.Message); } }); } } }
エラー処理が単純であれば、ラムダ式が簡単です。 関連する記事 Twitter API の自分のアプリのトークンを使って投稿するだけの class VS2012_Twitter Twitter API の自分のアプリのトークンを使って投稿するだけの class Android_Twitter WSH : VBScript と JavaScript で Twitter に投稿する Twitter アプリの登録方法と、API キーの利用 PHP : Twitter 投稿関数( twitter_update ) / cURL 関数
|
【VS(C#)の最新記事】
- Replit : cs-list
- C# : Excel の新しいブックのデフォルトのシートのセルに直接値をセットして、オートフィルを Range オブジェクトから実行する
- C#( Form ) : ウインドウ枠の無い吹き出しの作成
- C# のタプル( Visual Studio 2017 でテスト )
- C# : インターネット上の JSON ファイルのフォーマットを クラスとして定義して1行でオブジェクト化して使用する
- C# の文法的文字列処理
- C# : System.Data.Odbc によるデータベースのテーブルからのデータ取得処理( サンプルの SQL は MySQL 用です )
- C# : Excel を データベースとして DataGridView に読み込む
- C# : dynamic 型 による Excel へのアクセス
- C# : フォームを表示せずに、通知領域にアイコンを表示させる常駐プログラム
- Microsoft Access に対してSQLを入力してその結果を DataGridView に表示する最も簡単なコード
- C# : System.Data.Odbc データ取得(SELECT)処理( MySQL ) : ※ using 無し( Dispose 実行 )
- C# : SQL 文を外部テキストにして、String.Format でデータ部分を置き換えて利用する
- C# コンソールアプリを AN HTTPD で実行
- C# : SQLServer( SQLExpress ) の SMO を使用してテーブルの CREATE TABLE 文 を取得する
- C# : DataGridView に TKMP.DLL の IMAP(POP3) で受信したメールを非同期に表示する( 添付ファイルも取得 )
- C# : TKMP.DLLを使った、メール送信テンプレート
- C# と VB.net : TKMP.DLL を使って IMAP でメール本文の一覧を取得する( コンソール )
- C# でDataTable と DataSource を使用して、DataGridView にデータを表示するテンプレート( 行をダブルクリックしてダイアログを表示して行データを処理 )
- (C#) / VS2010 または VS2012 : TKMP.DLL(3.1.2 または 3.1.8)を使った、『さくらインターネット』用メール送信テンプレート