MediaItemCreate UploadMedia(string uri, string authToken, BatchCreateModel body, string albumId) { MediaItemCreate result = new MediaItemCreate(); try { var client = new RestClient(uri); var request = new RestRequest(Method.POST); request.AddHeader("Content-Type", "application/json"); request.AddHeader("Authorization", "Bearer " + authToken); request.AddParameter("", JsonConvert.SerializeObject(body), ParameterType.RequestBody); var res = client.Execute(request); return(JsonConvert.DeserializeObject <MediaItemCreate>(res.Content)); } catch (Exception ex) { NewMediaItemResult newMediaItemResult = new NewMediaItemResult() { Status = new Status() }; newMediaItemResult.Status.Message = ex.Message; result.NewMediaItemResults.Add(newMediaItemResult); return(result); } }
/// <summary> /// Create a batch on mailchimp /// </summary> /// <param name="member"></param> /// <returns></returns> public MailChimpWrapperResponse <BatchCreateResponseModel> Create(BatchCreateModel member) { try { // Initialize the RestRequest from RestSharp.Newtonsoft so the serializer will user Newtonsoft defaults. var request = new RestRequest(ResourcesEndpoints.BatchCreate(), Method.POST); // Adds the resource request.AddHeader("content-type", "application/json"); request.JsonSerializer = new CustomNewtonsoftSerializer(new JsonSerializer() { NullValueHandling = NullValueHandling.Ignore, }); // Validates the object var validationContext = new ValidationContext(member, serviceProvider: null, items: null); var validationResults = new List <ValidationResult>(); var isValid = Validator.TryValidateObject(member, validationContext, validationResults, false); if (isValid) { request.AddJsonBody(member); // Execute the request var response = restClient.Execute(request); // If the request return ok, then return MailChimpWrapperResponse with deserialized object if (response.StatusCode == System.Net.HttpStatusCode.OK) { return new MailChimpWrapperResponse <BatchCreateResponseModel> { objectRespose = JsonConvert.DeserializeObject <BatchCreateResponseModel>(response.Content) } } ; // If an error occurs, encapsulates the error in MailChimpWrapperResponse var errorContent = JsonConvert.DeserializeObject <ErrorModel>(response.Content); return(new MailChimpWrapperResponse <BatchCreateResponseModel> { hasErrors = true, error = errorContent }); } // If the object was not valid then creates and ErrorModel to send back var error = new ErrorModel { type = "Internal Method Error.", title = "One or more fields were not validated. Look in detail for more information", status = 0, detail = Util.GetValidationsErrors(validationResults) }; return(new MailChimpWrapperResponse <BatchCreateResponseModel> { hasErrors = true, error = error }); } catch (Exception ex) { return(ErrorResponse <BatchCreateResponseModel>(ex)); } }
public List <MediaItemCreate> Post(MediaItemRequest mediaItemRequest) { string token = Request.Headers.Authorization.Parameter; List <UploadTokenModel> uploadTokens = new List <UploadTokenModel>(); string APIURL = WebConfigurationManager.AppSettings["googleApiURL"]; int batchSize = Convert.ToInt32(WebConfigurationManager.AppSettings["batchSize"]); MediaItemCreate response = new MediaItemCreate(); List <MediaItemCreate> responses = new List <MediaItemCreate>(); if (token == string.Empty) { NewMediaItemResult newMediaItemResult = new NewMediaItemResult() { Status = new Status() { Message = "Token Is Empty" } }; response.NewMediaItemResults.Add(newMediaItemResult); responses.Add(response); return(responses); } List <Task> task = new List <Task>(); foreach (MediaItems mediaItem in mediaItemRequest.MediaItems) { var runningTask = Task.Run(() => { WebClient wc = new WebClient(); string url = mediaItem.BaseUrl + "=w" + mediaItem.MediaMetadata.Width + "-h" + mediaItem.MediaMetadata.Height; byte[] imageBytes = wc.DownloadData(new Uri(url)); UploadTokenModel uploadToken = new UploadTokenModel() { Description = mediaItem.Filename, UploadToken = GetUploadToken("POST", APIURL + "uploads", token, mediaItem.Filename, imageBytes).Content }; uploadTokens.Add(uploadToken); }); task.Add(runningTask); } Task.WaitAll(task.ToArray()); BatchCreateModel batchCreateModel = new BatchCreateModel() { AlbumId = mediaItemRequest.AlbumId, NewMediaItems = new List <NewMediaItem>() }; UploadTokenModel lastElement = uploadTokens.Last(); foreach (UploadTokenModel uploadToken in uploadTokens) { NewMediaItem newMedia = new NewMediaItem() { Description = uploadToken.Description, SimpleMediaItem = new SimpleMediaItem() }; newMedia.SimpleMediaItem.UploadToken = uploadToken.UploadToken; batchCreateModel.NewMediaItems.Add(newMedia); if (batchCreateModel.NewMediaItems.Count % 50 == 0 || uploadToken.Equals(lastElement)) { response = UploadMedia(APIURL + "mediaItems:batchCreate", token, batchCreateModel, mediaItemRequest.AlbumId); responses.Add(response); batchCreateModel.NewMediaItems = new List <NewMediaItem>(); } } return(responses); }