/// <summary> /// publishstatusの取得を開始します。 /// </summary> private static void BeginGetPublishStatus(long liveId, InternalData internalData, AutoResetEvent ev) { WebUtil.RequestHttpAsync( NicoString.GetPublishStatusUrl(liveId), null, internalData.Cookie, (result, data) => { try { // publishstatusは放送主でないと取得できません。 var v = PublishStatus.CreateFromXml(liveId, NicoUtil.GetXml(data)); internalData.LiveStreamInfo.PublishStatus = v; } catch (Exception ex) { internalData.Exception = ex; } ev.Set(); }); }
/// <summary> /// playerstatusの取得を開始します。 /// </summary> private static void BeginGetPlayerStatus(long liveId, InternalData internalData, AutoResetEvent ev) { WebUtil.RequestHttpAsync( NicoString.GetPlayerStatusUrl(liveId), null, internalData.Cookie, (result, data) => { try { // ステータスがおかしければエラーとします。 var v = PlayerStatus.CreateFromXml(liveId, NicoUtil.GetXml(data)); internalData.LiveStreamInfo.PlayerStatus = v; } catch (Exception ex) { internalData.Exception = ex; } ev.Set(); }); }
private void buttonNavigate_Click(object sender, EventArgs e) { if (!is_already_write_) { DialogResult result = MessageBox.Show("まだ保存されていませんが続けますか?", "確認", MessageBoxButtons.OKCancel); if (result == DialogResult.Cancel) { return; } } string url = comboBoxNavigateUrl.Text; try { current_video_id_ = NicoUtil.CutNicoVideoId(url); } catch (FormatException) { MessageBox.Show("動画IDまたはURLを入力してください。"); return; } current_start_ = -1.0; current_end_ = -1.0; textBoxVideoStart.Text = ""; textBoxVideoEnd.Text = ""; navigate_kind_ = NavigateKind.FromGo; is_already_write_ = false; timer1.Enabled = false; label4.Text = "0"; labelInfo.Text = ""; webBrowser1.Navigate("http://www.nicovideo.jp/watch/" + current_video_id_); }
static SearchingTagOption MakeSearchingTagOption() { SearchingTagOption searching_tag_option = new SearchingTagOption(); searching_tag_option.SetTagList(option_["textBoxTagNew"]); searching_tag_option.is_searching_kind_tag = bool.Parse(option_["radioButtonSearchKindTag"]); searching_tag_option.is_detail_getting = bool.Parse(option_["checkBoxIsGettingDetailNew"]); searching_tag_option.detail_info_lower = int.Parse(option_["numericUpDownConditionMylistNew"]); searching_tag_option.sort_kind_num = int.Parse(option_["listBoxSortNew"]); searching_tag_option.is_page_all = bool.Parse(option_["radioButtonTagSearchPageAll"]); searching_tag_option.page_start = IJStringUtil.ToNumberWithDef(option_["textBoxTagSearchPageStart"], 1); searching_tag_option.page_end = IJStringUtil.ToNumberWithDef(option_["textBoxTagSearchPageEnd"], int.MaxValue); searching_tag_option.is_using_condition = bool.Parse(option_["checkBoxTagSearchIsUsingCondition"]); searching_tag_option.condition_lower = IJStringUtil.ToNumberWithDef(option_["textBoxTagSearchLower"], 0); searching_tag_option.condition_upper = IJStringUtil.ToNumberWithDef(option_["textBoxTagSearchUpper"], int.MaxValue); searching_tag_option.date_from = NicoUtil.StringToDate(option_["dateTimePickerTagSearchFrom"]); searching_tag_option.date_to = NicoUtil.StringToDate(option_["dateTimePickerTagSearchTo"]); searching_tag_option.searching_interval = option_["textBoxTagSearchInterval"]; searching_tag_option.getting_detail_interval = option_["textBoxGettingDetailInterval"]; searching_tag_option.is_create_ticket = bool.Parse(option_["checkBoxSaveSearch"]); searching_tag_option.SetRedundantSearchMethod(int.Parse(option_["comboBoxRedundantSearchMethod"])); searching_tag_option.is_sending_user_session = bool.Parse(option_["checkBoxIsSendingUserSession"]); return(searching_tag_option); }
public async Task <List <VideoModel> > GetVideos() { var results = new List <VideoModel>(); var xml = await GetXmlChannelAsync(MylistUrl); foreach (var item in xml.Descendants("item")) { var video = new VideoModel(); // 明細部をXDocumentで読み込むために整形 var descriptionString = item.Element("description").Value; descriptionString = descriptionString.Replace(" ", " "); //descriptionString = HttpUtility.HtmlDecode(descriptionString); descriptionString = descriptionString.Replace("&", "&"); //descriptionString = descriptionString.Replace("'", "'"); // 明細部読み込み var desc = ToXml($"<root>{descriptionString}</root>"); //// 動画時間 //var lengthSecondsStr = (string)desc // .Descendants("strong") // .Where(x => (string)x.Attribute("class") == "nico-info-length") // .First(); video.VideoUrl = item.Element("link").Value; video.StartTime = NicoUtil.ToRankingDatetime(desc, "nico-info-date"); results.Add(video); } return(results); }
/// <summary> /// 再読込 /// </summary> public async Task Reload() { var xml = await GetXmlChannelAsync(MylistUrl); // マイリスト情報を本インスタンスのプロパティに転記 MylistTitle = xml.Element("title").Value; MylistCreator = xml.Element(XName.Get("creator", "http://purl.org/dc/elements/1.1/")).Value; MylistDate = DateTime.Parse(xml.Element("lastBuildDate").Value); MylistDescription = xml.Element("description").Value; UserId = await GetUserId(); UserThumbnail = await NicoUtil.ToThumbnail(await GetThumbnailUrl()); Videos.Clear(); foreach (var item in xml.Descendants("item")) { Videos.Add(await CreateVideoFromXml( item, "nico-numbers-view", "nico-numbers-mylist", "nico-numbers-res" )); } }
private async void Initialize(string mylistid, string orderby) { MylistId = mylistid; OrderBy = "0"; var xml = await WebUtil.GetXmlChannelAsync(MylistUrl); // マイリスト情報を本インスタンスのプロパティに転記 MylistTitle = xml.Element("title").Value; MylistCreator = xml.Element(XName.Get("creator", "http://purl.org/dc/elements/1.1/")).Value; MylistDate = DateTime.Parse(xml.Element("lastBuildDate").Value); MylistDescription = xml.Element("description").Value; const string thumbnailurl = "https://secure-dcdn.cdn.nimg.jp/nicoaccount/usericon/"; var mylistpage = await WebUtil.GetStringAsync($"http://www.nicovideo.jp/mylist/{MylistId}"); // サムネイルURLを取得 var iframestr = thumbnailurl + Regex.Match(mylistpage, thumbnailurl + "(?<url>[^\"]+)").Groups["url"].Value; // ユーザIDを取得 var userid = Regex.Match(iframestr, @"\/(?<user_id>[\d]+)\.").Groups["user_id"].Value; UserId = userid; // サムネイル取得 await NicoUtil .GetThumbnailAsync(iframestr) .ContinueWith(x => Thumbnail = x.Result); }
/// <summary> /// アラートメッセージを処理します。 /// </summary> private void HandleMessage(string message) { var doc = new XmlDocument(); doc.LoadXml(message); var node = doc.DocumentElement; if (node.Name != "chat") { return; } Log.Trace("Alert {0}", node.InnerText); // 内部テキストは // [放送ID],[チャンネル/コミュニティID/official],[ユーザーID] // となっています。 var values = node.InnerText.Split(','); if (values.Length < 3) { return; } // 放送IDを取得します。 var liveId = StrUtil.ToInt(values[0], 0); if (liveId <= 0) { return; } // 提供者を取得します。 var providerData = NicoUtil.ParseProvider(values[1]); if (providerData == null) { return; } // ユーザー情報を取得します。 var userId = StrUtil.ToInt(values[2], -1); // IDが重複して送られてくることがあるので、 // すでに受信した放送IDならば無視します。 if (!IsContainsLiveId(liveId)) { var e = new LiveAlertedEventArgs( liveId, providerData, userId); OnLiveAlerted(e); AddLiveIdToHistoryBuffer(liveId); } }
/// <summary> /// コミュニティ番号が含まれる文字列から情報を作成します。 /// </summary> public static CommunityInfo Create(string communityStr, CookieContainer cc) { var id = NicoUtil.GetCommunityId(communityStr); if (id < 0) { throw new NicoProviderException( "コミュニティIDが取得できませんでした。"); } return(Create(id, cc)); }
/// <summary> /// アラート情報を作成します。 /// </summary> public static AlertInfo Create() { var node = NicoUtil.GetXml( "http://video.nicovideo.jp/api/getalertinfo", null); if (node == null) { throw new NicoLiveException(NicoStatusCode.NetworkError); } return(new AlertInfo(node)); }
protected override async Task DoLoading(ProgressViewModel vm) { // TODO 設定ファイルの初期化 using (var command = await DbUtil.GetControl()) { // データベースの初期化 await DbUtil.Initialize(command); // Nico状態の初期化 await NicoUtil.Initialize(command); } // 自動タイマー起動 CheckTimer = new DispatcherTimer(); CheckTimer.Interval = TimeSpan.FromMinutes(5); CheckTimer.Tick += async(sender, e) => { foreach (var x in NicoUtil.Favorites) { // 全件取得 var videos = await NicoUtil.GetMylistVideos(x.MylistId, "0"); // 対象絞り込み var targets = videos .Where(video => x.Date < video.StartTime) .ToArray(); if (targets.Any()) { await targets .Select(async video => await NicoUtil.AddTemporary(video.VideoId)) .WhenAll(); await NicoUtil.AddFavorite(x.MylistId, targets.Max(target => target.StartTime)); } } }; CheckTimer.Start(); // TemporaryStringの更新イベント関連付け NicoUtil.Temporaries.CollectionChanged += (sender, e) => { OnPropertyChanged(nameof(TemporaryString)); }; OnPropertyChanged(nameof(TemporaryString)); ChangeCurrent(MenuType.NicoSearch); await Current.ExecuteLoadTasks(); }
private async void Intialize(NicoVideoModel x) { SetModel(x); var urls = new string[] { $"{x.ThumbnailUrl}.L", $"{x.ThumbnailUrl}.M", $"{x.ThumbnailUrl}", }; await NicoUtil .GetThumbnailAsync(urls) .ContinueWith(image => Thumbnail = image.Result); }
private void buttonWrite_Click(object sender, EventArgs e) { string video_id; try { video_id = NicoUtil.CutNicoVideoId(webBrowser1.Url.ToString()); } catch (FormatException) { MessageBox.Show("動画IDまたはURLを入力してください。"); return; } UpdateCutList(video_id, textBoxVideoStart.Text, textBoxVideoEnd.Text); is_already_write_ = true; }
/// <summary> /// ニコニコ生放送の情報を取得します。 /// </summary> public static PlayerStatus Create(long liveId, CookieContainer cc) { // 生放送IDから放送情報を取得します。 var node = NicoUtil.GetXml( NicoString.GetPlayerStatusUrl(liveId), cc); if (node == null) { throw new NicoLiveException( NicoStatusCode.NetworkError, NicoString.LiveIdString(liveId)); } return(CreateFromXml(liveId, node)); }
public async Task ReloadTemporary() { const string url = "http://www.nicovideo.jp/api/deflist/list"; var json = await GetJsonAsync(url); Videos.Clear(); foreach (dynamic item in json["mylistitem"]) { VideoModel video; if (item["item_data"]["deleted"] == "0") { video = await VideoModel.CreateInstance(item["item_data"]["video_id"]); } else { video = new VideoModel(); video.VideoUrl = item["item_data"]["video_id"]; video.Title = item["item_data"]["title"]; video.Description = item["description"]; //video.Tags = data["tags"]; //video.CategoryTag = data["categoryTags"]; video.ViewCounter = long.Parse(item["item_data"]["view_counter"]); video.MylistCounter = long.Parse(item["item_data"]["mylist_counter"]); video.CommentCounter = long.Parse(item["item_data"]["num_res"]); video.StartTime = NicoUtil.FromUnixTime((long)item["item_data"]["first_retrieve"]); //video.LastCommentTime = Converter.item(data["lastCommentTime"]); video.LengthSeconds = long.Parse(item["item_data"]["length_seconds"]); video.ThumbnailUrl = item["item_data"]["thumbnail_url"]; //video.LastResBody = item["item_data"]["last_res_body"]; //video.CommunityIcon = data["communityIcon"]; } Videos.Add(video); } MainViewModel.Instance.TemporaryCount = Videos.Count; }
private async void Initialize(NicoVideoModel video, bool reload) { SetModel(video, false); if (reload) { await NicoUtil .GetVideo(VideoId) .ContinueWith(x => SetModel(x.Result, true)); } var urls = new string[] { $"{video.ThumbnailUrl}.L", $"{video.ThumbnailUrl}.M", $"{video.ThumbnailUrl}", }; await NicoUtil .GetThumbnailAsync(urls) .ContinueWith(x => Thumbnail = x.Result); }
/// <summary> /// ニコニコのgetthumbinfo APIから動画情報を取得します。 /// </summary> /// <remarks> /// 参考URL) /// http://dic.nicovideo.jp/a/%E3%83%8B%E3%82%B3%E3%83%8B%E3%82%B3%E5%8B%95%E7%94%BBapi /// </remarks> public static VideoData CreateFromApi(string videoStr) { if (string.IsNullOrEmpty(videoStr)) { throw new ArgumentNullException("videoStr"); } var videoId = VideoUtil.GetVideoId(videoStr); if (string.IsNullOrEmpty(videoId)) { throw new NicoVideoException( $"{videoStr}: 不正な動画IDです。"); } var url = string.Format( "http://ext.nicovideo.jp/api/getthumbinfo/{0}", videoId); var node = NicoUtil.GetXml(url, null); return(new VideoData(videoId, node)); }
public void GetVideoTest1() { TestUtility.Message("Running GetVideoTest1"); TestUtility.EnsureLogin(network_); Video video = NicoUtil.GetVideo(network_, "so5558738", cancel_object_, msgout_); TestUtility.Message(video.description); TestUtility.Message(video.length); TestUtility.Message(video.submit_date.ToString("yyyy-MM-ddTHH:mm:sszzz")); TestUtility.Message(video.tag_set.GetDisplayingTag()); TestUtility.Message(video.title); TestUtility.Message(video.video_id); Assert.That(video.description, Text.Contains("初音ミクがこんなことを言ってくれたら嬉しいなぁという妄想を形にしてみました。"), "GetVideoTest1-1"); Assert.That(video.length, Is.EqualTo("0:02"), "GetVideoTesta1-2"); Assert.That(video.submit_date, Is.EqualTo(new DateTime(2008, 12, 15, 20, 11, 39)), "GetVideoTest1-3"); Assert.That(video.tag_set.Count, Is.GreaterThan(0), "GetVideoTest1-4"); Assert.That(video.title, Is.EqualTo("初音ミクからひとこと「オハヨ」"), "GetVideoTest1-5"); Assert.That(video.video_id, Is.EqualTo("so5558738"), "GetVideoTest1-6"); }
/// <summary> /// 共通の追加処理 /// </summary> /// <param name="url">追加するURL</param> private async Task AddMylist(string url) { var mylist = NicoUtil.ToContentId(url); if (SearchMylistModel.Instance.Favorites.Any(f => f.Mylist == mylist)) { return; } var model = new SearchVideoByMylistModel(); await model.Reload(url); if (!model.Videos.Any()) { ServiceFactory.MessageService.Error("データ件数が0件"); } else { await SearchMylistModel.Instance.AddFavorite(mylist); } }
private void LoadConfig(string filename) { if (System.IO.File.Exists(filename)) { bool is_old_rankfile = false; string is_old_rankfile_path = ""; string str = IJFile.Read(filename); int version = 0; string[] sArray = str.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); if (!sArray[0].StartsWith("version")) { throw new FormatException(); } foreach (string s in sArray) { if (s.StartsWith("TransDetailOption.")) { trans_detail_option_.SetDataFromLine(s); continue; } string[] sa = s.Split('\t'); if (sa[0] == "version") { version = int.Parse(sa[1]); if (version <= 1560) { MessageBox.Show("動画変換のオプションの一部が変更になりました。\r\n" + "動画変換を行う場合は再設定してください。", "お知らせ"); } } if (sa[0] == "dlrank_category") { category_manager_.SetString(sa[1]); } if (sa.Length < 3 || sa[1] == "") { continue; } if (sa[1] == "textBoxBaseDir") { if (sa[2] != Application.StartupPath && sa[2] != Application.StartupPath + "\\" && sa[2] != "") { MessageBox.Show("「相対指定のときの基準ディレクトリ」は廃止になりました。\r\n" + "基準ディレクトリはプログラムの存在するディレクトリになります。", "お知らせ"); } } if (sa[1] == "textBoxRankFilePath" && sa[2] != "") { is_old_rankfile = true; is_old_rankfile_path = sa[2]; } if (sa[1] == "textBoxMylistRate" && sa[2] != "") { try { numericUpDownMylistRate.Value = decimal.Parse(sa[2]); } catch (FormatException) { } } if (sa[1] == "textBoxConditionMylistNew" && sa[2] != "") { try { numericUpDownConditionMylistNew.Value = decimal.Parse(sa[2]); } catch (FormatException) { } } Control[] c = this.Controls.Find(sa[1], true); if (c.Length > 0) { switch (sa[0]) { case "text": if (version <= 1640) // 過去の互換性のため { if (((TextBox)c[0]).Multiline) { sa[2] = sa[2].Replace("\\n", "\r\n").Replace("(doll-n-nicorank)", "\\n"); } c[0].Text = sa[2]; } else { c[0].Text = IJStringUtil.UnescapeForConfig(sa[2]); } break; case "radio": if (version <= 1930) // 過去の互換性のため { if (sa[1] == "radioButtonBrowserIE6" || sa[1] == "radioButtonBrowserIE7") { radioButtonBrowserIE.Checked = true; } } ((RadioButton)c[0]).Checked = bool.Parse(sa[2]); break; case "checkBox": ((CheckBox)c[0]).Checked = bool.Parse(sa[2]); break; case "listBox": ((ListBox)c[0]).SelectedIndex = int.Parse(sa[2]); break; case "dateTimePicker": ((DateTimePicker)c[0]).Value = NicoUtil.StringToDate(sa[2]); break; case "comboBox": ((ComboBox)c[0]).SelectedIndex = int.Parse(sa[2]); break; case "numericUpDown": ((NumericUpDown)c[0]).Value = decimal.Parse(sa[2]); break; } } } if (is_old_rankfile) { textBoxInputRankFilePath.Text = is_old_rankfile_path; checkBoxIsSameToInput.Checked = true; } } }
public async Task AddFavorite(string id) { await AddFavorite(new TFavorite(NicoUtil.ToContentId(id), DateTime.Now)); }
private async void Initialize(string videoid) { Initialize(await NicoUtil.GetVideo(videoid), false); }
/// <summary> /// html形式の生放送ページから生放送情報を作成します。 /// </summary> public static LiveInfo CreateFromHtml(string idString, string pageStr) { var live = new LiveInfo(); if (string.IsNullOrEmpty(pageStr)) { throw new NicoLiveException( "ページが空です。", idString); } var m = ProviderInfoRegex.Match(pageStr); if (!m.Success) { throw new NicoLiveException( "放送の提供元情報を取得できませんでした。", idString); } var provider = NicoUtil.ParseProvider(m.Groups[1].Value); m = VideoInfoRegex.Match(pageStr); if (!m.Success) { throw new NicoLiveException( "生放送情報を取得できませんでした。", idString); } var infoStr = m.Groups[1].Value; m = IdRegex.Match(infoStr); if (!m.Success) { throw new NicoException( "生放送IDを取得できませんでした。", idString); } live.Id = m.Groups[1].Value; m = TitleRegex.Match(infoStr); if (!m.Success) { throw new NicoException( "生放送タイトルを取得できませんでした。", idString); } live.Title = m.Groups[1].Value .Replace("\\'", "'"); m = DescriptionRegex.Match(infoStr); if (!m.Success) { throw new NicoLiveException( "生放送概要を取得できませんでした。", idString); } live.Description = m.Groups[1].Value .Replace("\\'", "'") .Replace("\\r\\n", "\n"); switch (provider.ProviderType) { case ProviderType.Community: SetCommunityInfo(live, pageStr); break; case ProviderType.Channel: SetChannelInfo(live, pageStr); break; case ProviderType.Official: SetOfficialInfo(live, pageStr); break; default: throw new NotImplementedException( "実装されていない放送提供元です。"); } return(live); }
private void SaveConfig(string filename) { StringBuilder buff = new StringBuilder(); List <Control> control_list = new List <Control>(); GetAllControl(this, ref control_list); buff.Append("version\t" + program_version_.ToString() + "\r\n"); for (int i = 0; i < control_list.Count; ++i) { if (control_list[i] is TextBox) { TextBox c = (TextBox)control_list[i]; if (c.Name == "textBoxUploadText" || c.Name == "textBoxUser" || c.Name == "textBoxPassword" || c.Name == "textBoxInfo" || c.Name == "textBoxEditRankFile" || c.Name == "textBoxEditExclusionList" || c.Name == "textBoxMencWatching" ) { continue; } if (c.Name == "") { continue; } buff.Append("text"); buff.Append('\t'); buff.Append(c.Name); buff.Append('\t'); buff.Append(IJStringUtil.EscapeForConfig(c.Text)); buff.Append("\r\n"); } else if (control_list[i] is RadioButton) { RadioButton c = (RadioButton)control_list[i]; buff.Append("radio"); buff.Append('\t'); buff.Append(c.Name); buff.Append('\t'); buff.Append(c.Checked.ToString()); buff.Append("\r\n"); } else if (control_list[i] is CheckBox) { CheckBox c = (CheckBox)control_list[i]; if (c.Name == "checkBoxTimer1" || c.Name == "checkBoxTimer2" || c.Name == "checkBoxDailyTimer" || c.Name == "checkBoxTimerNews") { continue; } buff.Append("checkBox"); buff.Append('\t'); buff.Append(c.Name); buff.Append('\t'); buff.Append(c.Checked.ToString()); buff.Append("\r\n"); } else if (control_list[i] is ListBox && !(control_list[i] is CheckedListBox)) { ListBox c = (ListBox)control_list[i]; buff.Append("listBox"); buff.Append('\t'); buff.Append(c.Name); buff.Append('\t'); buff.Append(c.SelectedIndex.ToString()); buff.Append("\r\n"); } else if (control_list[i] is DateTimePicker) { DateTimePicker c = (DateTimePicker)control_list[i]; buff.Append("dateTimePicker"); buff.Append('\t'); buff.Append(c.Name); buff.Append('\t'); buff.Append(NicoUtil.DateToString(c.Value)); buff.Append("\r\n"); } else if (control_list[i] is ComboBox) { ComboBox c = (ComboBox)control_list[i]; buff.Append("comboBox"); buff.Append('\t'); buff.Append(c.Name); buff.Append('\t'); buff.Append(c.SelectedIndex.ToString()); buff.Append("\r\n"); } else if (control_list[i] is NumericUpDown) { NumericUpDown c = (NumericUpDown)control_list[i]; buff.Append("numericUpDown"); buff.Append('\t'); buff.Append(c.Name); buff.Append('\t'); buff.Append(c.Value.ToString()); buff.Append("\r\n"); } } if (form_trans_option_ != null) { trans_detail_option_ = form_trans_option_.GetAppOption(); } buff.Append(trans_detail_option_.SaveData()); buff.Append("dlrank_category\t").Append(category_manager_.GetSaveString()).Append("\r\n"); IJFile.Write(filename, buff.ToString()); }