2013年09月10日 : 1〜4 : C# 前期は、Windows ストアと Windows Phone に特化して入力バリエーションと xaml ベースの Binding によるデータ処理を中心に行いました( データは XML で PHP 経由の DB )が、後期はテクニカルにバリエーションを付加しながら、JSON 中心のデータ処理を行います。但し、Windows ストアと Windows Phone に対してのデータ供給は 簡易 Http サーバを作成して対応したいと思います。 ■ Twitter API の自分のアプリのトークンを使って投稿するだけの class VS2012_Twitter ■ Twitter API の自分のアプリのトークンを使って投稿するだけの class VS2010_Twitter バッチ処理は、DB や テキストファイル等を組み合わせた上で タスクスケジューラに登録すれば、最短で 5分間隔で自動投稿が可能になります。 ▼ WebClient で Twitter 投稿
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Diagnostics;
using System.Security.Cryptography;
namespace BatchTweet
{
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 string Tweet(string text)
{
WebClient wc = new WebClient();
// ソートされるリスト
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";
// 投稿
string result = wc.UploadString(new Uri(_tweet_api), "POST", "status=" + sl["status"]);
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 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);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BatchTweet
{
class Program
{
static void Main(string[] args)
{
VS2010_Twitter twitter =
new VS2010_Twitter(
"Consumer key",
"Consumer secret",
"Access token",
"Access token secret"
);
// 投稿
string json = twitter.Tweet("バッチ投稿1");
Console.WriteLine(json);
}
}
}
|
|
【C#の最新記事】
- C# : PHP と連携してバイナリデータを WebClient.UploadDataAsync でそのままアップロードする
- C# : WebClient で JSON データを取得後 Json.NET でオブジェクト化( ついでに PropertyInfo でプロパティデータ一覧を foreach で取得 )
- C# : Microsoft Access の接続で、他の RDBMS( ここでは MySQL ) にエクスポートを行う
- C# : TKMP.DLLを使った、Gmail 用メール送信テンプレート
- C# : DataGridView を使用したナチュラルな行データの更新
- C# の delegate : メソッドの引数にメソッドを渡して使用する方法と、JavaScript の function(){} と同じ使用方法( 匿名 )
- PowerShell 移行用 C# コンソールアプリのコードテスト( ZIP 圧縮 )
- 解く事が目的では無い、身に付ける事が目的の C# 初心者用の問題を作ったので良かったらどうぞ (4)
- 解く事が目的では無い、身に付ける事が目的の C# 初心者用の問題を作ったので良かったらどうぞ (3)
- 解く事が目的では無い、身に付ける事が目的の C# 初心者用の問題を作ったので良かったらどうぞ (2)
- 解く事が目的では無い、身に付ける事が目的の C# 初心者用の問題を作ったので良かったらどうぞ (1)
- ComboBox : C# : Form アプリケーションで良く使うコントロール / VS2012 にて
- C# バッチビルドキットで、VB の My 名前空間を使ってクリップボードを使ったり、キーボードの SHIFT キーが押されているかを知る
- printui.dll を VB.net または C# から呼び出す/ DllImport で LoadLibraryA / VS2010
- LINQ で List
のソート - VS2010(C#)WPF : ListView 内に GridView を配置する
- Windows ストア用の System.Collections.Generic 名前空間には、SortedList はありません。
- 情報が全くみつからない Microsoft.Live
- Windows8(C#) の WebView の LoadComplete で取得した URL 内のアクセストークンを Split で取得
- Facebook C# SDK の 5.4.1.0 のダウンロード




























