コード例 #1
0
ファイル: SignInfo.cs プロジェクト: aidentity3b/TYMFollower
 public static void SaveSignInfo(string path, SignInfo si)
 {
     try
     {
         if (!File.Exists(path))
         {
             File.Create(path);
         }
         File.WriteAllBytes(path, MessagePackSerializer.Serialize(si));
     }
     catch (IOException e)
     {
         Console.WriteLine($"トークン「{path}」を書き込めませんでした:");
         Console.WriteLine(e.Message);
         throw e;
     }
     return;
 }
コード例 #2
0
ファイル: Program.cs プロジェクト: aidentity3b/TYMFollower
        private static Tokens Login()
        {
            Tokens tokens;

            //Create SignInfo
            if (!File.Exists("sign.dat"))
            {
                Console.WriteLine("ログイン情報ファイルを作成しています...");
                try
                {
                    File.Create("sign.dat").Close();
                    SignInfo.SaveSignInfo("sign.dat", new SignInfo());
                }
                catch (Exception)
                {
                    Console.WriteLine("ログイン情報ファイルの作成に失敗しました。");
                    throw;
                }
            }
            if (!File.Exists("sign.dat"))
            {
                Console.WriteLine("ログイン情報ファイルの作成に失敗しました。");
                throw new Exception();
            }

            //Read SignInfo
            SignInfo si;

            try
            {
                si = SignInfo.GetSignInfo("sign.dat");
            }
            catch (Exception)
            {
                Console.WriteLine("ログイン情報ファイルを作成しています...");
                try
                {
                    SignInfo.SaveSignInfo("sign.dat", new SignInfo());
                    si = new SignInfo();
                }
                catch (Exception)
                {
                    Console.WriteLine("ログイン情報ファイルの作成に失敗しました。");
                    throw;
                }
            }
            if (!string.IsNullOrEmpty(si.CONSUMER_KEY) && !string.IsNullOrEmpty(si.CONSUMER_SECRET))
            {
                Console.WriteLine("以前使用したAPIキーが見つかりました。前回と同じ連携アプリを使用してログインしますか?[y/n]");
                switch (Console.ReadLine())
                {
                case "n":
                    si.CONSUMER_KEY    = null;
                    si.CONSUMER_SECRET = null;
                    break;

                default:
                    break;
                }
            }
            if (string.IsNullOrEmpty(si.CONSUMER_KEY) || string.IsNullOrEmpty(si.CONSUMER_SECRET))
            {
                Console.WriteLine("APIキーの入力が必要です。");
                Console.Write("まず ");
                Console.ForegroundColor = ConsoleColor.Cyan;
                Console.Write("https://apps.twitter.com/");
                Console.ForegroundColor = ConsoleColor.Gray;
                Console.WriteLine(" にアクセスし、新しい連携アプリを作成してください。");
                Console.WriteLine("次に「Keys and Access Tokens」から必要な情報を参照して以下に入力してください:");
                string key;
                do
                {
                    Console.Write("Consumer Key (API Key): ");
                } while (string.IsNullOrEmpty(key = Console.ReadLine()));
                key = key.Trim(' ');
                string secret;
                do
                {
                    Console.Write("Consumer Secret (API Secret): ");
                } while (string.IsNullOrEmpty(secret = Console.ReadLine()));
                secret             = secret.Trim(' ');
                si.CONSUMER_KEY    = key;
                si.CONSUMER_SECRET = secret;
                SignInfo.SaveSignInfo("sign.dat", si);
            }
            OAuth.OAuthSession session;
            try
            {
                session = OAuth.Authorize(si.CONSUMER_KEY, si.CONSUMER_SECRET);
            }
            catch (Exception e)
            {
                Console.WriteLine("APIキーの有効性を確認できませんでした: " + e.Message);
                throw;
            }

            if (!string.IsNullOrEmpty(si.ACCESS_TOKEN) && !string.IsNullOrEmpty(si.ACCESS_TOKEN_SECRET))
            {
                Console.WriteLine("以前使用したアクセストークンが見つかりました。前回のログイン情報を使用してログインしますか?[y/n]");
                switch (Console.ReadLine())
                {
                case "n":
                    si.ACCESS_TOKEN        = null;
                    si.ACCESS_TOKEN_SECRET = null;
                    break;

                default:
                    break;
                }
            }
            if (string.IsNullOrEmpty(si.ACCESS_TOKEN) || string.IsNullOrEmpty(si.ACCESS_TOKEN_SECRET))
            {
                Console.WriteLine("新しいアクセストークンを取得します。");
                System.Diagnostics.Process.Start(session.AuthorizeUri.AbsoluteUri);
                Console.WriteLine("表示されたPINを入力してください:");
                string pin = Console.ReadLine();
                try
                {
                    tokens = OAuth.GetTokens(session, pin);
                }
                catch (Exception e)
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("アクセストークンの取得に失敗しました: " + e.Message);
                    Console.ForegroundColor = ConsoleColor.Gray;
                    throw;
                }
                si.ACCESS_TOKEN        = tokens.AccessToken;
                si.ACCESS_TOKEN_SECRET = tokens.AccessTokenSecret;
                SignInfo.SaveSignInfo("sign.dat", si);
            }
            else
            {
                tokens = Tokens.Create(si.CONSUMER_KEY, si.CONSUMER_SECRET, si.ACCESS_TOKEN, si.ACCESS_TOKEN_SECRET);
            }

            Console.WriteLine("ログインしたユーザー情報を取得しています……");
            try
            {
                currentUser = tokens.Account.VerifyCredentials();
            }
            catch (Exception e)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("ログインに失敗しました: " + e.Message);
                Console.ForegroundColor = ConsoleColor.Gray;
                throw;
            }
            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("{0} @{1}", currentUser.Name, currentUser.ScreenName);
            Console.ForegroundColor = ConsoleColor.Gray;
            return(tokens);
        }