public override IEnumerable <AbstractJob> GetJobs(JobType type, JobScope scope, IEnumerable <string> names, JobConfiguration jobConfiguration) { if (CheckTypeAndScope(type, scope) || !CheckNameIsScope(names)) { return(NoJobs); } Schemas = SchemaLoader.SchemaList(); var jobs = new List <FacebookFetcher>(); try { foreach (var schemaName in Schemas) { foreach (var file in Directory.GetFiles(SchemaLoader.GetCredentialPath(schemaName))) { if (!file.Contains("_credentials.json")) { continue; } SchemaLoader.credentialFileName = file; var schema = SchemaLoader.LoadSchema(schemaName); var apiMan = new ApiManager( SchemaLoader.GetCredentials(schemaName), IgnoreCache, jobConfiguration.IgnoreAPI, jobConfiguration.IgnoreTTL, jobConfiguration.Paginate, schema.Delay, CacheDirectory, jobConfiguration.DefaultNowDate ); var fetcher = new Fetcher(apiMan, schema.PageSize); var customEdge = new CustomEdge(); if (schemaName == "adaccount") { var pageSchema = SchemaLoader.LoadSchema("page"); var pageCredentials = SchemaLoader.GetCredentials("page"); var pageApiMan = new ApiManager( SchemaLoader.GetCredentials("page"), IgnoreCache, jobConfiguration.IgnoreAPI, jobConfiguration.IgnoreTTL, jobConfiguration.Paginate, schema.Delay, CacheDirectory, jobConfiguration.DefaultNowDate ); var pageFetcher = new Fetcher(pageApiMan, pageSchema.PageSize); var key = (SchemaName : "adaccount", TableName : "ads", CustomEdgeName : "custom_videos"); if (!customEdge.ContainsKey(key)) { Action <Logger, JObject> callback = (logger, parent) => { var creative = parent["creative"]; var video = creative ? ["video_id"]; if (video != null) { pageFetcher.GetRoot(pageSchema, "videos", video, logger); } var sourceFileVideoId = creative.IndexPathOrDefault <string>("object_story_spec.video_data.video_id", null); if (sourceFileVideoId != null) { pageFetcher.GetRoot(pageSchema, "videos", sourceFileVideoId, logger); } var post = creative ? ["object_story_id"]; if (post != null) { pageFetcher.GetRoot(pageSchema, "posts", post, logger); } }; customEdge.Add(key, callback); } } if (Schemas.Count == 1 && TableKey != null) { // DEPRECATED: case in which the user specified a single edge to be executed jobs.Add(new FacebookFetcher(schema, TableKey, EdgeKey, fetcher, customEdge)); } else { foreach (var edge in schema.Edges) { jobs.Add(new FacebookFetcher(schema, edge.Key, null, fetcher, customEdge, apiMan.Secret.Id)); } if (schemaName == "instagram") { jobs.Add(new FacebookFetcher(schema, null, null, fetcher, customEdge, apiMan.Secret.Id)); } } } } } catch (Exception e) when(e is FileNotFoundException || e is DirectoryNotFoundException) { string message = String.Format("Missing or invalid Facebook credentials!\n{0}", e.Message); if (e is DirectoryNotFoundException) { message = String.Format("{0}\nCheck if the path above exists!", message); } System.Console.WriteLine(message); return(NoJobs); }; return(FilterByName(jobs, names)); }
public async Task <IHttpActionResult> PostJob([FromBody] JobDTO jobDTO) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } Job job = new Job(); try { DbGeography geography = null; if (!String.IsNullOrEmpty(jobDTO.Latitude) && !String.IsNullOrEmpty(jobDTO.Longitude)) { double lat = Convert.ToDouble(jobDTO.Latitude); double longi = Convert.ToDouble(jobDTO.Longitude); geography = LocationPoint.CreatePoint(lat, longi); } job.JobLocation = new JobLocation(); job.JobPrice = new JobPrice(); job.JobTime = new JobTime(); job.CreatedUserId = Convert.ToInt32(jobDTO.UserId); job.JobTiltle = jobDTO.JobTitle; job.HelperType = jobDTO.HelperType; job.JobDescription = jobDTO.JobDescription; job.JobLocation.CreatedDate = DateTime.UtcNow; job.JobLocation.JobLocationGeography = geography; job.JobLocation.JobLocationName = jobDTO.LocationName; job.JobLocation.RowStatus = "I"; job.JobPrice.CreatedDate = DateTime.UtcNow; job.JobPrice.Daily = jobDTO.IsDaily; job.JobPrice.Hourly = jobDTO.IsHourly; job.JobPrice.MaxPrice = Convert.ToDecimal(jobDTO.MaxPrice); job.JobPrice.MinPrice = Convert.ToDecimal(jobDTO.MinPrice); job.JobPrice.Monthly = jobDTO.IsMonthly; job.JobPrice.RowStatus = "I"; job.JobTime.CreatedDate = DateTime.UtcNow; job.JobTime.EndTime = TimeSpan.Parse(jobDTO.EndTime); job.JobTime.Friday = jobDTO.IsFriday; job.JobTime.Monday = jobDTO.IsMonday; job.JobTime.Saturday = jobDTO.IsSaturday; job.JobTime.StartTime = TimeSpan.Parse(jobDTO.StartTime); job.JobTime.Sunday = jobDTO.IsSunday; job.JobTime.Thursday = jobDTO.IsThursday; job.JobTime.Tuesday = jobDTO.IsTuesday; job.JobTime.Wednesday = jobDTO.IsWednesday; job.JobType = jobDTO.JobType; var result = await jobServices.AddJobAsync(job); int JobId = result.JobId; if (jobDTO.JobServices.Count > 0) { JobService jobService = null; foreach (var item in jobDTO.JobServices) { jobService = new JobService { JobId = JobId, ServiceId = Convert.ToInt32(item.ServiceId) }; var result1 = await jobServices.AddJobServiceAsync(jobService); int JobServiceId = result1.JobServiceId; if (JobServiceId > 0) { if (jobDTO.JobScope.Count > 0) { JobScope jobScope = null; foreach (var scopeItem in jobDTO.JobScope) { jobScope = new JobScope(); } } } } } } catch (Exception ex) { throw new Exception(ex.Message.ToString()); } return(Ok(job.JobId)); }
public override IEnumerable <AbstractJob> GetJobs(JobType type, JobScope scope, IEnumerable <string> names, JobConfiguration jobConfiguration) { if (CheckTypeAndScope(type, scope)) { return(NoJobs); } var jobs = new List <FacebookFetcher>(); foreach (var schemaName in Schemas) { var schema = SchemaLoader.LoadSchema(schemaName); var apiMan = new ApiManager( SchemaLoader.GetCredentials(schemaName), IgnoreCache, jobConfiguration.IgnoreAPI, jobConfiguration.IgnoreTTL, jobConfiguration.Paginate, schema.Delay, CacheDirectory, jobConfiguration.DefaultNowDate ); var fetcher = new Fetcher(apiMan, schema.PageSize); var customEdge = new CustomEdge(); if (schemaName == "adaccount") { var pageSchema = SchemaLoader.LoadSchema("page"); var pageCredentials = SchemaLoader.GetCredentials("page"); var pageApiMan = new ApiManager( SchemaLoader.GetCredentials("page"), IgnoreCache, jobConfiguration.IgnoreAPI, jobConfiguration.IgnoreTTL, jobConfiguration.Paginate, schema.Delay, CacheDirectory, jobConfiguration.DefaultNowDate ); var pageFetcher = new Fetcher(pageApiMan, pageSchema.PageSize); var key = (SchemaName : "adaccount", TableName : "ads", CustomEdgeName : "custom_videos"); if (!customEdge.ContainsKey(key)) { Action <Logger, JObject> callback = (logger, parent) => { var creative = parent["creative"]; var video = creative ? ["video_id"]; if (video != null) { pageFetcher.GetRoot(pageSchema, "videos", video, logger); } var sourceFileVideoId = creative.IndexPathOrDefault <string>("object_story_spec.video_data.video_id", null); if (sourceFileVideoId != null) { pageFetcher.GetRoot(pageSchema, "videos", sourceFileVideoId, logger); } var post = creative ? ["object_story_id"]; if (post != null) { pageFetcher.GetRoot(pageSchema, "posts", post, logger); } }; customEdge.Add(key, callback); } } if (Schemas.Count == 1 && TableKey != null) { // DEPRECATED: case in which the user specified a single edge to be executed jobs.Add(new FacebookFetcher(schema, TableKey, EdgeKey, fetcher, customEdge)); } else { foreach (var edge in schema.Edges) { jobs.Add(new FacebookFetcher(schema, edge.Key, null, fetcher, customEdge)); } if (schemaName == "instagram") { jobs.Add(new FacebookFetcher(schema, null, null, fetcher, customEdge)); } } } return(FilterByName(jobs, names)); }