Example #1
0
        /// <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();
            });
        }
Example #2
0
        /// <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);
        }
Example #3
0
        /// <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));
        }
Example #4
0
        /// <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);
        }