Exemplo n.º 1
0
        /// <summary>
        /// Web上のストリームをダウンロードする
        /// </summary>
        /// <param name="url">URL</param>
        /// <param name="fileName">保存するファイル名</param>
        /// <param name="doDownloadProgressMinimum">ファイルサイズの最小値(0)をセットするデリゲート</param>
        /// <param name="doSetDownloadProgressMaximum">ファイルサイズをセットするデリゲート</param>
        /// <param name="doSetDownloadProgressValue">ダウンロード済みのファイルサイズをセットするデリゲート</param>
        public static void FetchFile(Uri url, string fileName,
                                     FetchEventHandler fetchEventHandler,
                                     FetchEventHandler fetchingEventHandler,
                                     FetchEventHandler fetchedEventHandler)
        {
            WebStream ws = null;

            try
            {
                ws = new WebStream(url);

                switch (PocketLadio.UserSetting.ProxyUse)
                {
                case UserSetting.ProxyConnect.Unuse:
                    ws.ProxyUse = WebStream.ProxyConnect.Unuse;
                    break;

                case UserSetting.ProxyConnect.OsSetting:
                    ws.ProxyUse = WebStream.ProxyConnect.OsSetting;
                    break;

                case UserSetting.ProxyConnect.OriginalSetting:
                    ws.ProxyUse = WebStream.ProxyConnect.OriginalSetting;
                    break;
                }
                ws.ProxyServer = PocketLadio.UserSetting.ProxyServer;
                ws.ProxyPort   = PocketLadio.UserSetting.ProxyPort;
                ws.TimeOut     = PocketLadioInfo.WebRequestTimeoutMillSec;
                ws.UserAgent   = PocketLadioInfo.UserAgent;
                ws.CreateWebStream();

                WebFileFetch fetch = new WebFileFetch(ws);
                if (fetchEventHandler != null)
                {
                    fetch.Fetch += fetchEventHandler;
                }
                if (fetchingEventHandler != null)
                {
                    fetch.Fetching += fetchingEventHandler;
                }
                if (fetchedEventHandler != null)
                {
                    fetch.Fetched += fetchedEventHandler;
                }

                fetch.FetchFile(fileName);
            }
            finally
            {
                if (ws != null)
                {
                    ws.Close();
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// FriendTimelineを取得する
        /// </summary>
        /// <returns>取得したFriendTimelineのステータス情報</returns>
        public StatusInfomation[] FriendTimeline()
        {
            WebStream st = null;

            StatusInfomation[] statuses;

            try
            {
                st       = TwitterAwayUtility.GetWebStream(new Uri(TwitterAwayInfo.TwitterFriendsTimelineXml), userName, password);
                statuses = PaeseStatuses(st);
            }
            finally
            {
                if (st != null)
                {
                    st.Close();
                }
            }

            return(statuses);
        }
Exemplo n.º 3
0
        /// <summary>
        /// PublicTimelineを取得する
        /// </summary>
        /// <returns>取得したPublicTimelineのステータス情報</returns>
        public StatusInfomation[] PublicTimeline()
        {
            WebStream st = null;

            StatusInfomation[] statuses;

            try
            {
                st       = TwitterAwayUtility.GetWebStream(new Uri(TwitterAwayInfo.TwitterPublicTimelineXml));
                statuses = PaeseStatuses(st);
            }
            finally
            {
                if (st != null)
                {
                    st.Close();
                }
            }

            return(statuses);
        }
Exemplo n.º 4
0
        /// <summary>
        /// メッセージをUpdateする
        /// </summary>
        /// <param name="message">メッセージ</param>
        public void Update(string message)
        {
            string sendMessage = string.Empty;

            // 送信メッセージをUTF-8化してバイト列に入れる
            byte[] messageBytes = Encoding.Convert(Encoding.Unicode, Encoding.UTF8, Encoding.Unicode.GetBytes(message));

            // URLエンコード
            foreach (byte b in messageBytes)
            {
                sendMessage += "%" + b.ToString("X2");
            }

            WebStream st = null;

            try
            {
                string send = TwitterAwayInfo.TwitterUpdateXml + "?status=" + sendMessage;
                st = TwitterAwayUtility.GetWebStream(new Uri(send), "POST", userName, password);
            }
            catch (WebException)
            {
                throw;
            }
            catch (UriFormatException)
            {
                throw;
            }
            finally
            {
                if (st != null)
                {
                    st.Close();
                }
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// ヘッドラインをネットから取得する
        /// </summary>
        public virtual void FetchHeadline()
        {
            // 時刻をセットする
            lastCheckTime = DateTime.Now;

            WebStream st = null;

            try
            {
                // チャンネルのリスト
                ArrayList alChannels = new ArrayList();
                Channel   channel    = null;

                string searchWord = ((setting.SearchWord.Length != 0) ? "&s=" + setting.SearchWord : string.Empty);
                // 半角スペースと全角スペースを+に置き換える SHOUTcast上のURLでAND検索のスペースが+に置き換えられるため
                searchWord = searchWord.Replace(' ', '+').Replace(" ", "+");

                string perView = ((setting.PerView.ToString().Length != 0) ? "&numresult=" + setting.PerView : string.Empty);
                Uri    url     = new Uri(Headline.SHOUTCAST_URL + "/?" + searchWord + perView);

                st = PocketLadioUtility.GetWebStream(url);
                WebTextFetch fetch = new WebTextFetch(st, Encoding.GetEncoding("Windows-1252"));
                if (HeadlineFetch != null)
                {
                    fetch.Fetch += HeadlineFetch;
                }
                if (HeadlineFetching != null)
                {
                    fetch.Fetching += HeadlineFetching;
                }
                if (HeadlineFetched != null)
                {
                    fetch.Fetched += HeadlineFetched;
                }
                string httpString = fetch.ReadToEnd();

#if SHOUTCAST_HTTP_LOG
                // ShoutcastのHTTPのログを書き出す
                StreamWriter sw = null;
                try
                {
                    sw = new StreamWriter(
                        AssemblyUtility.GetExecutablePath() + @"\" + PocketLadioInfo.ShoutcastHttpLog,
                        false,
                        Encoding.GetEncoding("Windows-1252"));
                    sw.Write(httpString);
                }
                finally
                {
                    if (sw != null)
                    {
                        sw.Close();
                    }
                }
#endif

                // タグの後に改行を入れる(Willcom高速化サービス対応のため)
                httpString = httpString.Replace(">", ">\n");

                string[] lines = httpString.Split('\n');

                #region HTML解析

                // 順位らしき行
                string maybeRankLine = string.Empty;

                // 1〜指定行目まではHTMLを解析しない
                int analyzeHtmlFirstTo = setting.IgnoreHtmlAnalyzeFirstTo;
                // 指定行目から行末まではHTMLを解析しない
                int analyzeHtmlLast = lines.Length - setting.IgnoreHtmlAnalyzeEndFrom;

                OnHeadlineAnalyze(new HeadlineAnalyzeEventArgs(0, -1));

                // 解析したヘッドラインの個数
                int analyzedCount = 0;

                // HTML解析
                for (int lineNumber = analyzeHtmlFirstTo; lineNumber < analyzeHtmlLast && lineNumber < lines.Length; ++lineNumber)
                {
                    /*** playlist.plsを検索 ***/
                    Match pathMatch = pathRegex.Match(lines[lineNumber]);

                    // playlist.plsが見つかった場合
                    if (pathMatch.Success)
                    {
                        channel = new Channel(this);

                        channel.Path = pathMatch.Groups[1].Value;

                        /*** Rankを検索 ***/
                        Match rankMatch = rankRegex.Match(maybeRankLine);

                        // Rankが見つかった場合
                        if (rankMatch.Success)
                        {
                            channel.Rank = rankMatch.Groups[1].Value;
                        }

                        /*** Categoryを検索 ***/
                        Match categoryMatch;

                        // Categoryが見つからない場合は行を読み飛ばして検索する
                        for (++lineNumber; lineNumber < analyzeHtmlLast; ++lineNumber)
                        {
                            categoryMatch = categoryRegex.Match(lines[lineNumber]);

                            // Categoryが見つかった場合
                            if (categoryMatch.Success)
                            {
                                channel.Category = categoryMatch.Groups[1].Value;
                                break;
                            }
                        }

                        /*** ClusterUrlを検索 ***/
                        Match clusterUrlMatch;

                        // ClusterUrlが見つからない場合は行を読み飛ばして検索する
                        for (; lineNumber < analyzeHtmlLast; ++lineNumber)
                        {
                            clusterUrlMatch = clusterUrlRegex.Match(lines[lineNumber]);

                            // Categoryが見つかった場合
                            if (clusterUrlMatch.Success)
                            {
                                try
                                {
                                    channel.ClusterUrl = new Uri(clusterUrlMatch.Groups[1].Value);
                                }
                                catch (UriFormatException)
                                {
                                    channel.ClusterUrl = null;
                                }
                                break;
                            }
                        }

                        /*** Titleを検索 ***/
                        Match titleMatch;

                        // Titleが見つからない場合は行を読み飛ばして検索する
                        for (; lineNumber < analyzeHtmlLast; ++lineNumber)
                        {
                            titleMatch = titleRegex.Match(lines[lineNumber]);

                            // Titleが見つかった場合
                            if (titleMatch.Success)
                            {
                                channel.Title = titleMatch.Groups[1].Value;
                                break;
                            }
                        }

                        /*** Listenerを検索 ***/
                        Match listenerMatch = listenerRegex.Match(lines[lineNumber]);
                        for (; lineNumber < analyzeHtmlLast; ++lineNumber)
                        {
                            listenerMatch = listenerRegex.Match(lines[lineNumber]);

                            if (listenerMatch.Success)
                            {
                                break;
                            }

                            // Now Playing:は存在しない場合があるのでリスナー数検出の中でチェックを行う
                            Match playingNowMatch = playingNowRegex.Match(lines[lineNumber]);
                            if (playingNowMatch.Success)
                            {
                                Match playingMatch = playingRegex.Match(playingNowMatch.Groups[1].Value);
                                if (playingMatch.Success)
                                {
                                    channel.Playing = playingMatch.Groups[1].Value;
                                }
                            }
                        }
                        try
                        {
                            channel.Listener      = int.Parse(listenerMatch.Groups[1].Value);
                            channel.ListenerTotal = int.Parse(listenerMatch.Groups[2].Value);
                        }
                        catch (ArgumentException)
                        {
                            ;
                        }
                        catch (FormatException)
                        {
                            ;
                        }
                        catch (OverflowException)
                        {
                            ;
                        }

                        /*** Bitrateを検索 ***/
                        Match bitrateMatch;

                        // Bitrateが見つからない場合は行を読み飛ばして検索する
                        for (++lineNumber; lineNumber < analyzeHtmlLast; ++lineNumber)
                        {
                            bitrateMatch = bitRateRegex.Match(lines[lineNumber]);

                            // Bitrateが見つかった場合
                            if (bitrateMatch.Success)
                            {
                                try
                                {
                                    channel.BitRate = int.Parse(bitrateMatch.Groups[1].Value);
                                    break;
                                }
                                catch (ArgumentException)
                                {
                                    ;
                                }
                                catch (FormatException)
                                {
                                    ;
                                }
                                catch (OverflowException)
                                {
                                    ;
                                }
                            }
                        }
                        alChannels.Add(channel);
                        OnHeadlineAnalyzing(new HeadlineAnalyzeEventArgs(++analyzedCount, -1));
                    }

                    /*** Rankらしき行を保存する ***/
                    Match maybeRankLineMatch = maybeRankLineRegex.Match(lines[lineNumber]);

                    if (maybeRankLineMatch.Success)
                    {
                        maybeRankLine = lines[lineNumber];
                    }
                }

                OnHeadlineAnalyzed(new HeadlineAnalyzeEventArgs(analyzedCount, analyzedCount));

                channels = (Channel[])alChannels.ToArray(typeof(Channel));

                #endregion
            }
            finally
            {
                if (st != null)
                {
                    st.Close();
                }
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// ヘッドラインをネットから取得する
        /// </summary>
        public virtual void FetchHeadline()
        {
            if (setting.RssUrl == null)
            {
                return;
            }

            // 時刻をセットする
            lastCheckTime = DateTime.Now;

            WebStream     st     = null;
            XmlTextReader reader = null;

            try
            {
                // 番組のリスト
                ArrayList alChannels = new ArrayList();

                // チャンネル
                Channel channel = null;
                // itemタグの中にいるか
                bool inItemFlag = false;

                // Enclosureの一時リスト
                ArrayList alTempEnclosure = new ArrayList();

                st = PocketLadioUtility.GetWebStream(setting.RssUrl);

                reader = new XmlTextReader(st);

                // 解析したヘッドラインの個数
                int analyzedCount = 0;

                OnHeadlineAnalyze(new HeadlineAnalyzeEventArgs(0, HeadlineAnalyzeEventArgs.UNKNOWN_WHOLE_COUNT));

                while (reader.Read())
                {
                    if (reader.NodeType == XmlNodeType.Element)
                    {
                        if (reader.LocalName == "item")
                        {
                            inItemFlag = true;
                            channel    = new Channel(this);
                        } // End of item
                        // itemタグの中にいる場合
                        else if (inItemFlag == true)
                        {
                            if (reader.LocalName == "title")
                            {
                                channel.Title = reader.ReadString();
                            } // End of title
                            else if (reader.LocalName == "description")
                            {
                                channel.Description = reader.ReadString();
                            } // End of description
                            else if (reader.LocalName == "link")
                            {
                                try
                                {
                                    channel.Link = new Uri(reader.ReadString());
                                }
                                catch (UriFormatException)
                                {
                                    ;
                                }
                            } // End of link
                            else if (reader.LocalName == "pubDate")
                            {
                                channel.SetDate(reader.ReadString());
                            } // End of pubDate
                            else if (reader.LocalName == "category")
                            {
                                channel.Category = reader.ReadString();
                            } // End of category
                            else if (reader.LocalName == "author")
                            {
                                channel.Author = reader.ReadString();
                            } // End of author
                            else if (reader.LocalName == "guid")
                            {
                                try
                                {
                                    channel.Link = new Uri(reader.ReadString());
                                }
                                catch (UriFormatException)
                                {
                                    ;
                                }
                            } // End of guid
                            else if (reader.LocalName == "enclosure")
                            {
                                Uri    enclosureUrl    = null;
                                string enclosureLength = string.Empty;
                                string enclosureType   = string.Empty;

                                try
                                {
                                    if (reader.MoveToFirstAttribute())
                                    {
                                        enclosureUrl    = new Uri(reader.GetAttribute("url"));
                                        enclosureLength = reader.GetAttribute("length");
                                        enclosureType   = reader.GetAttribute("type");
                                    }

                                    if (enclosureLength == null)
                                    {
                                        enclosureLength = string.Empty;
                                    }
                                    if (enclosureType == null)
                                    {
                                        enclosureType = string.Empty;
                                    }

                                    // Enclosureタグの数だけ、 Enclosure一時リストにEnclosureの内容を追加していく
                                    Enclosure enclosure = new Enclosure(enclosureUrl, enclosureLength, enclosureType);
                                    if (enclosure.IsPodcast() == true)
                                    {
                                        alTempEnclosure.Add(enclosure);
                                    }
                                }
                                catch (UriFormatException)
                                {
                                    ;
                                }
                            } // End of enclosure
                        }     // End of itemタグの中にいる場合
                    }
                    else if (reader.NodeType == XmlNodeType.EndElement)
                    {
                        if (reader.LocalName == "item")
                        {
                            inItemFlag = false;
                            // Enclosureの要素の数だけ、Channelの複製を作る
                            if (alTempEnclosure.Count != 0)
                            {
                                foreach (Enclosure enclosure in alTempEnclosure)
                                {
                                    Channel clonedChannel = (Channel)channel.Clone(this);
                                    clonedChannel.Url    = enclosure.Url;
                                    clonedChannel.Length = enclosure.Length;
                                    clonedChannel.Type   = enclosure.Type;
                                    alChannels.Add(clonedChannel);
                                    OnHeadlineAnalyzing(new HeadlineAnalyzeEventArgs(++analyzedCount, HeadlineAnalyzeEventArgs.UNKNOWN_WHOLE_COUNT));
                                }
                            }

                            // Enclosure一時リストをクリア
                            alTempEnclosure.Clear();
                        }
                    }
                }

                OnHeadlineAnalyzed(new HeadlineAnalyzeEventArgs(analyzedCount, analyzedCount));

                channels = (Channel[])alChannels.ToArray(typeof(Channel));
            }
            finally
            {
                if (st != null)
                {
                    st.Close();
                }
                if (reader != null)
                {
                    reader.Close();
                }
            }
        }
Exemplo n.º 7
0
        /// <summary>
        /// ヘッドラインをネットから取得する(DAT v2使用)
        /// </summary>
        private void FetchHeadlineDatV2()
        {
            WebStream st = null;

            string[] channelsDat;
            // チャンネルのリスト
            ArrayList alChannels = new ArrayList();

            try
            {
                st = PocketLadioUtility.GetWebStream(setting.HeadlineDatV2Url);
                WebTextFetch fetch = new WebTextFetch(st, Encoding.GetEncoding("shift-jis"));
                if (HeadlineFetch != null)
                {
                    fetch.Fetch += HeadlineFetch;
                }
                if (HeadlineFetching != null)
                {
                    fetch.Fetching += HeadlineFetching;
                }
                if (HeadlineFetched != null)
                {
                    fetch.Fetched += HeadlineFetched;
                }
                string httpString = fetch.ReadToEnd();
                channelsDat = httpString.Split('\n');
            }
            finally
            {
                if (st != null)
                {
                    st.Close();
                }
            }

            // 番組の総数を数える
            int channelLength = 0;

            for (int i = 0; i < channelsDat.Length; ++i)
            {
                // 空行の場合
                if (channelsDat[i] == string.Empty)
                {
                    ++channelLength;
                }
            }

            OnHeadlineAnalyze(new HeadlineAnalyzeEventArgs(0, channelLength));

            Channel channel = null;
            // 解析済みの番組数
            int channelAnalyzed = 0;

            for (int count = 0; count < channelsDat.Length; ++count)
            {
                // Url取得
                Match urlMatch = urlRegex.Match(channelsDat[count]);
                if (urlMatch.Success)
                {
                    try
                    {
                        if (urlMatch.Groups[1].Value != string.Empty)
                        {
                            if (channel == null)
                            {
                                channel = new Channel(this);
                            }
                            channel.Url = new Uri(urlMatch.Groups[1].Value);
                        }
                    }
                    catch (UriFormatException)
                    {
                        ;
                    }

                    continue;
                }

                // Gnl取得
                Match gnlMatch = gnlRegex.Match(channelsDat[count]);
                if (gnlMatch.Success)
                {
                    if (channel == null)
                    {
                        channel = new Channel(this);
                    }

                    channel.Gnl = gnlMatch.Groups[1].Value;

                    continue;
                }

                Match namMatch = namRegex.Match(channelsDat[count]);
                if (namMatch.Success)
                {
                    if (channel == null)
                    {
                        channel = new Channel(this);
                    }

                    channel.Nam = namMatch.Groups[1].Value;

                    continue;
                }

                Match mntMatch = mntRegex.Match(channelsDat[count]);
                if (mntMatch.Success)
                {
                    if (channel == null)
                    {
                        channel = new Channel(this);
                    }

                    channel.Mnt = mntMatch.Groups[1].Value;

                    continue;
                }

                Match timsMatch = timsRegex.Match(channelsDat[count]);
                if (timsMatch.Success)
                {
                    if (channel == null)
                    {
                        channel = new Channel(this);
                    }

                    channel.SetTims(timsMatch.Groups[1].Value);

                    continue;
                }

                // Cln取得
                Match clnMatch = clnRegex.Match(channelsDat[count]);
                if (clnMatch.Success)
                {
                    try
                    {
                        if (channel == null)
                        {
                            channel = new Channel(this);
                        }

                        channel.Cln = int.Parse(clnMatch.Groups[1].Value);
                    }
                    catch (ArgumentException)
                    {
                        ;
                    }
                    catch (FormatException)
                    {
                        ;
                    }
                    catch (OverflowException)
                    {
                        ;
                    }

                    continue;
                }

                // Clns取得
                Match clnsMatch = clnsRegex.Match(channelsDat[count]);
                if (clnsMatch.Success)
                {
                    try
                    {
                        if (channel == null)
                        {
                            channel = new Channel(this);
                        }

                        channel.Clns = int.Parse(clnsMatch.Groups[1].Value);
                    }
                    catch (ArgumentException)
                    {
                        ;
                    }
                    catch (FormatException)
                    {
                        ;
                    }
                    catch (OverflowException)
                    {
                        ;
                    }

                    continue;
                }

                Match maxMatch = maxRegex.Match(channelsDat[count]);
                if (maxMatch.Success)
                {
                    if (channel == null)
                    {
                        channel = new Channel(this);
                    }

                    continue;
                }

                Match srvMatch = srvRegex.Match(channelsDat[count]);
                if (srvMatch.Success)
                {
                    if (channel == null)
                    {
                        channel = new Channel(this);
                    }

                    channel.Srv = srvMatch.Groups[1].Value;

                    continue;
                }

                Match prtMatch = prtRegex.Match(channelsDat[count]);
                if (prtMatch.Success)
                {
                    if (channel == null)
                    {
                        channel = new Channel(this);
                    }

                    channel.Prt = prtMatch.Groups[1].Value;

                    continue;
                }

                Match bitMatch = bitRegex.Match(channelsDat[count]);
                if (bitMatch.Success)
                {
                    try
                    {
                        if (channel == null)
                        {
                            channel = new Channel(this);
                        }

                        channel.Bit = int.Parse(bitMatch.Groups[1].Value);
                    }
                    catch (ArgumentException)
                    {
                        ;
                    }
                    catch (FormatException)
                    {
                        ;
                    }
                    catch (OverflowException)
                    {
                        ;
                    }

                    continue;
                }

                Match songMatch = songRegex.Match(channelsDat[count]);
                if (prtMatch.Success)
                {
                    if (channel == null)
                    {
                        channel = new Channel(this);
                    }

                    channel.Tit = songMatch.Groups[1].Value;

                    continue;
                }

                if (channelsDat[count] == string.Empty)
                {
                    if (channel != null)
                    {
                        alChannels.Add(channel);
                        OnHeadlineAnalyzing(new HeadlineAnalyzeEventArgs(++channelAnalyzed, channelLength));
                        channel = null;
                    }
                }
            }

            OnHeadlineAnalyzed(new HeadlineAnalyzeEventArgs(channelLength, channelLength));

            channels = (Channel[])alChannels.ToArray(typeof(Channel));
        }
Exemplo n.º 8
0
        /// <summary>
        /// ヘッドラインをネットから取得する(XML使用)
        /// </summary>
        private void FetchHeadlineXml()
        {
            WebStream     st     = null;
            XmlTextReader reader = null;

            try
            {
                // 番組のリスト
                ArrayList alChannels = new ArrayList();

                st = PocketLadioUtility.GetWebStream(setting.HeadlineXmlUrl);

                reader = new XmlTextReader(st);

                // チャンネル
                Channel channel = new Channel(this);
                // sourceタグの中にいるか
                bool inSourceFlag = false;

                // 解析したヘッドラインの個数
                int analyzedCount = 0;

                OnHeadlineAnalyze(new HeadlineAnalyzeEventArgs(0, HeadlineAnalyzeEventArgs.UNKNOWN_WHOLE_COUNT));

                while (reader.Read())
                {
                    if (reader.NodeType == XmlNodeType.Element)
                    {
                        if (reader.LocalName == "source")
                        {
                            inSourceFlag = true;
                            channel      = new Channel(this);
                        } // End of source
                        // sourceタグの中にいる場合
                        else if (inSourceFlag == true)
                        {
                            if (reader.LocalName == "url")
                            {
                                try
                                {
                                    string url = reader.ReadString();
                                    if (url != string.Empty)
                                    {
                                        channel.Url = new Uri(url);
                                    }
                                }
                                catch (UriFormatException)
                                {
                                    ;
                                }
                            } // End of url
                            else if (reader.LocalName == "gnl")
                            {
                                channel.Gnl = reader.ReadString();
                            } // End of gnl
                            else if (reader.LocalName == "nam")
                            {
                                channel.Nam = reader.ReadString();
                            } // End of nam
                            else if (reader.LocalName == "tit")
                            {
                                channel.Tit = reader.ReadString();
                            } // End of tit
                            else if (reader.LocalName == "mnt")
                            {
                                channel.Mnt = reader.ReadString();
                            } // End of mnt
                            else if (reader.LocalName == "tim")
                            {
                                channel.SetTim(reader.ReadString());
                            } // End of tim
                            else if (reader.LocalName == "tims")
                            {
                                channel.SetTims(reader.ReadString());
                            } // End of tims
                            else if (reader.LocalName == "cln")
                            {
                                try
                                {
                                    channel.Cln = int.Parse(reader.ReadString());
                                }
                                catch (ArgumentException)
                                {
                                    ;
                                }
                                catch (FormatException)
                                {
                                    ;
                                }
                                catch (OverflowException)
                                {
                                    ;
                                }
                            } // End of cln
                            else if (reader.LocalName == "clns")
                            {
                                try
                                {
                                    channel.Clns = int.Parse(reader.ReadString());
                                }
                                catch (ArgumentException)
                                {
                                    ;
                                }
                                catch (FormatException)
                                {
                                    ;
                                }
                                catch (OverflowException)
                                {
                                    ;
                                }
                            } // End of clns
                            else if (reader.LocalName == "srv")
                            {
                                channel.Srv = reader.ReadString();
                            } // End of srv
                            else if (reader.LocalName == "prt")
                            {
                                channel.Prt = reader.ReadString();
                            } // End of prt
                            else if (reader.LocalName == "typ")
                            {
                                channel.Typ = reader.ReadString();
                            } // End of typ
                            else if (reader.LocalName == "bit")
                            {
                                try
                                {
                                    channel.Bit = int.Parse(reader.ReadString());
                                }
                                catch (ArgumentException)
                                {
                                    ;
                                }
                                catch (FormatException)
                                {
                                    ;
                                }
                                catch (OverflowException)
                                {
                                    ;
                                }
                            } // End of bit
                        }     // End of sourceタグの中にいる場合
                    }
                    else if (reader.NodeType == XmlNodeType.EndElement)
                    {
                        if (reader.LocalName == "source")
                        {
                            inSourceFlag = false;
                            alChannels.Add(channel);
                            OnHeadlineAnalyzing(new HeadlineAnalyzeEventArgs(++analyzedCount, HeadlineAnalyzeEventArgs.UNKNOWN_WHOLE_COUNT));
                        }
                    }
                }

                OnHeadlineAnalyzed(new HeadlineAnalyzeEventArgs(analyzedCount, analyzedCount));

                channels = (Channel[])alChannels.ToArray(typeof(Channel));
            }
            finally
            {
                if (st != null)
                {
                    st.Close();
                }
                if (reader != null)
                {
                    reader.Close();
                }
            }
        }
Exemplo n.º 9
0
        /// <summary>
        /// ヘッドラインをネットから取得する(CVS使用)
        /// </summary>
        private void FetchHeadlineCvs()
        {
            WebStream st = null;

            string[] channelsCvs;
            // チャンネルのリスト
            ArrayList alChannels = new ArrayList();

            try
            {
                st = PocketLadioUtility.GetWebStream(setting.HeadlineCsvUrl);
                WebTextFetch fetch = new WebTextFetch(st, Encoding.GetEncoding("shift-jis"));
                if (HeadlineFetch != null)
                {
                    fetch.Fetch += HeadlineFetch;
                }
                if (HeadlineFetching != null)
                {
                    fetch.Fetching += HeadlineFetching;
                }
                if (HeadlineFetched != null)
                {
                    fetch.Fetched += HeadlineFetched;
                }
                string httpString = fetch.ReadToEnd();
                channelsCvs = httpString.Split('\n');
            }
            finally
            {
                if (st != null)
                {
                    st.Close();
                }
            }

            OnHeadlineAnalyze(new HeadlineAnalyzeEventArgs(0, channelsCvs.Length - 1));

            // 1行目はヘッダなので無視
            for (int count = 1; count < channelsCvs.Length; ++count)
            {
                if (channelsCvs[count].Length > 0)
                {
                    Channel  channel    = new Channel(this);
                    string[] channelCsv = channelsCvs[count].Split(',');

                    // CVS列が11列以上の場合のみ番組とみなす
                    if (channelCsv.Length >= 11)
                    {
                        // Url取得
                        try
                        {
                            if (channelCsv[0] != string.Empty)
                            {
                                channel.Url = new Uri(channelCsv[0]);
                            }
                        }
                        catch (UriFormatException)
                        {
                            ;
                        }
                        // PC上で起きることを確認したが、対処するべきか分からないのでとりあえず無視
                        catch (IndexOutOfRangeException)
                        {
                            ;
                        }

                        // Gnl取得
                        channel.Gnl = channelCsv[1];

                        // Nam取得
                        channel.Nam = channelCsv[2];

                        // Tit取得
                        channel.Tit = channelCsv[3];

                        // Mnt取得
                        channel.Mnt = channelCsv[4];

                        // Tim取得
                        channel.SetTim(channelCsv[5]);

                        // Tims取得
                        channel.SetTims(channelCsv[6]);

                        try
                        {
                            // Cln取得
                            channel.Cln = int.Parse(channelCsv[7]);
                        }
                        catch (ArgumentException)
                        {
                            ;
                        }
                        catch (FormatException)
                        {
                            ;
                        }
                        catch (OverflowException)
                        {
                            ;
                        }

                        try
                        {
                            // Clns取得
                            channel.Clns = int.Parse(channelCsv[8]);
                        }
                        catch (ArgumentException)
                        {
                            ;
                        }
                        catch (FormatException)
                        {
                            ;
                        }
                        catch (OverflowException)
                        {
                            ;
                        }

                        // Srv取得
                        channel.Srv = channelCsv[9];

                        // Prt取得
                        channel.Prt = channelCsv[10];

                        if (channelCsv.Length >= 12)
                        {
                            // Typ取得
                            channel.Typ = channelCsv[11];
                        }

                        if (channelCsv.Length >= 13)
                        {
                            try
                            {
                                // Bit取得
                                channel.Bit = int.Parse(channelCsv[12]);
                            }
                            catch (ArgumentException)
                            {
                                ;
                            }
                            catch (FormatException)
                            {
                                ;
                            }
                            catch (OverflowException)
                            {
                                ;
                            }
                        }

                        alChannels.Add(channel);
                    }
                }

                OnHeadlineAnalyzing(new HeadlineAnalyzeEventArgs(count, channelsCvs.Length - 1));
            }

            OnHeadlineAnalyzed(new HeadlineAnalyzeEventArgs(channelsCvs.Length - 1, channelsCvs.Length - 1));

            channels = (Channel[])alChannels.ToArray(typeof(Channel));
        }
Exemplo n.º 10
0
        /// <summary>
        /// ヘッドラインをネットから取得する
        /// </summary>
        public virtual void FetchHeadline()
        {
            // 時刻をセットする
            lastCheckTime = DateTime.Now;

            WebStream     st     = null;
            XmlTextReader reader = null;

            try
            {
                // 番組のリスト
                ArrayList alChannels = new ArrayList();

                // チャンネル
                Channel channel = null;
                // itemタグの中にいるか
                bool inEntry = false;

                st = PocketLadioUtility.GetWebStream(new Uri(Headline.ICECAST_URL));

                reader = new XmlTextReader(st);

                // 解析したヘッドラインの個数
                int analyzedCount = 0;

                OnHeadlineAnalyze(new HeadlineAnalyzeEventArgs(0, HeadlineAnalyzeEventArgs.UNKNOWN_WHOLE_COUNT));

                while (reader.Read())
                {
                    if (reader.NodeType == XmlNodeType.Element)
                    {
                        if (reader.LocalName == "entry")
                        {
                            inEntry = true;
                            channel = new Channel(this);
                        } // End of item
                        // Entryタグの中にいる場合
                        else if (inEntry == true)
                        {
                            if (reader.LocalName == "server_name")
                            {
                                channel.ServerName = reader.ReadString();
                            } // End of server_name
                            else if (reader.LocalName == "listen_url")
                            {
                                try
                                {
                                    channel.ListenUrl = new Uri(reader.ReadString());
                                }
                                catch (UriFormatException)
                                {
                                    ;
                                }
                            } // End of listen_url
                            else if (reader.LocalName == "server_type")
                            {
                                channel.ServerType = reader.ReadString();
                            } // End of server_type
                            else if (reader.LocalName == "bitrate")
                            {
                                try
                                {
                                    channel.BitRate = int.Parse(reader.ReadString());
                                }
                                catch (ArgumentException)
                                {
                                    ;
                                }
                                catch (FormatException)
                                {
                                    ;
                                }
                                catch (OverflowException)
                                {
                                    ;
                                }
                            } // End of bitrate
                            else if (reader.LocalName == "channels")
                            {
                                channel.Channels = reader.ReadString();
                            } // End of channels
                            else if (reader.LocalName == "samplerate")
                            {
                                try
                                {
                                    channel.SampleRate = int.Parse(reader.ReadString());
                                }
                                catch (ArgumentException)
                                {
                                    ;
                                }
                                catch (FormatException)
                                {
                                    ;
                                }
                                catch (OverflowException)
                                {
                                    ;
                                }
                            } // End of samplerate
                            else if (reader.LocalName == "genre")
                            {
                                channel.Genre = reader.ReadString();
                            } // End of genre
                            else if (reader.LocalName == "current_song")
                            {
                                channel.CurrentSong = reader.ReadString();
                            } // End of current_song
                        }     // End of entryタグの中にいる場合
                    }
                    else if (reader.NodeType == XmlNodeType.EndElement)
                    {
                        if (reader.LocalName == "entry")
                        {
                            inEntry = false;
                            alChannels.Add(channel);
                            OnHeadlineAnalyzing(new HeadlineAnalyzeEventArgs(++analyzedCount, HeadlineAnalyzeEventArgs.UNKNOWN_WHOLE_COUNT));
                            // 指定の数のヘッドラインを取得し終わったら終了
                            if (setting.FetchChannelNum != Icecast.UserSetting.ALL_CHANNEL_FETCH && analyzedCount >= setting.FetchChannelNum)
                            {
                                break;
                            }
                        }
                    }
                }

                OnHeadlineAnalyzed(new HeadlineAnalyzeEventArgs(analyzedCount, HeadlineAnalyzeEventArgs.UNKNOWN_WHOLE_COUNT));

                channels = (Channel[])alChannels.ToArray(typeof(Channel));
            }
            finally
            {
                if (st != null)
                {
                    st.Close();
                }
                if (reader != null)
                {
                    reader.Close();
                }
            }
        }
Exemplo n.º 11
0
        /// <summary>
        /// 放送局名をネットから取得して返す
        /// </summary>
        /// <returns>ネットから取得した放送局名</returns>
        public virtual string FetchStationName()
        {
            WebStream st     = null;
            XmlReader reader = null;

            try
            {
                string title = null;

                // itemタグの中にいるか
                bool inItemFlag = false;
                // channelタグの中にいるか
                bool inChannelFlag = false;

                st     = PodcasCoUtility.GetWebStream(setting.RssUrl);
                reader = new XmlTextReader(st);

                while (reader.Read())
                {
                    if (reader.NodeType == XmlNodeType.Element)
                    {
                        if (reader.LocalName == "channel")
                        {
                            inChannelFlag = true;
                        }
                        // トップ下のtitleの内容を返す
                        if (reader.LocalName == "title" && inChannelFlag == true && inItemFlag == false)
                        {
                            title = reader.ReadString();
                            return(title);
                        } // End of title
                        else if (reader.LocalName == "item")
                        {
                            inItemFlag = true;
                        } // End of item
                    }
                    else if (reader.NodeType == XmlNodeType.EndElement)
                    {
                        if (reader.LocalName == "channel")
                        {
                            inChannelFlag = false;
                        }
                        else if (reader.LocalName == "item")
                        {
                            inItemFlag = false;
                        }
                    }
                }

                // トップ下のtitleが見あたらないために、とりあえずUrlを返しておく
                return((title != null) ? title : setting.RssUrl.ToString());
            }
            finally
            {
                if (st != null)
                {
                    st.Close();
                }
                if (reader != null)
                {
                    reader.Close();
                }
            }
        }
Exemplo n.º 12
0
        /// <summary>
        /// Web上のストリームをダウンロードする
        /// </summary>
        /// <param name="url">URL</param>
        /// <param name="fileName">保存するファイル名</param>
        /// <param name="doDownloadProgressMinimum">ファイルサイズの最小値(0)をセットするデリゲート</param>
        /// <param name="doSetDownloadProgressMaximum">ファイルサイズをセットするデリゲート</param>
        /// <param name="doSetDownloadProgressValue">ダウンロード済みのファイルサイズをセットするデリゲート</param>
        public static void FetchFile(Uri url, string fileName,
                                     FetchEventHandler fetchEventHandler,
                                     FetchEventHandler fetchingEventHandler,
                                     FetchEventHandler fetchedEventHandler)
        {
            WebStream ws = null;

            try
            {
                ws = new WebStream(url);

                switch (PodcasCo.UserSetting.ProxyUse)
                {
                case UserSetting.ProxyConnect.Unuse:
                    ws.ProxyUse = WebStream.ProxyConnect.Unuse;
                    break;

                case UserSetting.ProxyConnect.OsSetting:
                    ws.ProxyUse = WebStream.ProxyConnect.OsSetting;
                    break;

                case UserSetting.ProxyConnect.OriginalSetting:
                    ws.ProxyUse = WebStream.ProxyConnect.OriginalSetting;
                    break;
                }
                ws.ProxyServer = PodcasCo.UserSetting.ProxyServer;
                ws.ProxyPort   = PodcasCo.UserSetting.ProxyPort;
                ws.TimeOut     = PodcasCoInfo.WebRequestTimeoutMillSec;
                ws.UserAgent   = PodcasCoInfo.UserAgent;

                ws.SetResume(fileName);
                try
                {
                    ws.CreateWebStream();
                    WebFileFetch fetch = new WebFileFetch(ws);
                    fetch.DownLoadBufferSize = PodcasCo.UserSetting.DownLoadBufferSize;
                    if (fetchEventHandler != null)
                    {
                        fetch.Fetch += fetchEventHandler;
                    }
                    if (fetchingEventHandler != null)
                    {
                        fetch.Fetching += fetchingEventHandler;
                    }
                    if (fetchedEventHandler != null)
                    {
                        fetch.Fetched += fetchedEventHandler;
                    }
                    fetch.FetchFile(fileName);
                }
                catch (MismatchFetchFileException)
                {
                    // ダウンロードすべきよりも、すでにダウンロードしているファイルの方が大きい場合は
                    // 一端ファイルを削除し、リジュームを無効にする
                    File.Delete(fileName);
                    ws.RemoveResume();
                    ws.CreateWebStream();
                    WebFileFetch fetch = new WebFileFetch(ws);
                    fetch.DownLoadBufferSize = PodcasCo.UserSetting.DownLoadBufferSize;
                    if (fetchEventHandler != null)
                    {
                        fetch.Fetch += fetchEventHandler;
                    }
                    if (fetchingEventHandler != null)
                    {
                        fetch.Fetching += fetchingEventHandler;
                    }
                    if (fetchedEventHandler != null)
                    {
                        fetch.Fetched += fetchedEventHandler;
                    }
                    fetch.FetchFile(fileName);
                }
                catch (AlreadyFetchFileException)
                {
                    // ファイルがすでに存在する場合は何もしない
                    ;
                }
            }
            finally
            {
                if (ws != null)
                {
                    ws.Close();
                }
            }
        }