@twneruに「おはようございます」とポストする

最近、ねる。(http://twneru.appspot.com/)を使って睡眠時間を記録していますが、寝起きがかなり悪く毎日寝起きにすぐパソコンの前に座ってキーボードをたたくなんてほぼ不可能です。

でも、寝起きにダブルクリックくらいならなんとかなりそうなので、実行するとtwneruにポストするプログラムを書きました。

僕は5時前に起きることはないし、午後まで寝るなんてもっとありえないので、5時〜12時は「おはようございます」、以外は「おやすみなさい」とポストするオレオレ仕様です。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Post2Twneru
{
    class Program
    {
        static void Main(string[] args)
        {
            var twitter = new Twitter()
            {
                UserAccount = new Account()
                {
                    UserId = "Your UserId",
                    Password = "Your Password"
                }
            };

            twitter.Post(getStatus());

            Console.WriteLine("Posted!");
            Console.ReadLine();
        }

        private static string getStatus()
        {
            var now = DateTime.Now;

            return string.Format(
                "@twneru {0}",
                5 < now.Hour && now.Hour < 12 ? "おはようございます" : "おやすみなさい"
            );
        }
    }

    class Account
    {
        public string UserId { get; set; }
        public string Password { get; set; }
    }

    class Twitter
    {
        private const string POST_URL = "http://twitter.com/statuses/update.xml";

        public Account UserAccount { get; set; }

        public System.IO.Stream Post(string status)
        {
            var param = "status=" + System.Web.HttpUtility.UrlEncode(status, Encoding.UTF8);
            var data = Encoding.ASCII.GetBytes(param);

            var req = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(POST_URL);
            req.Method = "POST";
            req.ContentType = "application/x-www-form-urlencoded";
            req.ContentLength = data.Length;

            var currentServicePoint = req.ServicePoint;
            currentServicePoint.Expect100Continue = false;

            var basicAuthData = Encoding.UTF8.GetBytes(string.Format("{0}:{1}", UserAccount.UserId, UserAccount.Password));
            var auth = System.Convert.ToBase64String(basicAuthData);
            req.Headers.Add("Authorization", "Basic " + auth);

            var reqStream = req.GetRequestStream();
            reqStream.Write(data, 0, data.Length);
            reqStream.Close();

            var res = (System.Net.HttpWebResponse)req.GetResponse();
            var resStream = res.GetResponseStream();
            res.Close();

            return resStream;
        }
    }
}

こうやって毎日記録してみると、思ったより寝てるなあ。