Пример #1
0
        /// <summary>
        /// 番組表取得処理
        /// </summary>
        /// <param name="stationId"></param>
        /// <returns></returns>
        private List <Entities.Program> RefreshPrograms(string stationId)
        {
            using (SqliteConnection)
            {
                var sModel   = new StationModel(SqliteConnection);
                var station  = sModel.GetById(stationId);
                var programs = new List <Entities.Program>();
                if (station == null)
                {
                    return(programs);
                }

                switch (station.Type)
                {
                case Define.Radiko.TypeName:

                    programs = Radiko.GetPrograms(station).Result;
                    break;

                case Define.Nhk.TypeName:
                    programs = Nhk.GetPrograms(station, DateTime.Now, DateTime.Now.AddDays(1)).Result;
                    break;
                }


                var pModel = new ProgramModel(SqliteConnection);
                pModel.Refresh(programs);

                return(programs);
            }
        }
Пример #2
0
        /// <summary>
        /// タイムフリー
        /// </summary>
        /// <param name="program"></param>
        /// <returns></returns>
        public async Task TimeFree(Entities.Program program)
        {
            try
            {
                Status    = RecorderStatus.Working;
                _duration = (int)(program.End - program.Start).TotalSeconds;
                await Radiko.Login(Config.RadikoEmail, Config.RadikoPassword);


                _program = program;
                Directory.CreateDirectory(Path.Combine("wwwroot", "records"));
                _filename = Path.GetFullPath(Path.Combine("wwwroot", "records", $"{Guid.NewGuid().ToString()}.m4a"));
                StartTime = DateTime.Now;
                var m3U8 = await Radiko.GetTimeFreeM3U8(program);

                var arg = Define.Radiko.TimeFreeFfmpegArgs.Replace("[M3U8]", m3U8).Replace("[FILE]", _filename);
                arg = Replace(arg, _program);
                CreateProcess(arg);


                _ffmpeg.Start();

                _ffmpeg.BeginOutputReadLine();
                _ffmpeg.BeginErrorReadLine();
            }
            catch (Exception ex)
            {
                Global.Logger.Error($"{ex.Message}¥n{ex.StackTrace}");
            }
        }
Пример #3
0
        /// <summary>
        /// 全番組表再取得
        /// </summary>
        private void RefreshTimeTable()
        {
            using (var con = new SqliteConnection($"Data Source={Define.File.DbFile}"))
            {
                var sw = new Stopwatch();
                sw.Start();
                con.Open();
                var sModel = new StationModel(con);
                var pModel = new ProgramModel(con);
                foreach (var station in sModel.Get(Define.Radiko.TypeName))
                {
                    try
                    {
                        var programs = Radiko.GetPrograms(station).Result;
                        pModel.Refresh(programs);
                    }
                    catch (Exception e)
                    {
                        Global.Logger.Error($"{e.Message}¥r¥n{e.StackTrace}");
                    }
                }

                _refreshTimetableDate = DateTime.Now;
                _timetableLock        = false;
                sw.Stop();
                Global.Logger.Info($"番組表全更新:{sw.Elapsed}");
            }
        }
Пример #4
0
        public async Task <ApiResponse> Post(string type)
        {
            return(await Execute(() =>
            {
                using (SqliteConnection)
                {
                    var stations = new List <Station>();
                    switch (type)
                    {
                    case Define.Radiko.TypeName:
                        var cMolde = new ConfigModel(SqliteConnection);
                        var config = cMolde.Get();
                        var login = !string.IsNullOrWhiteSpace(config?.RadikoEmail) &&
                                    !string.IsNullOrEmpty(config.RadikoPassword) &&
                                    Radiko.Login(config.RadikoEmail, config.RadikoPassword).Result;
                        stations = Radiko.GetStations(login).Result;
                        break;

                    case Define.Nhk.TypeName:
                        stations = Nhk.GetStations().Result;
                        break;
                    }

                    var model = new StationModel(SqliteConnection);
                    model.Refresh(stations);

                    Result.Data = stations;
                    Result.Result = true;
                }
            }));
        }
Пример #5
0
        static void Main(string[] args)
        {
            Radiko radio = new Radiko("JP13");

            Task.Run(async() =>
            {
                List <ProgramInfo> programInfoList = await radio.GetProgramGuideAsync(GuideType.DateSpecification, DateTime.Now);
                foreach (var programInfo in programInfoList)
                {
                    Console.WriteLine($"{programInfo.OnAirDateTime.ToString("yyyy/MM/dd HH:mm:ss")}:[{programInfo.StationId}]{programInfo.StationName}:{programInfo.Title}:{programInfo.OnAirTime}:{programInfo.Url}");
                }
            });

            Console.ReadKey();
        }
Пример #6
0
        /// <summary>
        /// 録音開始
        /// </summary>
        /// <returns></returns>
        public async Task Start()
        {
            try
            {
                Status = RecorderStatus.Working;
                using (var con = new SqliteConnection($"Data Source={Define.File.DbFile}"))
                {
                    var pModel = new ProgramModel(con);
                    _program = pModel.Search(new ProgramSearchCondition()
                    {
                        StationId = Task.Station.Id, From = Task.Reserve.Start, To = Task.Reserve.End
                    }).FirstOrDefault();
                    _program.Station = Task.Station;
                }

                if (Task.Reserve.IsTimeFree)
                {
                    // 番組情報取得
                    using (var con = new SqliteConnection($"Data Source={Define.File.DbFile}"))
                    {
                        _ = TimeFree(_program);
                    }
                }
                else
                {
                    await Radiko.Login(Config.RadikoEmail, Config.RadikoPassword);

                    Directory.CreateDirectory(Path.Combine("wwwroot", "records"));
                    _filename = Path.GetFullPath(Path.Combine("wwwroot", "records", $"{Guid.NewGuid().ToString()}.m4a"));
                    StartTime = DateTime.Now;
                    _token    = await Radio.Radiko.GetAuthToken();

                    var arg = Define.Radiko.RealTimeFfmpegArgs.Replace("[TOKEN]", _token)
                              .Replace("[TIME]", (Task.End.AddSeconds(Define.Radiko.EndSec) - DateTime.Now).ToString(@"hh\:mm\:ss"))
                              .Replace("[FILE]", _filename);
                    arg = Replace(arg, _program);
                    CreateProcess(arg);

                    _ffmpeg.Start();
                    _ffmpeg.BeginOutputReadLine();
                    _ffmpeg.BeginErrorReadLine();
                }
            }
            catch (Exception ex)
            {
                var a = ex.Message;
            }
        }