Beispiel #1
0
        private async Task StartReadingFeed()
        {
            try
            {
                var tokens = await TwitterRequest.GetAccessToken(_twitterSettingsConfigElement.ConsumerKey, _twitterSettingsConfigElement.ConsumerSecret, Tokens.OAuthToken, Tokens.OAuthSecret, Pin);

                Pin = string.Empty;
                if (tokens == null)
                {
                    return;
                }

                if (!string.IsNullOrEmpty(tokens.UserId))
                {
                    IsFeedReadingRunning = true;
                    SendSnackbarMessage(new SnackbarMessage("Loading of Twitter messages started."));
                    await _twitterReader.StartAsync(tokens.OAuthToken, tokens.OAuthSecret);
                }
                else
                {
                    SendSnackbarMessage(new SnackbarMessage("You are not propertly authenticated with your Twitter account.", "DISMISS"));
                }
            }
            catch (WebException ex) when(ex.Message.Contains("401"))
            {
                SendSnackbarMessage(new SnackbarMessage("Got an 401 unauthorized error. Are you properly authenticated and did you use a new PIN?", "DISMISS"));
            }
            catch (Exception)
            {
                SendSnackbarMessage(new SnackbarMessage("An error occured. Are you using a correct PIN?", "DISMISS"));
            }
        }
Beispiel #2
0
        //각종 API요청용 함수
        public void RequestTwitter(BasePacket parameter)
        {
            if (parameter == null)
            {
                return;
            }

            HttpWebRequest req;

            if (parameter.method == "POST")
            {
                req = (HttpWebRequest)WebRequest.Create(parameter.url);
            }
            else//GET일 경우
            {
                req = (HttpWebRequest)WebRequest.Create(parameter.MethodGetUrl());
            }

            req.ContentType = "application/x-www-form-urlencoded;encoding=utf-8";
            req.Method      = parameter.method;
            req.Headers.Add("Authorization", OAuth.GetInstence().GetHeader(parameter));

            try
            {
                if (parameter.dicParams.Count > 0 && parameter.method == "POST")//POST일 때에만 Stream사용
                {
                    TwitterRequest twitterRequest = new TwitterRequest(req, parameter);
                    req.BeginGetRequestStream(new AsyncCallback(AsyncRequest), twitterRequest);
                }
                else
                {
                    TwitterRequest twitterRequest = new TwitterRequest(req, parameter);
                    req.BeginGetResponse(new AsyncCallback(AsyncResponse), twitterRequest);
                }
            }
            catch (WebException e)
            {
                using (Stream stream = e.Response?.GetResponseStream())
                {
                    if (stream == null)
                    {
                        return;
                    }
                    StreamReader srReadData = new StreamReader(stream, Encoding.Default);
                    string       log        = srReadData.ReadToEnd();
                    if (OnResponseError != null)
                    {
                        Application.Current.Dispatcher.BeginInvoke(OnResponseError, new object[] { log });
                    }
                }
            }
            catch (TimeoutException time)
            {
                //DalsaeInstence.ResponseTimeoutException(parameter);
            }
            catch (Exception e)
            {
            }
        }
        /// <summary>
        /// Destroys the status specified by the required ID parameter.  The authenticating user must be the author of the specified status.
        /// </summary>
        /// <param name="ID">Required.  The ID of the status to destroy.</param>
        public void Destroy(int ID)
        {
            TwitterRequest Request = new TwitterRequest();
            TwitterRequestData Data = new TwitterRequestData();
            Data.UserName = userName;
            Data.Password = password;

            Data.ActionUri = new Uri(
                    string.Format(Twitter.Urls.DestroyStatusUrl, ID));

            Request.PerformWebRequest(Data);
        }
Beispiel #4
0
        private async void GetPin()
        {
            try
            {
                Tokens = await TwitterRequest.GetRequestToken(_twitterSettingsConfigElement.ConsumerKey, _twitterSettingsConfigElement.ConsumerSecret);

                Process.Start(new ProcessStartInfo(TwitterRequest.GetRequestUrl(Tokens)));
            }
            catch (WebException ex) when(ex.Message.Contains("401"))
            {
                SendSnackbarMessage(new SnackbarMessage("Got an 401 unauthorized error. Did you set up the Twitter consumer key and consumer secret correctly?", "DISMISS"));
            }
        }
        /// <summary>
        /// Returns the authenticating user's followers, each with current status.
        /// </summary>
        /// <param name="Parameters">Optional. Accepts ID and Page parameters.</param>
        /// <returns></returns>
        public TwitterUserCollection Followers(TwitterParameters Parameters)
        {
            TwitterRequest Request = new TwitterRequest();
            TwitterRequestData Data = new TwitterRequestData();
            Data.UserName = userName;
            Data.Password = password;

            string actionUri = (Parameters == null ? Twitter.Urls.FollowersUrl : Parameters.BuildActionUri(Twitter.Urls.FollowersUrl));
            Data.ActionUri = new Uri(actionUri);

            Data = Request.PerformWebRequest(Data);

            return Data.Users;
        }
Beispiel #6
0
        /// <summary>
        ///     Gets an user profile information.
        /// </summary>
        /// <param name="request">Request message.</param>
        /// <returns>User profile.</returns>
        public TwitterProfile GetProfile(TwitterRequest request)
        {
            // Pass your credentials to the service
            string consumerKey    = _settings.TwitterConsumerKey;
            string consumerSecret = _settings.TwitterConsumerSecret;

            // Authorize
            var service = new TwitterService(consumerKey, consumerSecret);

            service.AuthenticateWith(request.Token, request.TokenSecret);

            // Get user info
            TwitterUser user = service.GetUserProfile(new GetUserProfileOptions());

            if (user != null)
            {
                return(new TwitterProfile
                {
                    Id = user.Id,
                    ImageUrl = user.ProfileImageUrl,
                    Name = user.Name,
                    ScreenName = user.ScreenName
                });
            }

            // Check response status code
            switch (service.Response.StatusCode)
            {
            case HttpStatusCode.Unauthorized:
            case HttpStatusCode.BadRequest:
                // Invalid credentials or request data
                throw new BadRequestException(service.Response.Response);

            case (HttpStatusCode)429:
                throw new TooManyRequestsException(service.Response.Response);
            }

            // Twitter internal errors
            if ((int)service.Response.StatusCode >= 500)
            {
                throw new BadGatewayException(service.Response.Response);
            }

            string message = string.Format("Unable to receive twitter profile. Status code {0}: {1}", service.Response.StatusCode, service.Response);

            throw new InternalServerErrorException(message);
        }
Beispiel #7
0
        private void AsyncResponse(IAsyncResult ar)
        {
            TwitterRequest req = (TwitterRequest)ar.AsyncState;

            //HttpWebRequest request = (HttpWebRequest)ar.AsyncState;

            try
            {
                HttpWebResponse response       = (HttpWebResponse)req.request.EndGetResponse(ar);
                Stream          stream         = response.GetResponseStream();
                StreamReader    streamRead     = new StreamReader(stream);
                string          responseString = streamRead.ReadToEnd();

                stream.Close();
                streamRead.Close();
                response.Close();

                //DalsaeInstence.ResponseJson(responseString, req.parameter.eresponse, req.parameter.isMore);
            }
            catch (WebException e)
            {
                using (Stream stream = e.Response?.GetResponseStream())
                {
                    if (stream == null)
                    {
                        return;
                    }
                    StreamReader srReadData = new StreamReader(stream, Encoding.Default);
                    string       log        = srReadData.ReadToEnd();
                    if (OnResponseError != null)
                    {
                        Application.Current.Dispatcher.BeginInvoke(OnResponseError, new object[] { log });
                    }
                }
            }
            catch (Exception e)
            {
            }
        }
Beispiel #8
0
        private void AsyncRequest(IAsyncResult ar)
        {
            TwitterRequest req = (TwitterRequest)ar.AsyncState;

            try
            {
                using (Stream stream = req.request.EndGetRequestStream(ar))
                {
                    StringBuilder sb = new StringBuilder();

                    foreach (string item in req.parameter.dicParams.Keys)
                    {
                        if (req.parameter.dicParams[item] != "")
                        {
                            sb.Append(item);
                            sb.Append("=");
                            OAuth.GetInstence().CalcParamUri(sb, req.parameter.dicParams[item]);
                            sb.Append("&");
                            //sb.Append(Uri.EscapeDataString(req.parameter.dicParams[item]));
                        }
                    }
                    string sendData = sb.ToString();
                    byte[] bytes    = Encoding.UTF8.GetBytes(sendData);

                    // Write to the request stream.
                    stream.Write(bytes, 0, sendData.Length);
                    //stream.Close();
                }
            }
            catch (WebException we)
            {
            }
            catch (TimeoutException time)
            {
                //DalsaeInstence.ResponseTimeoutException(req.parameter);
            }
            req.request.BeginGetResponse(new AsyncCallback(AsyncResponse), req);
        }
Beispiel #9
0
        public void ProcessRequest(TwitterRequest request)
        {
            lock (requestLock)
            {
                try
                {
                    log.Info("Received Request: " + request);
                    if (request is GetFriendsRequest)
                    {
                        ProcessGetFriendsRequest(request as GetFriendsRequest);
                    }
                    else if (request is GetFollowersRequest)
                    {
                        ProcessGetFollowersRequest(request as GetFollowersRequest);
                    }
                    else if (request is UserInfoRequest)
                    {
                        ProcessUserInfoRequest(request as UserInfoRequest);
                    }
                    else if (request is TestRequest)
                    {
                        // nothing to do
                    }
                    else
                    {
                        throw new ArgumentOutOfRangeException("request", "Unknown or unhandled request type: " + request.GetType().Name);
                    }
                }
                catch(Exception ex)
                {
                    responseQueue.Send(new ErrorResponse(request, "Exception: " + ex.GetType().Name, ex));
                }

                requestQueue.BeginReceive(); // next..
            }
        }
Beispiel #10
0
        //이미지 업로드 시 요청하는 함수, 동기 전송
        //obj: 이미지 bytes를 담고있는 파라메터
        public string SendMultimedia2(PacketMediaUpload parameter)
        {
            string         ret     = string.Empty;
            HttpWebRequest req     = (HttpWebRequest)WebRequest.Create(parameter.url);
            TwitterRequest request = new TwitterRequest(req, parameter);

            var boundary = Guid.NewGuid().ToString().Replace("-", string.Empty);

            req.ContentType = "multipart/form-data;encoding=utf-8;boundary=" + boundary;
            req.Method      = parameter.method;
            req.Headers.Add("Authorization", OAuth.GetInstence().GetHeader(parameter));

            boundary = "--" + boundary;

            //-----------------------------------------------------------------------------------
            //------------------------------------Send------------------------------------------
            //-----------------------------------------------------------------------------------
            try//send!
            {
                using (Stream stream = req.GetRequestStream())
                    using (var writer = new StreamWriter(stream, Encoding.UTF8))
                    {
                        writer.NewLine = "\r\n";
                        writer.WriteLine(boundary);
                        writer.WriteLine("Content-Type: application/octet-stream");
                        writer.WriteLine($"Content-Disposition: form-data; name=\"media\"; filename=\"img{parameter.extension}\"");
                        writer.WriteLine();
                        writer.Flush();

                        parameter.mediaStream.Position = 0;
                        parameter.mediaStream.CopyTo(stream);

                        writer.WriteLine();
                        writer.WriteLine(boundary + "--");
                        writer.Flush();
                    }
            }
            catch (WebException e)
            {
                using (Stream stream = e.Response?.GetResponseStream())
                {
                    if (stream == null)
                    {
                        return(string.Empty);
                    }
                    using (StreamReader srReadData = new StreamReader(stream, Encoding.Default))
                    {
                        string log = srReadData.ReadToEnd();
                        if (OnResponseError != null)
                        {
                            Application.Current.Dispatcher.BeginInvoke(OnResponseError, new object[] { log });
                        }
                    }
                }
            }
            //-----------------------------------------------------------------------------------
            //-------------------------------Response------------------------------------------
            //-----------------------------------------------------------------------------------

            try//Response!!!
            {
                using (WebResponse response = req.GetResponse())
                {
                    using (Stream stream = response.GetResponseStream())
                    {
                        using (StreamReader streamRead = new StreamReader(stream))
                            ret = streamRead.ReadToEnd();
                    }
                }
            }
            catch (WebException e)
            {
                using (Stream stream = e.Response?.GetResponseStream())
                {
                    if (stream == null)
                    {
                        return(string.Empty);
                    }
                    using (StreamReader srReadData = new StreamReader(stream, Encoding.Default))
                    {
                        string log = srReadData.ReadToEnd();
                        if (OnResponseError != null)
                        {
                            Application.Current.Dispatcher.BeginInvoke(OnResponseError, new object[] { log });
                        }
                    }
                }
            }

            return(ret);
        }
        /// <summary>
        /// Returns the 20 most recent statuses posted by the authenticating user and that user's friends. This is the equivalent of /home on the Web.
        /// </summary>
        /// <param name="Parameters">Accepts Since, SinceID, Count, and Page parameters.</param>
        /// <returns></returns>
        public TwitterStatusCollection FriendsTimeline(TwitterParameters Parameters)
        {
            TwitterRequest Request = new TwitterRequest();
            TwitterRequestData Data = new TwitterRequestData();
            Data.UserName = userName;
            Data.Password = password;

            string actionUri = (Parameters == null ? Twitter.Urls.FriendsTimelineUrl : Parameters.BuildActionUri(Twitter.Urls.FriendsTimelineUrl));
            Data.ActionUri = new Uri(actionUri);

            Data = Request.PerformWebRequest(Data);

            return Data.Statuses;
        }
Beispiel #12
0
 public ErrorResponse(TwitterRequest request, string message, Exception exception)
 {
     Request = request;
     Message = message;
     Exception = exception;
 }
        /// <summary>
        /// Updates the authenticating user's status.
        /// </summary>
        /// <param name="Status">Required.  The text of your status update.</param>
        /// <param name="InReplyToStatusID">Optional.  The ID of an existing status that the status to be posted is in reply to.</param>
        /// <returns></returns>
        public TwitterStatus Update(string Status, long? InReplyToStatusID)
        {
            TwitterRequest Request = new TwitterRequest();
            TwitterRequestData Data = new TwitterRequestData();
            Data.UserName = userName;
            Data.Password = password;
            Data.Source = source;

            Data.ActionUri = new Uri(
                string.Format(Twitter.Urls.UpdateUrl, HttpUtility.UrlEncode(Status), source,
                    InReplyToStatusID.HasValue ? InReplyToStatusID.Value.ToString () : ""));

            Data = Request.PerformWebRequest(Data, "POST");

            return Data.Statuses[0];
        }
Beispiel #14
0
 public ErrorResponse(TwitterRequest request, string message)
     : this(request, message, null)
 {
 }
Beispiel #15
0
        public void SendMultimedia(PacketMediaUpload packet, ClientSendTweet tweet, Action <ClientSendTweet, ClientMultimedia> callback)
        {
            HttpWebRequest req     = (HttpWebRequest)WebRequest.Create(packet.url);
            TwitterRequest request = new TwitterRequest(req, packet);

            var boundary = Guid.NewGuid().ToString().Replace("-", string.Empty);

            req.ContentType = "multipart/form-data;encoding=utf-8;boundary=" + boundary;
            req.Method      = packet.method;
            req.Headers.Add("Authorization", OAuth.GetInstence().GetHeader(packet));

            boundary = "--" + boundary;

            try            //send!
            {
                using (Stream stream = req.GetRequestStream())
                    using (var writer = new StreamWriter(stream, Encoding.UTF8))
                    {
                        writer.NewLine = "\r\n";
                        writer.WriteLine(boundary);
                        writer.WriteLine("Content-Type: application/octet-stream");
                        writer.WriteLine($"Content-Disposition: form-data; name=\"media\"; filename=\"img{packet.extension}\"");
                        writer.WriteLine();
                        writer.Flush();

                        packet.mediaStream.Position = 0;
                        packet.mediaStream.CopyTo(stream);

                        writer.WriteLine();
                        writer.WriteLine(boundary + "--");
                        writer.Flush();
                    }
            }
            catch (WebException e)
            {
                using (Stream stream = e.Response?.GetResponseStream())
                {
                    if (stream == null)
                    {
                        return;
                    }
                    using (StreamReader srReadData = new StreamReader(stream, Encoding.Default))
                    {
                        string log = srReadData.ReadToEnd();
                        if (OnResponseError != null)
                        {
                            Application.Current.Dispatcher.BeginInvoke(OnResponseError, new object[] { packet, log });
                        }
                    }
                }
            }
            catch (Exception e)
            {
                packet.Dispose();
                App.SendException(e);
                return;
            }

            try            //Response!!!
            {
                using (WebResponse response = req.GetResponse())
                {
                    using (Stream stream = response.GetResponseStream())
                    {
                        if (stream == null)
                        {
                            return;
                        }
                        using (StreamReader streamRead = new StreamReader(stream))
                        {
                            string           json  = streamRead.ReadToEnd();
                            ClientMultimedia media = JsonConvert.DeserializeObject <ClientMultimedia>(json);
                            callback?.Invoke(tweet, media);
                        }
                    }
                }
            }
            catch (WebException e)
            {
                using (Stream stream = e.Response?.GetResponseStream())
                {
                    if (stream == null)
                    {
                        return;
                    }
                    using (StreamReader srReadData = new StreamReader(stream, Encoding.Default))
                    {
                        string log = srReadData.ReadToEnd();
                        if (OnResponseError != null)
                        {
                            Application.Current.Dispatcher.BeginInvoke(OnResponseError, new object[] { log });
                        }
                    }
                }
            }
            catch (Exception e)
            {
                App.SendException(e);
            }
            finally
            {
                packet.Dispose();
            }
        }
Beispiel #16
0
        public static bool VerifyCredentials(string username, string password)
        {
            if (string.IsNullOrEmpty (username))
                Console.Error.WriteLine ("username empty");

            if (string.IsNullOrEmpty (password))
                Console.Error.WriteLine ("password empty");

            TwitterRequest request = new TwitterRequest();
            TwitterRequestData data = new TwitterRequestData();
            data.UserName = username;
            data.Password = password;
            data.ActionUri = new Uri (Urls.VerifyCredentialsUrl);

            try
            {
                data = request.PerformWebRequest(data, "GET");
                if (data == null) {
                    Console.Error.WriteLine ("DATA IS NULL ABORT");
                    return false;
                }

                if (data.Users[0].ScreenName == username)
                {
                    return true;
                }
            }
            catch { } // ignore exeptions - authentication failed

            return false;
        }
 public RequestReceivedEventArgs(TwitterRequest request)
 {
     TwitterRequest = request;
 }
Beispiel #18
0
        //public void DisconnectingUserStreaming()
        //{
        //	userStream.Disconnecting();
        //	userStream = new UserStream();
        //	DalsaeInstence.ConnectedStreaming(false);
        //}
        //public bool isConnectedUserStreaming() { return userStream.isConnectedStreaming; }

        //public void ConnectUserStream(object obj)
        //{
        //	if (obj == null) return;
        //	userStream.ConnectStreaming(obj as BasePacket);
        //}


        public void SyncRequest <TRes>(BasePacket packet, UIProperty property, Action <TRes, UIProperty> callback)
        {
            HttpWebRequest req;

            if (packet.method == "POST")
            {
                req = (HttpWebRequest)WebRequest.Create(packet.url);
            }
            else            //GET일경우
            {
                req = (HttpWebRequest)WebRequest.Create(packet.MethodGetUrl());
            }
            TwitterRequest request = new TwitterRequest(req, packet);

            req.ContentType = "application/x-www-form-urlencoded;encoding=utf-8";
            req.Method      = packet.method;
            req.Headers.Add("Authorization", OAuth.GetInstence().GetHeader(packet));



            if (packet.dicParams.Count > 0 && packet.method == "POST")            //POST일 때에만 Stream사용
            {
                //-----------------------------------------------------------------------------------
                //------------------------------------Send------------------------------------------
                //-----------------------------------------------------------------------------------
                try                //send!
                {
                    Send(packet, req);
                }
                catch (WebException e)
                {
                    using (Stream stream2 = e.Response?.GetResponseStream())
                    {
                        StreamReader srReadData = new StreamReader(stream2, Encoding.Default);
                        string       log        = srReadData.ReadToEnd();
                        if (OnResponseError != null)
                        {
                            Application.Current.Dispatcher.BeginInvoke(OnResponseError, new object[] { log });
                        }
                    }
                }
                catch (Exception e)
                {
                    OnResponseError?.Invoke(packet, null);
                }
            }

            try            //Response!!!
            {
                string json = Recv(packet, req);
                TRes   ret  = default(TRes);
                if (json?.Length > 0)
                {
                    ret = JsonConvert.DeserializeObject <TRes>(json);
                }
                if (callback != null)
                {
                    Application.Current.Dispatcher.BeginInvoke(callback, new object[] { ret, property });
                }
            }
            catch (WebException e)
            {
                if (e.Message.IndexOf("408") > -1)                //timeout시 재 전송
                {
                    Manager.APICallAgent.apiInstence.RequestSingleTweetPacket <TRes>(packet, property, callback);
                }
                else if (e.Response == null)
                {
                    App.SendException(e);
                }
                else
                {
                    //ClientAPIError error = null;
                    using (Stream stream = e.Response?.GetResponseStream())
                        using (StreamReader srReadData = new StreamReader(stream, Encoding.Default))
                        {
                            string log = srReadData.ReadToEnd();
                            if (string.IsNullOrEmpty(log) == false)
                            {
                                if (OnResponseError != null)
                                {
                                    Application.Current.Dispatcher.BeginInvoke(OnResponseError, new object[] { packet, log });
                                }
                            }
                        }
                }
            }
            catch (Exception e)
            {
                OnResponseError?.Invoke(packet, null);
                App.SendException(e);
            }
        }
 public void Send(TwitterRequest request)
 {
     SendMessage(request);
 }
Beispiel #20
0
        public string SyncRequest(BasePacket parameter)
        {
            string         ret = string.Empty;
            HttpWebRequest req;

            if (parameter.method == "POST")
            {
                req = (HttpWebRequest)WebRequest.Create(parameter.url);
            }
            else//GET일경우
            {
                req = (HttpWebRequest)WebRequest.Create(parameter.MethodGetUrl());
            }
            TwitterRequest request = new TwitterRequest(req, parameter);

            req.ContentType = "application/x-www-form-urlencoded;encoding=utf-8";
            req.Method      = parameter.method;
            req.Headers.Add("Authorization", OAuth.GetInstence().GetHeader(parameter));



            if (parameter.dicParams.Count > 0 && parameter.method == "POST")//POST일 때에만 Stream사용
            {
                //-----------------------------------------------------------------------------------
                //------------------------------------Send------------------------------------------
                //-----------------------------------------------------------------------------------
                try//send!
                {
                    Stream        stream = req.GetRequestStream();
                    StringBuilder sb     = new StringBuilder();

                    foreach (string item in parameter.dicParams.Keys)
                    {
                        if (parameter.dicParams[item] != "")
                        {
                            sb.Append(item);
                            sb.Append("=");
                            OAuth.GetInstence().CalcParamUri(sb, parameter.dicParams[item]);
                            sb.Append("&");
                        }
                    }
                    string sendData = sb.ToString();
                    byte[] bytes    = Encoding.UTF8.GetBytes(sendData);

                    stream.Write(bytes, 0, sendData.Length);
                    stream.Close();
                }
                catch (WebException e)
                {
                    using (Stream stream2 = e.Response?.GetResponseStream())
                    {
                        if (stream2 == null)
                        {
                            return(string.Empty);
                        }
                        StreamReader srReadData = new StreamReader(stream2, Encoding.Default);
                        string       log        = srReadData.ReadToEnd();
                        if (OnResponseError != null)
                        {
                            Application.Current.Dispatcher.BeginInvoke(OnResponseError, new object[] { log });
                        }
                    }
                }
                catch (Exception e)
                {
                    App.SendException(e);
                }
            }

            //-----------------------------------------------------------------------------------
            //-------------------------------Response------------------------------------------
            //-----------------------------------------------------------------------------------

            try//Response!!!
            {
                using (WebResponse response = req.GetResponse())
                    using (Stream stream = response.GetResponseStream())
                        using (StreamReader streamRead = new StreamReader(stream))
                            ret = streamRead.ReadToEnd();
            }
            catch (WebException e)
            {
                //using (Stream stream = e.Response.GetResponseStream())
                //{
                //	StreamReader srReadData = new StreamReader(stream, Encoding.Default);
                //	string log = srReadData.ReadToEnd();
                //	DalsaeInstence.ResponseError(log);
                //}
            }
            catch (Exception e)
            {
                App.SendException(e);
            }

            return(ret);
        }
        public async Task <IChunkUploadResult> UploadBinary(IUploadParameters uploadQueryParameters, ITwitterRequest baseRequest)
        {
            var binary   = uploadQueryParameters.Binary;
            var uploader = CreateChunkedUploader();

            var initParameters = new ChunkUploadInitParameters
            {
                TotalBinaryLength       = binary.Length,
                MediaType               = uploadQueryParameters.QueryMediaType,
                MediaCategory           = uploadQueryParameters.QueryMediaCategory,
                AdditionalOwnerIds      = uploadQueryParameters.AdditionalOwnerIds,
                CustomRequestParameters = uploadQueryParameters.InitCustomRequestParameters,
            };

            var initRequest            = new TwitterRequest(baseRequest);
            var initOperationSucceeded = await uploader.Init(initParameters, initRequest).ConfigureAwait(false);

            if (!initOperationSucceeded)
            {
                return(uploader.Result);
            }

            var binaryChunks = GetBinaryChunks(binary, uploadQueryParameters.MaxChunkSize);

            var totalSize = await CalculateSize("media", binary).ConfigureAwait(false);

            long uploadedSize = 0;

            uploadQueryParameters.UploadStateChanged?.Invoke(new MediaUploadProgressChangedEventArgs(UploadProgressState.INITIALIZED, 0, totalSize));

            for (var i = 0; i < binaryChunks.Count; ++i)
            {
                var binaryChunk       = binaryChunks[i];
                var startUploadedSize = uploadedSize;

                var appendParameters = new ChunkUploadAppendParameters(
                    binaryChunk,
                    "media", // Must be `media`, if using the real media type as content id, Twitter does not accept when invoking .Finalize().
                    uploadQueryParameters.Timeout)
                {
                    UploadProgressChanged = (args) =>
                    {
                        uploadedSize = startUploadedSize + args.NumberOfBytesUploaded;
                        uploadQueryParameters.UploadStateChanged?.Invoke(new MediaUploadProgressChangedEventArgs(UploadProgressState.PROGRESS_CHANGED, uploadedSize, totalSize));
                    },
                    CustomRequestParameters = uploadQueryParameters.AppendCustomRequestParameters
                };

                var appendRequest            = new TwitterRequest(baseRequest);
                var appendOperationSucceeded = await uploader.Append(appendParameters, appendRequest).ConfigureAwait(false);

                if (!appendOperationSucceeded)
                {
                    uploadQueryParameters.UploadStateChanged?.Invoke(new MediaUploadProgressChangedEventArgs(UploadProgressState.FAILED, uploadedSize, totalSize));
                    return(uploader.Result);
                }
            }

            var finalizeRequest = new TwitterRequest(baseRequest);

            var finalizeSucceeded = await uploader.Finalize(uploadQueryParameters.FinalizeCustomRequestParameters, finalizeRequest).ConfigureAwait(false);

            if (finalizeSucceeded)
            {
                var result = uploader.Result;
                uploadQueryParameters.UploadStateChanged?.Invoke(new MediaUploadProgressChangedEventArgs(UploadProgressState.COMPLETED, uploadedSize, totalSize));

                var category          = uploadQueryParameters.MediaCategory;
                var isAwaitableUpload = category == MediaCategory.Gif || category == MediaCategory.Video;

                if (isAwaitableUpload && uploadQueryParameters.WaitForTwitterProcessing)
                {
                    var request = new TwitterRequest(baseRequest);
                    await _uploadHelper.WaitForMediaProcessingToGetAllMetadata(result.Media, request).ConfigureAwait(false);
                }
            }

            return(uploader.Result);
        }
        /// <summary>
        /// Returns the 20 most recent statuses from non-protected users who have set a custom user icon.  Does not require authentication.
        /// </summary>
        /// <returns></returns>
        public TwitterStatusCollection PublicTimeline()
        {
            TwitterRequest Request = new TwitterRequest();
            TwitterRequestData Data = new TwitterRequestData();

            Data.ActionUri = new Uri(Twitter.Urls.PublicTimelineUrl);

            Data = Request.PerformWebRequest(Data);

            return Data.Statuses;
        }
 public Task <ITwitterResult <IMessageCursorQueryResultDTO> > GetMessagesAsync(IGetMessagesParameters parameters, TwitterRequest request)
 {
     request.Query.Url        = _messageQueryGenerator.GetMessagesQuery(parameters);
     request.Query.HttpMethod = HttpMethod.GET;
     return(_twitterAccessor.ExecuteRequestAsync <IMessageCursorQueryResultDTO>(request));
 }
        /// <summary>
        /// Returns a single status, specified by the id parameter
        /// </summary>
        /// <param name="ID">id.  Required.  The numerical ID of the status you're trying to retrieve.</param>
        /// <returns></returns>
        public TwitterUser Show(string ID)
        {
            TwitterRequest Request = new TwitterRequest();
            TwitterRequestData Data = new TwitterRequestData();
            Data.UserName = userName;
            Data.Password = password;

            Data.ActionUri = new Uri(
                    string.Format(Twitter.Urls.ShowStatusUrl, ID));

            Data = Request.PerformWebRequest(Data, "GET");

            return Data.Users[0];
        }