示例#1
0
        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);
            }
        }
示例#2
0
        /// <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));
            }
        }
示例#3
0
        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);
        }