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