SkyDrive に移動( Windows8 用テンプレート )テンプレートの主な機能 ❶ Twitter 投稿 ❷ ダイアログボックス用クラス ❸ Http 用クラス( Twitter では無く一般的なもの ) ❹ 新しいページをメモリ上に保持する為の実装( App.xaml.css )Twitter API の自分のアプリのトークンを使って投稿するだけの class VS2010_Twitter とは、微妙に違います。 VS2012_Twitter.cs
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Net.Http; using System.Text; using System.Threading.Tasks; using Windows.Security.Cryptography; using Windows.Security.Cryptography.Core; using Windows.Storage.Streams; namespace LBOX_Tool { class VS2012_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 VS2012_Twitter ( string consumer_key, string consumer_secret, string token, string secret ) { _consumer_key = consumer_key; _consumer_secret = consumer_secret; _token = token; _secret = secret; } public async Task<string> TweetAsync(string text) { // ソートされるリスト SortedDictionary<string, string> sd = new SortedDictionary<string, string>(); sd.Add("oauth_consumer_key", _consumer_key); sd.Add("oauth_nonce", Nonce()); sd.Add("oauth_signature_method", "HMAC-SHA1"); sd.Add("oauth_timestamp", TimeStamp()); sd.Add("oauth_token", _token); sd.Add("oauth_version", "1.0"); sd.Add("status", Uri.EscapeDataString(text)); // http ヘッダ用シグネチャ作成 string work = ""; foreach (KeyValuePair<string, string> kvp in sd) { 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 sd) { // 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); string result = ""; HttpResponseMessage response = null; HttpClient hc = new HttpClient(); try { hc.MaxResponseContentBufferSize = int.MaxValue; hc.DefaultRequestHeaders.ExpectContinue = false; hc.DefaultRequestHeaders.Add("Authorization", "OAuth " + work); // 送信処理の準備 HttpContent content = new FormUrlEncodedContent(new Dictionary<string, string> { { "status", text } }); response = await hc.PostAsync( _tweet_api, content ); result = await response.Content.ReadAsStringAsync(); if (response.IsSuccessStatusCode) { if (result.Substring(0, 10) == "{\"errors\":") { result = "ERROR:" + response.StatusCode + ":" + result; } } else { result = "ERROR:" + response.StatusCode + ":2XX以外:" + result; } } catch (Exception ex) { result = "ERROR:" + ex.Message; } return result; } // ダブルクォートで挟む 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 signingKey = _consumer_secret + "&"; signingKey += _secret; IBuffer keyMaterial = CryptographicBuffer.ConvertStringToBinary(signingKey, BinaryStringEncoding.Utf8); MacAlgorithmProvider hmacSha1Provider = MacAlgorithmProvider.OpenAlgorithm("HMAC_SHA1"); CryptographicKey macKey = hmacSha1Provider.CreateKey(keyMaterial); IBuffer dataToBeSigned = CryptographicBuffer.ConvertStringToBinary(target, BinaryStringEncoding.Utf8); IBuffer signatureBuffer = CryptographicEngine.Sign(macKey, dataToBeSigned); String signature = CryptographicBuffer.EncodeToBase64String(signatureBuffer); return signature; } } }
MainPage.xaml.cs
using System; using System.Collections.Generic; using System.IO; using System.Linq; using Windows.Foundation; using Windows.Foundation.Collections; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Controls.Primitives; using Windows.UI.Xaml.Data; using Windows.UI.Xaml.Input; using Windows.UI.Xaml.Media; using Windows.UI.Xaml.Navigation; using System.Net.Http; using System.Net.Http.Headers; using System.Diagnostics; using System.Threading.Tasks; using LBOX_Tool; namespace C_Sharp_Twitter1 { public sealed partial class MainPage : Page { public MainPage() { this.InitializeComponent(); } protected override void OnNavigatedTo(NavigationEventArgs e) { } private async void Button_Click_1(object sender, RoutedEventArgs e) { VS2012_Twitter twitter = new VS2012_Twitter( "Consumer key", "Consumer secret", "Access token", "Access token secret" ); string result = await twitter.TweetAsync(this.tweet.Text); if (result.Substring(0, 6) != "ERROR:") { this.Response.Text = result; } else { Debug.WriteLine(result); } } } }
関連する記事 ❶ Twitter API の自分のアプリのトークンを使って投稿するだけの class VS2010_Twitter ❷ Twitter API の自分のアプリのトークンを使って投稿するだけの class Android_Twitter ❸ WSH : VBScript と JavaScript で Twitter に投稿する ❹ Twitter アプリの登録方法と、API キーの利用 ❺ PHP : Twitter 投稿関数( twitter_update ) / cURL 関数 変更履歴 2013-07-09 : 初回投稿 2013-08-22 : ダウンロード(テンプレート追加)
|
【Win8 ストアアプリの最新記事】
- C# : HttpClient で Post と Get する汎用 static クラス
- Win8.1 ストアアプリ(JS) : Visual Studio 2013 で Three.js(v65) の WebGLRenderer の動作を確認しました
- WinJS ストア : Three.js を組み込んで、『画像を飛ばす』テンプレート( Bird.js を利用 )
- WinJS ストア : 『背景画像をチェンジする2画面アプリ』のテンプレート
- VS2012ストア(C#) : WebView テンプレート
- VS2012(C#)ストア : ListView Twitter 検索テンプレート
- イラストを背景にして2ページの画面遷移を解りやすくした Windows Store テンプレート
- Win8 ストア(C#) / PDF viewer sample (Windows 8.1)
- ストアアプリの TextBox のスクロールバー
- Win8 ストアアプリの、メモリ上にページを残す画面遷移と、前画面のコントロールの参照
- Win8 ストアアプリで、『選択肢を応答するダイアログ』を簡単に使うための MessageBox クラス
- Win8 ストアから Post 投稿
- Win8ストア XAML の AppBarButtonStyle のContent に指定する 16進数 Unicode の取得
- Win8 ストア : UrlEncode と UrlDecode
- Win8 ストア : HttpClient + XDocument で RSS の取得
- Win8 ストア : リストボックス テンプレート
- Win8 ストア : ファイルアクセス テンプレート
- Win8 ストア : ストアブランク テンプレート
- AppBar テンプレート / Win8 ストアアプリ(C#)
- Windows ストアアプリの AppBar を作成してテストする