public static XDocument UpdateProfileImage(ConsumerBase twitter, string accessToken, Stream image, string contentType) {
			var parts = new[] {
				MultipartPostPart.CreateFormFilePart("image", "twitterPhoto", contentType, image),
			};
			HttpWebRequest request = twitter.PrepareAuthorizedRequest(UpdateProfileImageEndpoint, accessToken, parts);
			IncomingWebResponse response = twitter.Channel.WebRequestHandler.GetResponse(request);
			string responseString = response.GetResponseReader().ReadToEnd();
			return XDocument.Parse(responseString);
		}
        /// <summary>
        /// Initializes a new instance of the <see cref="OAuthAuthorization"/> class.
        /// </summary>
        /// <param name="consumer">The consumer.</param>
        protected OAuthAuthorization(ConsumerBase consumer)
        {
            if (consumer == null)
            {
                throw new ArgumentNullException("consumer");
            }

            this.Consumer = consumer;
        }
        public static XDocument UpdateStatus(ConsumerBase twitter, string accessToken, string message)
        {
            var data = new Dictionary<string, string>();
            data.Add("status", message);

            HttpWebRequest request = twitter.PrepareAuthorizedRequest(UpdateStatusEndpoint, accessToken, data);

            var response = twitter.Channel.WebRequestHandler.GetResponse(request);
            return XDocument.Load(XmlReader.Create(response.GetResponseReader()));
        }
		public static XDocument UpdateProfileBackgroundImage(ConsumerBase twitter, string accessToken, string image, bool tile) {
			var parts = new[] {
				MultipartPostPart.CreateFormFilePart("image", image, "image/" + Path.GetExtension(image).Substring(1).ToLowerInvariant()),
				MultipartPostPart.CreateFormPart("tile", tile.ToString().ToLowerInvariant()),
			};
			HttpWebRequest request = twitter.PrepareAuthorizedRequest(UpdateProfileBackgroundImageEndpoint, accessToken, parts);
			request.ServicePoint.Expect100Continue = false;
			IncomingWebResponse response = twitter.Channel.WebRequestHandler.GetResponse(request);
			string responseString = response.GetResponseReader().ReadToEnd();
			return XDocument.Parse(responseString);
		}
        public static string GetProfile(ConsumerBase consumer, string accessToken)
        {
            if (consumer == null)
            {
                throw new ArgumentNullException("consumer");
            }

            var request = consumer.PrepareAuthorizedRequest(ProfileEndpoint, accessToken, new Dictionary<string, string>());
            var response = consumer.Channel.WebRequestHandler.GetResponse(request);
            string body = response.GetResponseReader().ReadToEnd();
            return body;
        }
        /// <summary>
        /// Gets the current oDesk user.
        /// </summary>
        /// <param name="consumer">The oDesk consumer.</param>
        /// <param name="accessToken">The access token previously retrieved.</param>
        /// <returns>An XML document returned by oDesk.</returns>
        public static XDocument GetUser(ConsumerBase consumer, string accessToken)
        {
            if (consumer == null)
                throw new ArgumentNullException("consumer");

            var request = consumer.PrepareAuthorizedRequest(GetUserEndpoint, accessToken);

            var response = consumer.Channel.WebRequestHandler.GetResponse(request);
            var body = response.GetResponseReader().ReadToEnd();
            var result = XDocument.Parse(body);
            return result;
        }
Esempio n. 7
0
        public static string GetDigs(ConsumerBase consumer, string accessToken, string id)
        {
            if (consumer == null)
            {
                throw new ArgumentNullException("consumer");
            }

            var extraData = new Dictionary<string, string>() {
				{ "story_id", id }
			};
            var request = consumer.PrepareAuthorizedRequest(GetDiggsEndpoint, accessToken, extraData);
            var response = consumer.Channel.WebRequestHandler.GetResponse(request);
            string body = response.GetResponseReader().ReadToEnd();
            return body;
        }
Esempio n. 8
0
	    public static Stream GetDoc(ConsumerBase consumer, string accessToken, string docEndpoint, out long size)
        {
            if (consumer == null)
            {
                throw new ArgumentNullException("consumer");
            }
            var endpoint = new MessageReceivingEndpoint(docEndpoint, HttpDeliveryMethods.GetRequest | HttpDeliveryMethods.AuthorizationHeaderRequest);
            var extraData = new Dictionary<string, string>() /*{ {"GData-Version","3.0"} }*/;
            var request = consumer.PrepareAuthorizedRequest(endpoint, accessToken, extraData);
            var response = consumer.Channel.WebRequestHandler.GetResponse(request);
            if (!string.IsNullOrEmpty(response.Headers[HttpResponseHeader.ContentLength]))
            {
                long.TryParse(response.Headers[HttpResponseHeader.ContentLength], out size);
            }
            else
            {
                size = 0;
            }
            return response.ResponseStream;
        }
Esempio n. 9
0
	    public static XDocument GetDocList(ConsumerBase consumer, string accessToken, string nextEndpoint)
        {
            if (consumer == null)
            {
                throw new ArgumentNullException("consumer");
            }
            var endpoint = GetDocsEntriesEndpoint;
            if (!string.IsNullOrEmpty(nextEndpoint))
            {
                endpoint = new MessageReceivingEndpoint(nextEndpoint, HttpDeliveryMethods.GetRequest);
            }

            var extraData = new Dictionary<string, string>() /*{ {"GData-Version","3.0"} }*/;
            //var request = consumer.PrepareAuthorizedRequest(endpoint, accessToken, extraData);
            //var response = consumer.Channel.WebRequestHandler.GetResponse(request);
            //string body = response.GetResponseReader().ReadToEnd();
            //XDocument result = XDocument.Parse(body);
            //return result;

            var request = consumer.PrepareAuthorizedRequest(endpoint, accessToken, extraData);

            // Enable gzip compression.  Google only compresses the response for recognized user agent headers. - Mike Lim
            request.AutomaticDecompression = DecompressionMethods.GZip;
            request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.151 Safari/534.16";

            var response = consumer.Channel.WebRequestHandler.GetResponse(request);
            string body = response.GetResponseReader().ReadToEnd();
            XDocument result = XDocument.Parse(body);
            return result;

        }
Esempio n. 10
0
        /// <summary>
        /// Gets the Gmail address book's contents.
        /// </summary>
        /// <param name="consumer">The Google consumer previously constructed using <see cref="CreateWebConsumer"/> or <see cref="CreateDesktopConsumer"/>.</param>
        /// <param name="accessToken">The access token previously retrieved.</param>
        /// <returns>An XML document returned by Google.</returns>
        public static XDocument GetContacts(ConsumerBase consumer, string accessToken)
        {
            if (consumer == null) {
                throw new ArgumentNullException("consumer");
            }

            var response = consumer.PrepareAuthorizedRequestAndSend(GetContactsEndpoint, accessToken);
            string body = response.GetResponseReader().ReadToEnd();
            XDocument result = XDocument.Parse(body);
            return result;
        }
Esempio n. 11
0
	    public static Stream GetDoc(ConsumerBase consumer, string accessToken, string docEndpoint)
	    {
	        long size;
	        return GetDoc(consumer, accessToken, docEndpoint, out size);
	    }
 public YDResourceAPI(ConsumerBase consumer, string accessToken)
     : base(consumer, accessToken)
 {
 }
Esempio n. 13
0
 public YDBaseAPI(ConsumerBase consumer,string accessToken)
 {
     _consumer = consumer;
     _tokenManager = consumer.TokenManager;
     _accessToken = accessToken;
 }
        /// <summary>
        /// Gets the Gmail address book's contents.
        /// </summary>
        /// <param name="consumer">The Google consumer.</param>
        /// <param name="accessToken">The access token previously retrieved.</param>
        /// <param name="maxResults">The maximum number of entries to return. If you want to receive all of the contacts, rather than only the default maximum, you can specify a very large number here.</param>
        /// <param name="startIndex">The 1-based index of the first result to be retrieved (for paging).</param>
        /// <returns>An XML document returned by Google.</returns>
        public static XDocument GetContacts(ConsumerBase consumer, string accessToken, int maxResults/* = 25*/, int startIndex/* = 1*/)
        {
            if (consumer == null) {
                throw new ArgumentNullException("consumer");
            }

            var extraData = new Dictionary<string, string>() {
                { "start-index", startIndex.ToString(CultureInfo.InvariantCulture) },
                { "max-results", maxResults.ToString(CultureInfo.InvariantCulture) },
            };
            var request = consumer.PrepareAuthorizedRequest(GetContactsEndpoint, accessToken, extraData);
            var response = consumer.Channel.WebRequestHandler.GetResponse(request);
            string body = response.GetResponseReader().ReadToEnd();
            XDocument result = XDocument.Parse(body);
            return result;
        }
        /// <summary>
        /// Gets the Xing adress book's contents.
        /// </summary>
        /// <param name="consumer">The Xing consumer.</param>
        /// <param name="accessToken">The access token previously retrieved.</param>
        /// <param name="maxResults">The maximum number of entries to return. If you want to receive all of the contacts, rather than only the default maximum, you can specify a very large number here.</param>
        /// <param name="startIndex">The 1-based index of the first result to be retrieved (for paging).</param>
        /// <param name="field">user_fields of info on https://dev.xing.com/docs/get/users/:id </param>
        /// <returns>An dynamic Object returned by Xing.</returns>
        public static Object GetMyContacts(ConsumerBase consumer, string accessToken, string field, int maxResults/* = 25*/, int startIndex/* = 1*/)
        {
            if (consumer == null)
            {
                throw new ArgumentNullException("consumer");
            }
            var extraData = new Dictionary<string, string>() {
                { "offset", startIndex.ToString(CultureInfo.InvariantCulture) },
                { "limit", maxResults.ToString(CultureInfo.InvariantCulture) },
                { "user_fields",field },
            };
            var request = consumer.PrepareAuthorizedRequest(GetContactsEndpoint, accessToken, extraData);

            //request.AutomaticDecompression = DecompressionMethods.GZip;
            request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.151 Safari/534.16";
            var response = consumer.Channel.WebRequestHandler.GetResponse(request);
            string body = response.GetResponseReader().ReadToEnd();
            var serializer = new JavaScriptSerializer();
            serializer.RegisterConverters(new[] { new DynamicJsonConverter() });
            dynamic obj = serializer.Deserialize(body, typeof(object));
            return obj;
        }
Esempio n. 16
0
 public static XDocument UpdateProfileImage(ConsumerBase twitter, string accessToken, string pathToImage)
 {
     string contentType = "image/" + Path.GetExtension(pathToImage).Substring(1).ToLowerInvariant();
     return UpdateProfileImage(twitter, accessToken, File.OpenRead(pathToImage), contentType);
 }
Esempio n. 17
0
 public static string GetUsername(ConsumerBase twitter, string accessToken)
 {
     XDocument xml = VerifyCredentials(twitter, accessToken);
     XPathNavigator nav = xml.CreateNavigator();
     return nav.SelectSingleNode("/user/screen_name").Value;
 }
Esempio n. 18
0
        /// <summary>
        ///    Updates the authenticating user's status, also known as tweeting.
        /// </summary>
        /// <param name="twitter"></param>
        /// <param name="accessToken"></param>
        /// <param name="status">The text of your status update, typically up to 140 characters. URL encode as necessary. t.co link wrapping may effect character counts.</param>
        /// <param name="includeEntities">When set to either true, t or 1, each tweet will include a node called "entities,". This node offers a variety of metadata about the tweet in a discreet structure, including: user_mentions, urls, and hashtags. While entities are opt-in on timelines at present, they will be made a default component of output in the future. See Tweet Entities for more detail on entities.
        ///  </param>
        /// <returns></returns>
        public static JObject UpdateStatus(ConsumerBase twitter, string accessToken, String status, bool includeEntities)
        {

            var parts = new[] {
				MultipartPostPart.CreateFormPart("status", status),
                MultipartPostPart.CreateFormPart("include_entities", includeEntities.ToString()),
			};

            HttpWebRequest request = twitter.PrepareAuthorizedRequest(UpdateStatusEndpoint, accessToken, parts);
            IncomingWebResponse response = twitter.Channel.WebRequestHandler.GetResponse(request);
          
            using (var responseReader = response.GetResponseReader())
            {
                var result = responseReader.ReadToEnd();

                return JObject.Parse(result);

            }
        }
        public static XDocument YQL(ConsumerBase consumer, string accessToken, string yql)
        {
            if (consumer == null)
            {
                throw new ArgumentNullException("consumer");
            }

            yql = yql.Replace("'", "\"");
            string uri = "http://query.yahooapis.com/v1/yql?q=" + HttpUtility.UrlEncode(yql).Replace("+", "%20").Replace("*", "%2A").Replace("(", "%28").Replace(")", "%29");

            MessageReceivingEndpoint endPoint = new MessageReceivingEndpoint(uri, HttpDeliveryMethods.AuthorizationHeaderRequest | HttpDeliveryMethods.GetRequest);

            var request = consumer.PrepareAuthorizedRequest(endPoint, accessToken);
            string header = request.Headers.GetValues(0)[0];
            header = header.Replace("OAuth", "").Replace("\"", "").Replace(",", "&").Trim();
            uri += "&" + header;

            HttpWebRequest req = (HttpWebRequest) WebRequest.Create(uri);
            req.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9b5) Gecko/2008032620 Firefox/3.0b5";
            WebResponse resp = req.GetResponse();
            Encoding enc = System.Text.Encoding.GetEncoding(1252);
            StreamReader loResponseStream = new
            StreamReader(resp.GetResponseStream(), enc);
            string body = loResponseStream.ReadToEnd();

            return XDocument.Parse(body);
        }
 /// <summary>
 /// Post a Status Messages.
 /// </summary>
 /// <param name="consumer">The Xing consumer.</param>
 /// <param name="accessToken">The access token previously retrieved.</param>
 /// <param name="message">The new status update. The maximum length is 420 characters.</param>       
 ///  <param name="user_id">ID of the user starting the conversation.</param>
 /// <returns>An dynamic Object returned by Xing.</returns>
 public static bool PostStatus(ConsumerBase consumer, string accessToken, string message,  string user_id)
 {
     if (consumer == null)
     {
         throw new ArgumentNullException("consumer");
     }
     var extraData = new Dictionary<string, string>() {
         { "message", message },
     };
     MessageReceivingEndpoint Endpoint = new MessageReceivingEndpoint("https://api.xing.com/v1/users/" + user_id + "/status_message", HttpDeliveryMethods.PostRequest);
     var request = consumer.PrepareAuthorizedRequest(Endpoint, accessToken, extraData);
     //request.AutomaticDecompression = DecompressionMethods.GZip;
     request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.151 Safari/534.16";
     var response = consumer.Channel.WebRequestHandler.GetResponse(request);
     string body = response.GetResponseReader().ReadToEnd();
     if (body.Contains("has been posted")) return true;
     else return false;
 }
        /// <summary>
        /// Post a Conversation.
        /// </summary>
        /// <param name="consumer">The Xing consumer.</param>
        /// <param name="accessToken">The access token previously retrieved.</param>
        /// <param name="content">Message text. Max. size is 16384 UTF-8 characters.</param>
        /// <param name="recipient_ids">Comma-separated list of recipients. There must be at least one recipient. Sender cannot be included.</param>
        ///  <param name="subject">Subject for conversation. Max. size is 32 UTF-8 characters</param>
        ///  <param name="user_id">ID of the user starting the conversation.</param>
        /// <returns>An dynamic Object returned by Xing.</returns> 
        public static Object PostConversation(ConsumerBase consumer, string accessToken, string content, string recipient_ids, string subject, string user_id)
        {
            if (consumer == null)
            {
                throw new ArgumentNullException("consumer");
            }
            var extraData = new Dictionary<string, string>() {
                { "content", content },
                { "recipient_ids", recipient_ids },
                { "subject", subject },
            };
            MessageReceivingEndpoint Endpoint = new MessageReceivingEndpoint("https://api.xing.com/v1/users/" + user_id + "/conversations", HttpDeliveryMethods.PostRequest);
            var request = consumer.PrepareAuthorizedRequest(Endpoint, accessToken, extraData);

            //request.AutomaticDecompression = DecompressionMethods.GZip;
            request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.151 Safari/534.16";
            var response = consumer.Channel.WebRequestHandler.GetResponse(request);
            string body = response.GetResponseReader().ReadToEnd();
            var serializer = new JavaScriptSerializer();
            serializer.RegisterConverters(new[] { new DynamicJsonConverter() });
            dynamic obj = serializer.Deserialize(body, typeof(object));
            return obj;
        }
        /// <summary>
        /// Gets a Xing user contents.
        /// </summary>
        /// <param name="consumer">The Xing consumer.</param>
        /// <param name="accessToken">The access token previously retrieved.</param>
        /// <param name="id">ID(s) of requested user(s). </param>        
        /// <returns>An dynamic Object returned by Xing.</returns>
        public static Object GetUser(ConsumerBase consumer, string accessToken, string id)
        {
            if (consumer == null)
            {
                throw new ArgumentNullException("consumer");
            }
            MessageReceivingEndpoint Endpoint = new MessageReceivingEndpoint("https://api.xing.com/v1/users/" + id, HttpDeliveryMethods.GetRequest);

            var request = consumer.PrepareAuthorizedRequest(Endpoint, accessToken);

            // Enable gzip compression.  Google only compresses the response for recognized user agent headers. - Mike Lim
            //request.AutomaticDecompression = DecompressionMethods.GZip;
            request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.151 Safari/534.16";
            var response = consumer.Channel.WebRequestHandler.GetResponse(request);
            string body = response.GetResponseReader().ReadToEnd();
            var serializer = new JavaScriptSerializer();
            serializer.RegisterConverters(new[] { new DynamicJsonConverter() });
            dynamic obj = serializer.Deserialize(body, typeof(object));
            return obj.users[0];
        }
Esempio n. 23
0
 public static XDocument GetUpdates(ConsumerBase twitter, string accessToken)
 {
     IncomingWebResponse response = twitter.PrepareAuthorizedRequestAndSend(GetFriendTimelineStatusEndpoint, accessToken);
     return XDocument.Load(XmlReader.Create(response.GetResponseReader()));
 }
Esempio n. 24
0
        public static string Follow(ConsumerBase consumer, string accessToken, string username)
        {
            if (consumer == null)
            {
                throw new ArgumentNullException("consumer");
            }

            var extraData = new Dictionary<string, string>() {
				{ "username", username }
			};
            var request = consumer.PrepareAuthorizedRequest(FollowUserEndpoint, accessToken, extraData);
            var response = consumer.Channel.WebRequestHandler.GetResponse(request);
            string body = response.GetResponseReader().ReadToEnd();
            return body;
        }
Esempio n. 25
0
 public static XDocument VerifyCredentials(ConsumerBase twitter, string accessToken)
 {
     IncomingWebResponse response = twitter.PrepareAuthorizedRequestAndSend(VerifyCredentialsEndpoint, accessToken);
     return XDocument.Load(XmlReader.Create(response.GetResponseReader()));
 }
Esempio n. 26
0
	    public static XDocument GetDocList(ConsumerBase consumer, string accessToken, string nextEndpoint)
        {
            if (consumer == null)
            {
                throw new ArgumentNullException("consumer");
            }
            var endpoint = GetDocsEntriesEndpoint;
            if (!string.IsNullOrEmpty(nextEndpoint))
            {
                endpoint = new MessageReceivingEndpoint(nextEndpoint, HttpDeliveryMethods.GetRequest);
            }

            var extraData = new Dictionary<string, string>() /*{ {"GData-Version","3.0"} }*/;
            var request = consumer.PrepareAuthorizedRequest(endpoint, accessToken, extraData);
            var response = consumer.Channel.WebRequestHandler.GetResponse(request);
            string body = response.GetResponseReader().ReadToEnd();
            XDocument result = XDocument.Parse(body);
            return result;
        }
 public GoogleDocumentProvider(AuthData authData)
 {
     _accessToken = authData.Token;
     _consumer = new WebConsumer(GoogleConsumer.ServiceDescription, ImportConfiguration.GoogleTokenManager);
 }
        /// <summary>
        /// Gets the Gmail address book's contents.
        /// </summary>
        /// <param name="consumer">The Google consumer.</param>
        /// <param name="accessToken">The access token previously retrieved.</param>
        /// <param name="maxResults">The maximum number of entries to return. If you want to receive all of the contacts, rather than only the default maximum, you can specify a very large number here.</param>
        /// <param name="startIndex">The 1-based index of the first result to be retrieved (for paging).</param>
        /// <returns>An XML document returned by Google.</returns>
        public static XDocument GetContacts(ConsumerBase consumer, string accessToken, int maxResults/* = 25*/, int startIndex/* = 1*/)
        {
            if (consumer == null) {
                throw new ArgumentNullException("consumer");
            }

            var extraData = new Dictionary<string, string>() {
                { "start-index", startIndex.ToString(CultureInfo.InvariantCulture) },
                { "max-results", maxResults.ToString(CultureInfo.InvariantCulture) },
            };
            var request = consumer.PrepareAuthorizedRequest(GetContactsEndpoint, accessToken, extraData);

            // Enable gzip compression.  Google only compresses the response for recognized user agent headers. - Mike Lim
            request.AutomaticDecompression = DecompressionMethods.GZip;
            request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.151 Safari/534.16";

            var response = consumer.Channel.WebRequestHandler.GetResponse(request);
            string body = response.GetResponseReader().ReadToEnd();
            XDocument result = XDocument.Parse(body);
            return result;
        }
        public static void PostBlogEntry(ConsumerBase consumer, string accessToken, string blogUrl, string title, XElement body)
        {
            string feedUrl;
            var getBlogHome = WebRequest.Create(blogUrl);
            using (var blogHomeResponse = getBlogHome.GetResponse()) {
                using (StreamReader sr = new StreamReader(blogHomeResponse.GetResponseStream())) {
                    string homePageHtml = sr.ReadToEnd();
                    Match m = Regex.Match(homePageHtml, @"http://www.blogger.com/feeds/\d+/posts/default");
                    Debug.Assert(m.Success, "Posting operation failed.");
                    feedUrl = m.Value;
                }
            }
            const string Atom = "http://www.w3.org/2005/Atom";
            XElement entry = new XElement(
                XName.Get("entry", Atom),
                new XElement(XName.Get("title", Atom), new XAttribute("type", "text"), title),
                new XElement(XName.Get("content", Atom), new XAttribute("type", "xhtml"), body),
                new XElement(XName.Get("category", Atom), new XAttribute("scheme", "http://www.blogger.com/atom/ns#"), new XAttribute("term", "oauthdemo")));

            MemoryStream ms = new MemoryStream();
            XmlWriterSettings xws = new XmlWriterSettings() {
                Encoding = Encoding.UTF8,
            };
            XmlWriter xw = XmlWriter.Create(ms, xws);
            entry.WriteTo(xw);
            xw.Flush();

            WebRequest request = consumer.PrepareAuthorizedRequest(new MessageReceivingEndpoint(feedUrl, HttpDeliveryMethods.PostRequest | HttpDeliveryMethods.AuthorizationHeaderRequest), accessToken);
            request.ContentType = "application/atom+xml";
            request.Method = "POST";
            request.ContentLength = ms.Length;
            ms.Seek(0, SeekOrigin.Begin);
            using (Stream requestStream = request.GetRequestStream()) {
                ms.CopyTo(requestStream);
            }
            using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) {
                if (response.StatusCode == HttpStatusCode.Created) {
                    // Success
                } else {
                    // Error!
                }
            }
        }
Esempio n. 30
0
 public static string Tweet(ConsumerBase twitter, string accessToken, string status)
 {
     Dictionary<string, string> extraData = new Dictionary<string, string>();
     extraData.Add("status", status);
     HttpWebRequest request = twitter.PrepareAuthorizedRequest(TweetEndpoint, accessToken, extraData);
     IncomingWebResponse response = twitter.Channel.WebRequestHandler.GetResponse(request);
     return response.GetResponseReader().ReadToEnd();
 }