public static List <Video> ParseMyVideoHtml(string html) { if (html.IndexOf("ここから先をご利用いただくにはログインしてください") >= 0) { throw new NiconicoLoginException(); } List <Video> video_list = new List <Video>(); // 動画が1つもない場合の処理が必要 int index = 0; while ((index = html.IndexOf("<p class=\"menu_box\">", index)) >= 0) { Video video = new Video(); string date_str = IJStringUtil.GetStringBetweenTag(ref index, "strong", html); video.submit_date = DateTime.ParseExact(date_str, "yy年MM月dd日 HH:mm", null); string view_str = IJStringUtil.GetStringBetweenTag(ref index, "strong", html); string res_str = IJStringUtil.GetStringBetweenTag(ref index, "strong", html); string mylist_str = IJStringUtil.GetStringBetweenTag(ref index, "strong", html); video.point.view = IJStringUtil.ToIntFromCommaValue(view_str); video.point.res = IJStringUtil.ToIntFromCommaValue(res_str); video.point.mylist = IJStringUtil.ToIntFromCommaValue(mylist_str); int start = html.IndexOf("watch/", index) + "watch/".Length; int end = html.IndexOf('"', start); video.video_id = html.Substring(start, end - start); video.title = IJStringUtil.GetStringBetweenTag(ref index, "a", html); video.description = IJStringUtil.GetStringBetweenTag(ref index, "p", html); // description の欄を仮に使う video_list.Add(video); } return(video_list); }
public static void ParseRankingNicoChartOnePage(string html, List <Video> video_list) { int index = 0; while ((index = html.IndexOf("<li id=\"rank", index)) >= 0) { Video video = new Video(); string view_str = IJStringUtil.GetStringBetweenTag(ref index, "em", html); string res_str = IJStringUtil.GetStringBetweenTag(ref index, "em", html); string mylist_str = IJStringUtil.GetStringBetweenTag(ref index, "em", html); video.point.view = IJStringUtil.ToIntFromCommaValue(view_str); video.point.res = IJStringUtil.ToIntFromCommaValue(res_str); video.point.mylist = IJStringUtil.ToIntFromCommaValue(mylist_str); int ps = html.IndexOf("watch/", index) + 6; int pe = html.IndexOf('"', ps); video.video_id = html.Substring(ps, pe - ps); video.title = IJStringUtil.GetStringBetweenTag(ref index, "a", html); index = html.IndexOf("<li class=\"release", index) - 1; string date_str = IJStringUtil.GetStringBetweenTag(ref index, "li", html); video.submit_date = NicoUtil.StringToDate(date_str); if (RankFile.SearchVideo(video_list, video.video_id) < 0) { video_list.Add(video); } } }
/// <summary> /// #記法を置き換える。 /// "#m:n" を element[m - 1][n - 1] で置き換えたテキストを取得 /// </summary> /// <param name="text">置換元文字列</param> /// <param name="element">置換するデータ</param> /// <returns>置き換えられた文字列</returns> public static string GetReplacedString(string text, List <string[]> element) { StringBuilder buff = new StringBuilder(); for (int i = 0; i < text.Length; ++i) { if (text[i] == '#' && i < text.Length - 1 && text[i + 1] == '#') { buff.Append((char)'#'); ++i; } else if (text[i] == '#') { int row = 0; int column = 0; string format_string = ""; ParseSharp(text, ref i, ref row, ref column, ref format_string); if (row >= 0) // -1 なら普通のテキストと解釈 { while (row - 1 < element.Count && column - 1 >= element[row - 1].Length) { column -= element[row - 1].Length; ++row; } string value = ((row - 1 < element.Count && column - 1 < element[row - 1].Length) ? element[row - 1][column - 1] : ""); if (value != "") { if (format_string != "") { format_string = "{0," + format_string + "}"; if (value.IndexOf('.') >= 0) { buff.Append(String.Format(format_string, double.Parse(value))); } else { buff.Append(String.Format(format_string, IJStringUtil.ToIntFromCommaValue(value))); } } else { buff.Append(value); } } } else { buff.Append((char)text[i]); } } else { buff.Append((char)text[i]); } } return(buff.ToString()); }
// ランキングまたはマイリストのRSSを解析する // is_mylist が true ならマイリスト、false ならランキング public static void ParsePointRss(string html, DateTime getting_dt, List <Video> video_list, bool is_total, bool is_mylist) { int index = -1; while ((index = html.IndexOf("<item>", index + 1)) >= 0) { Video video = new Video(); video.point.getting_date = getting_dt; video.title = IJStringUtil.GetStringBetweenTag(ref index, "title", html); if (!is_mylist) { video.title = video.title.Substring(video.title.IndexOf(':') + 1); } string link = IJStringUtil.GetStringBetweenTag(ref index, "link", html); video.video_id = link.Substring(link.LastIndexOf('/') + 1); IJStringUtil.GetStringBetweenTag(ref index, "p", html); video.description = IJStringUtil.GetStringBetweenTag(ref index, "p", html); if (!is_mylist) // 読み飛ばし { IJStringUtil.GetStringBetweenTag(ref index, "strong", html); } video.length = IJStringUtil.GetStringBetweenTag(ref index, "strong", html); string date_str = IJStringUtil.GetStringBetweenTag(ref index, "strong", html); video.submit_date = NicoUtil.StringToDate(date_str); if (!is_mylist) { IJStringUtil.GetStringBetweenTag(ref index, "strong", html); if (!is_total) { for (int i = 0; i < 4; ++i) // 4回読み飛ばす { IJStringUtil.GetStringBetweenTag(ref index, "strong", html); } } } string view_str = IJStringUtil.GetStringBetweenTag(ref index, "strong", html); string res_str = IJStringUtil.GetStringBetweenTag(ref index, "strong", html); string mylist_str = IJStringUtil.GetStringBetweenTag(ref index, "strong", html); video.point.view = IJStringUtil.ToIntFromCommaValue(view_str); video.point.res = IJStringUtil.ToIntFromCommaValue(res_str); video.point.mylist = IJStringUtil.ToIntFromCommaValue(mylist_str); if (RankFile.SearchVideo(video_list, video.video_id) < 0) { video_list.Add(video); } } }
public void ParseExtThumb(string html) { int index; if ((index = html.IndexOf("<p class=\"TXT10")) >= 0) { point.view = IJStringUtil.ToIntFromCommaValue(IJStringUtil.GetStringBetweenTag(ref index, "strong", html)); point.res = IJStringUtil.ToIntFromCommaValue(IJStringUtil.GetStringBetweenTag(ref index, "strong", html)); point.mylist = IJStringUtil.ToIntFromCommaValue(IJStringUtil.GetStringBetweenTag(ref index, "strong", html)); length = IJStringUtil.GetStringBetweenTag(ref index, "strong", html); submit_date = DateTime.ParseExact(IJStringUtil.GetStringBetweenTag(ref index, "strong", html), "yy/MM/dd HH:mm", null); title = IJStringUtil.GetStringBetweenTag(ref index, "a", html); } else { status_ = Status.OTHER; } }
public void LoadForSpecial(string rank_file_path) { string str = ""; try { str = IJFile.Read(rank_file_path); } catch (System.IO.FileNotFoundException) { return; } string[] line = IJStringUtil.SplitWithCRLF(str); if (video_list_ == null) { video_list_ = new List <Video>(); } for (int i = 0; i < line.Length; ++i) { string[] s_array = line[i].Split('\t'); if (RankFile.SearchVideo(video_list_, s_array[0]) < 0) // 存在しないなら { Video video = new Video(); video.video_id = s_array[0]; try { video.point.view = IJStringUtil.ToIntFromCommaValue(s_array[3]); video.point.res = IJStringUtil.ToIntFromCommaValue(s_array[4]); video.point.mylist = IJStringUtil.ToIntFromCommaValue(s_array[5]); video.title = s_array[6]; video.submit_date = NicoUtil.StringToDate(s_array[7]); video.tag_set.ParseBlank(s_array[14]); } catch (System.IndexOutOfRangeException) { } video_list_.Add(video); } } }
//private static void ParseRankingHtmlVideoInfo(string html, int index, // out int value, // out DateTime date, // out int view, // out int res, // out int mylist, // out string video_id, // out string title) //{ // int ps = html.IndexOf("watch/", index) + 6; // int pe = html.IndexOf('"', ps); // video_id = html.Substring(ps, pe - ps); // index = html.IndexOf("<strong", index) + 1; // string value_str = IJStringUtil.GetStringBetweenTag(ref index, "span", html); // string date_str = IJStringUtil.GetStringBetweenTag(ref index, "strong", html); // // ニコニコ動画(9)のランキングHTMLにはランキング対象の期間ポイント以外は表示されない // string view_str = "0"; // string res_str = "0"; // string mylist_str = "0"; // title = IJStringUtil.GetStringBetweenTag(ref index, "a", html); // value = IJStringUtil.ToIntFromCommaValue(value_str); // date = NicoUtil.StringToDate(date_str); // view = IJStringUtil.ToIntFromCommaValue(view_str); // res = IJStringUtil.ToIntFromCommaValue(res_str); // mylist = IJStringUtil.ToIntFromCommaValue(mylist_str); //} //HTMLランキングファイル動画情報取得 GINZA対応 2013/10/14 marky private static void ParseRankingHtmlVideoInfo(string html, int index, out int value, out DateTime date, out int view, out int res, out int mylist, out string video_id, out string title) { //ポイント int ps = html.IndexOf("rankingPt\">+", index) + 12; int pe = html.IndexOf('<', ps); string value_str = html.Substring(ps, pe - ps); //投稿日時 string date_str = IJStringUtil.GetStringBetweenTag(ref index, "span", html); //動画ID ps = html.IndexOf("data-id=\"", index) + 9; pe = html.IndexOf('"', ps); video_id = html.Substring(ps, pe - ps); //タイトル index = html.IndexOf("<p class=\"itemTitle ranking\">", index) + 1; title = IJStringUtil.GetStringBetweenTag(ref index, "a", html); // ニコニコ動画(9)のランキングHTMLにはランキング対象の期間ポイント以外は表示されない string view_str = "0"; string res_str = "0"; string mylist_str = "0"; value = IJStringUtil.ToIntFromCommaValue(value_str); //date = NicoUtil.StringToDate(date_str); date = DateTime.ParseExact(date_str, "yyyy/MM/dd HH:mm", null); view = IJStringUtil.ToIntFromCommaValue(view_str); res = IJStringUtil.ToIntFromCommaValue(res_str); mylist = IJStringUtil.ToIntFromCommaValue(mylist_str); }
public void Substitute(Video video, string str) { switch (kind_) { case Kind.Id: video.video_id = str; break; case Kind.View: video.point.view = IJStringUtil.ToIntFromCommaValue(str); break; case Kind.Res: video.point.res = IJStringUtil.ToIntFromCommaValue(str); break; case Kind.Mylist: video.point.mylist = IJStringUtil.ToIntFromCommaValue(str); break; case Kind.Title: video.title = str; break; case Kind.Date: if (!string.IsNullOrEmpty(str)) { if (text_ != "") // 日時用の書式が存在するなら { video.submit_date = DateTime.ParseExact(str, text_, null); } else { video.submit_date = NicoUtil.StringToDate(str); } } else // 空文字列の場合 { video.submit_date = new DateTime(); } break; case Kind.Description: video.description = str; break; case Kind.Tag: // text_ は separator if (arrange_ == "daily") { video.tag_set.Parse(str); } else { video.tag_set.Parse(str, text_); } break; case Kind.UserText: video.SetUserText(num_, str); break; } }
public static void ParseRankingTermPointHtmlVersion1(string html, DateTime getting_dt, List <Video> video_list, string filename) { int index = -1; while ((index = html.IndexOf("<td class=\"rank_num\"", index + 1)) >= 0) { IJStringUtil.GetStringBetweenTag(ref index, "p", html); string valueStr = IJStringUtil.GetStringBetweenTag(ref index, "p", html); IJStringUtil.GetStringBetweenTag(ref index, "strong", html); // 読み飛ばす string dateStr = IJStringUtil.GetStringBetweenTag(ref index, "strong", html); //video.submit_date = IJStringUtil.StringToDate(dateStr); string viewStr = IJStringUtil.GetStringBetweenTag(ref index, "strong", html); if (viewStr.Equals("投稿者コメント")) // 投稿者コメントの部分はとばす { viewStr = IJStringUtil.GetStringBetweenTag(ref index, "strong", html); } string resStr = IJStringUtil.GetStringBetweenTag(ref index, "strong", html); string mylistStr = IJStringUtil.GetStringBetweenTag(ref index, "strong", html); /*point.view = IJStringUtil.GetInt(viewStr); * point.res = IJStringUtil.GetInt(resStr); * point.mylist = IJStringUtil.GetInt(mylistStr);*/ int ps = html.IndexOf("watch/", index) + 6; int pe = html.IndexOf('"', ps); string video_id = html.Substring(ps, pe - ps); string title = IJStringUtil.GetStringBetweenTag(ref index, "a", html); Video video = null; for (int i = 0; i < video_list.Count; ++i) { if (video_list[i].video_id == video_id) { video = video_list[i]; break; } } if (video == null) { video = new Video(); video.point.view = 0; video.point.res = 0; video.point.mylist = 0; video.point.getting_date = getting_dt; video.submit_date = NicoUtil.StringToDate(dateStr); video.video_id = video_id; video.title = title; video_list.Add(video); } if (filename.IndexOf("vie") >= 0) { video.point.view = IJStringUtil.ToIntFromCommaValue(valueStr); } else if (filename.IndexOf("res") >= 0) { video.point.res = IJStringUtil.ToIntFromCommaValue(valueStr); } else if (filename.IndexOf("myl") >= 0) { video.point.mylist = IJStringUtil.ToIntFromCommaValue(valueStr); } else { throw new System.Exception("ファイルの名前の形式が正しくありません"); } } }