/// <summary> /// 放送情報の取得を開始します。 /// </summary> private static void BeginGetLiveInfo(long liveId, InternalData internalData, AutoResetEvent ev) { WebUtil.RequestHttpTextAsync( NicoString.GetLiveUrl(liveId), null, internalData.Cookie, Encoding.UTF8, (result, text) => { try { // 放送情報が取得できなければエラーとします。 var v = LiveInfo.CreateFromHtml( string.Format("lv{0}", liveId), text); internalData.LiveStreamInfo.LiveInfo = v; } catch (Exception ex) { internalData.Exception = ex; } ev.Set(); }); }
/// <summary> /// 現在放送中の放送アドレスを放送ページから取得します。 /// </summary> private static string GetCurrentLiveUrlFromLive(int communityId, CookieContainer cc) { try { var responseText = WebUtil.RequestHttpText( NicoString.GetLiveUrl("co" + communityId), null, cc, Encoding.UTF8); if (string.IsNullOrEmpty(responseText)) { return(null); } if (!HarajukuNowOnAirRegex.IsMatch(responseText) && !QwatchNowOnAirRegex.IsMatch(responseText)) { // 放送中ではありません。 return(null); } var m = CurrentLiveRegexLivePage.Match(responseText); if (!m.Success) { // 放送IDが見つかりません。 return(null); } var liveId = long.Parse(m.Groups[1].Value); return(NicoString.GetLiveUrl(liveId)); } catch (Exception ex) { Util.ThrowIfFatal(ex); Log.ErrorException(ex, "co{0}: 放送ページの取得に失敗しました。", communityId); } return(null); }
/// <summary> /// Urlから生放送情報を取得します。 /// </summary> public static LiveInfo Create(long liveId, CookieContainer cc) { // urlを取得します。 var responseData = WebUtil.RequestHttp( NicoString.GetLiveUrl(liveId), null, cc); // 失敗;; エラー時はレスポンスが空になります。 if (responseData == null) { throw new NicoException( "放送ページの取得に失敗しました。", NicoString.LiveIdString(liveId)); } var text = Encoding.UTF8.GetString(responseData); return(CreateFromHtml(NicoString.LiveIdString(liveId), text)); }
/// <summary> /// 現在放送中の放送アドレスをコミュニティから取得します。 /// </summary> private static string GetCurrentLiveUrlFromCommunity(int communityId, CookieContainer cc) { try { var responseText = WebUtil.RequestHttpText( NicoString.GetCommunityUrl(communityId), null, cc, Encoding.UTF8); if (string.IsNullOrEmpty(responseText)) { return(null); } var m = CurrentLiveCommunityPageRegex.Match(responseText); if (!m.Success) { return(null); } var liveId = long.Parse(m.Groups[1].Value); return(NicoString.GetLiveUrl(liveId)); } catch (WebException) { // クローズコミュニティの場合はこの例外が発生します。 } catch (Exception ex) { Util.ThrowIfFatal(ex); Log.ErrorException(ex, "co{0}: コミュニティページの取得に失敗しました。", communityId); } return(null); }