inohilog

/var/log/inohiro.log

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();
		}
	}
}