/// <summary> /// 运行 /// </summary> /// <param name="args">运行参数</param> public void Execute(params string[] args) { try { PrintEnvironment(); //获取系统环境变量 var logfile = Environment.GetEnvironmentVariable("DOTNET_SPIDER_id"); logfile = string.IsNullOrWhiteSpace(logfile) ? "dotnet-spider.log" : $"/logs/{logfile}.log"; Environment.SetEnvironmentVariable("logfile", logfile); ConfigureSerialLog(logfile); Framework.SetMultiThread(); var configurationBuilder = new ConfigurationBuilder(); configurationBuilder.SetBasePath(AppDomain.CurrentDomain.BaseDirectory); configurationBuilder.AddEnvironmentVariables(prefix: "DOTNET_SPIDER_"); configurationBuilder.AddCommandLine(Environment.GetCommandLineArgs(), Framework.SwitchMappings); var configuration = configurationBuilder.Build(); string spiderTypeName = configuration["type"]; if (string.IsNullOrWhiteSpace(spiderTypeName)) { Log.Logger.Error("未指定需要执行的爬虫类型"); } var name = configuration["name"]; var id = configuration["id"] ?? Guid.NewGuid().ToString("N"); var arguments = configuration["args"]?.Split(' '); var spiderTypes = DetectSpiders(); if (spiderTypes == null || spiderTypes.Count == 0) { return; } var spiderType = spiderTypes.FirstOrDefault(x => x.UnderlyingSystemType.ToString().ToLower() == spiderTypeName.ToLower()); if (spiderType == null) { Log.Logger.Error($"未找到爬虫: {spiderTypeName}", 0, ConsoleColor.DarkYellow); return; } var builder = new SpiderHostBuilder(); ConfigureService(configuration, builder); builder.Register(spiderType); var provider = builder.Build(); var instance = provider.Create(spiderType); if (instance != null) { instance.Name = name; instance.Id = id; instance.RunAsync(arguments).ConfigureAwait(true).GetAwaiter().GetResult(); } else { Log.Logger.Error("创建爬虫对象失败", 0, ConsoleColor.DarkYellow); } } catch (Exception e) { Log.Logger.Error($"执行失败: {e}"); } }
protected abstract void ConfigureService(IConfiguration configuration, SpiderHostBuilder builder);