mixi voice にC#でポスト
mixi voice などという機能ができたのにAPIが公開されていないとかけしからん状態なのでとりあえずPOSTだけコードをかいてみた。
Postするときに「body」に実際につぶやき(twitterではないが;)の内容、post_keyにランダムな文字列(ブラウザで一度表示したページから探してこないといけない)、それから「redirect」の値が必要みたい。
しゅらばーうぃーくに残りの機能(ボイス一覧の取得とか)の機能も実装してクラスライブラリとして公開したいと思います。とりあえず、のポストでした。
コードは以下から。
using System; using System.Text; using System.Net; using System.IO; using System.Collections; namespace mixi_voice_app { class Program { static Encoding encoder = Encoding.GetEncoding( "EUC-JP" ); /* static string HttpGet( string url, CookieContainer cContainer ) { HttpWebRequest request = ( HttpWebRequest )WebRequest.Create( url ); request.Method = "GET"; request.CookieContainer = cContainer; WebResponse response = request.GetResponse(); Stream responsetream = response.GetResponseStream(); StreamReader reader = new StreamReader( responsetream, encoder ); string result = reader.ReadToEnd(); reader.Close(); return result; } */ static string HttpPost( string url, Hashtable vals, CookieContainer cc ) { string param = ""; foreach( string k in vals.Keys ) { param += String.Format( "{0}={1}&", k, vals[k] ); } byte[] data = Encoding.ASCII.GetBytes( param ); HttpWebRequest req = ( HttpWebRequest )WebRequest.Create( url ); req.Method = "POST"; req.ContentType = "application/x-www-form-urlencoded"; req.ContentLength = data.Length; req.CookieContainer = cc; Stream reqStream = req.GetRequestStream(); reqStream.Write( data, 0, data.Length ); reqStream.Close(); WebResponse res = req.GetResponse(); Stream resStream = res.GetResponseStream(); StreamReader sr = new StreamReader( resStream, encoder ); string result = sr.ReadToEnd(); sr.Close(); resStream.Close(); return result; } static string Login( string id, string password, CookieContainer cContainer ) { Hashtable vals = new Hashtable(); vals["next_url"] = "/home.pl"; vals["email"] = id; vals["password"] = password; string login = "http://mixi.jp/login.pl"; return HttpPost( login, vals, cContainer ); } static string Add_echo( string message, CookieContainer cContainer ) { Hashtable vals = new Hashtable(); vals["body"] = message; vals["post_key"] = "30d38a70a9d446523fff5f84a1dc4d00bc801cef"; // vals["default_value"] = "今なにしてる?を言ってみよう!"; vals["redirect"] = "recent_echo"; string echo_url = "http://mixi.jp/add_echo.pl"; return HttpPost( echo_url, vals, cContainer ); } static void Main( string[] args ) { string id = "mammymax@gmail.com"; string password = "hogehoge"; CookieContainer cContainer = new CookieContainer(); Login( id, password, cContainer ); // GetRecentList(); Add_echo( "Hello, World", cContainer ); Console.WriteLine( "Posted" ); Console.ReadKey(); } } }