private static void Deploy(DeployArgs args, IMusicDataTable <IMusicDataTableUnit> musicDataTable, string minLevelText, string maxLevelText, string currentHash = "") { var client = new HttpClient(); var getCurrent = args.CreateRequestMessage(HttpMethod.Get); var getCurrentResult = client.SendAsync(getCurrent).Result; var currentSource = Encoding.UTF8.GetString(getCurrentResult.Content.ReadAsByteArrayAsync().Result); var currentDocument = XDocument.Parse(currentSource); XNamespace ns = "http://www.w3.org/2005/Atom"; var title = currentDocument.Element(ns + "entry").Element(ns + "title").Value; var currentContent = currentDocument.Element(ns + "entry").Element(ns + "content").Value; var beginToken = "<!--GEN_BY_REPORT_TOOL_BEGIN-->"; var endToken = "<!--GEN_BY_REPORT_TOOL_END-->"; var beginIndex = currentContent.IndexOf(beginToken); var endIndex = currentContent.IndexOf(endToken); if (beginIndex == -1 || endIndex == -1) { throw new Exception("Not find token."); } var(hash, expert, master) = GetTableHash(musicDataTable); if (currentHash == hash) { Console.WriteLine("Skipping deploy."); return; } var minLevel = decimal.Parse(minLevelText); var maxLevel = decimal.Parse(maxLevelText); var nextTable = GenerateTableText(minLevel, maxLevel, expert, master); var nextContent = currentContent.Remove(beginIndex + beginToken.Length, endIndex - (beginIndex + beginToken.Length)); nextContent = nextContent.Insert(beginIndex + beginToken.Length, nextTable); var nextSource = $@" <entry xmlns=""http://www.w3.org/2005/Atom"" xmlns:app=""http://www.w3.org/2007/app""> <title>{title}</title> <author><name>name</name></author> <content type=""text/html""> {HttpUtility.HtmlEncode(nextContent.ToString())} </content> <category term=""CHUNITHM"" /> <app:control> <app:draft>no</app:draft> </app:control> </entry> "; Console.WriteLine(nextSource); var putRequest = args.CreateRequestMessage(HttpMethod.Put); putRequest.Content = new StringContent(nextSource); var putRequestResult = client.SendAsync(putRequest).Result; Console.WriteLine(putRequestResult.Content.ReadAsStringAsync().Result); }
static void Main(string[] args) { var programArgs = new ProgramArgs(args); var getTableArgs = new GetMusicDataTableArgs(programArgs.DataBaseUrl); var musicDataTable = GetMusicDataTable(getTableArgs); Console.WriteLine("Success get music data table."); Console.WriteLine("Music count: {0}", musicDataTable.GetTableUnits()?.Count()); var deployArgs = new DeployArgs( hatenaId: programArgs.HatenaId, blogId: programArgs.BlogId, apiToken: programArgs.ApiToken, entryId: programArgs.EntryId); Deploy(deployArgs, musicDataTable, programArgs.MinLevelText, programArgs.MaxLevelText); }