/// <summary> /// Starts the user stream. /// </summary> public IAsyncResult StartUserStream( InitUserStreamCallback friendsCallback, StreamStoppedCallback streamStoppedCallback, StatusCreatedCallback statusCreatedCallback, StatusDeletedCallback statusDeletedCallback, DirectMessageCreatedCallback directMessageCreatedCallback, DirectMessageDeletedCallback directMessageDeletedCallback, EventCallback eventCallback, RawJsonCallback rawJsonCallback = null ) { if (request != null) { throw new InvalidOperationException("Stream is already open"); } WebRequestBuilder builder = new WebRequestBuilder(new Uri("https://userstream.twitter.com/1.1/user.json"), HTTPVerb.GET, Tokens, userAgent); #if !SILVERLIGHT builder.Proxy = Proxy; #endif PrepareStreamOptions(builder); if (StreamOptions != null && StreamOptions is UserStreamOptions) { if ((StreamOptions as UserStreamOptions).AllReplies) { builder.Parameters.Add("replies", "all"); } } request = builder.PrepareRequest(); this.friendsCallback = friendsCallback; this.streamStoppedCallback = streamStoppedCallback; this.statusCreatedCallback = statusCreatedCallback; this.statusDeletedCallback = statusDeletedCallback; this.directMessageCreatedCallback = directMessageCreatedCallback; this.directMessageDeletedCallback = directMessageDeletedCallback; this.eventCallback = eventCallback; this.rawJsonCallback = rawJsonCallback; stopReceived = false; #if SILVERLIGHT request.AllowReadStreamBuffering = false; #else request.Timeout = 10000; #endif return(request.BeginGetResponse(StreamCallback, request)); }
/// <summary> /// Starts the user stream. /// </summary> public IAsyncResult StartUserStream( InitUserStreamCallback friendsCallback, StreamStoppedCallback streamErrorCallback, StatusCreatedCallback statusCreatedCallback, StatusDeletedCallback statusDeletedCallback, DirectMessageCreatedCallback directMessageCreatedCallback, DirectMessageDeletedCallback directMessageDeletedCallback, EventCallback eventCallback, RawJsonCallback rawJsonCallback = null ) { WebRequestBuilder builder = new WebRequestBuilder(new Uri("https://userstream.twitter.com/2/user.json"), HTTPVerb.GET, this.Tokens, true, this.UserAgent); PrepareStreamOptions(builder); if (this.StreamOptions != null && this.StreamOptions is UserStreamOptions) { if ((this.StreamOptions as UserStreamOptions).AllReplies) { builder.Parameters.Add("replies", "all"); } } HttpWebRequest request = builder.PrepareRequest(); this.friendsCallback = friendsCallback; this.streamStoppedCallback = streamErrorCallback; this.statusCreatedCallback = statusCreatedCallback; this.statusDeletedCallback = statusDeletedCallback; this.directMessageCreatedCallback = directMessageCreatedCallback; this.directMessageDeletedCallback = directMessageDeletedCallback; this.eventCallback = eventCallback; this.rawJsonCallback = rawJsonCallback; this.stopReceived = false; #if SILVERLIGHT request.AllowReadStreamBuffering = false; #endif return(request.BeginGetResponse(StreamCallback, request)); }
/// <summary> /// Starts the user stream. /// </summary> public IAsyncResult StartUserStream( InitUserStreamCallback friendsCallback, StreamStoppedCallback streamErrorCallback, StatusCreatedCallback statusCreatedCallback, StatusDeletedCallback statusDeletedCallback, DirectMessageCreatedCallback directMessageCreatedCallback, DirectMessageDeletedCallback directMessageDeletedCallback, EventCallback eventCallback, RawJsonCallback rawJsonCallback = null ) { WebRequestBuilder builder = new WebRequestBuilder(new Uri("https://userstream.twitter.com/2/user.json"), HTTPVerb.GET, this.Tokens, true, this.UserAgent); PrepareStreamOptions(builder); if (this.StreamOptions != null && this.StreamOptions is UserStreamOptions) { if ((this.StreamOptions as UserStreamOptions).AllReplies) builder.Parameters.Add("replies", "all"); } HttpWebRequest request = builder.PrepareRequest(); this.friendsCallback = friendsCallback; this.streamStoppedCallback = streamErrorCallback; this.statusCreatedCallback = statusCreatedCallback; this.statusDeletedCallback = statusDeletedCallback; this.directMessageCreatedCallback = directMessageCreatedCallback; this.directMessageDeletedCallback = directMessageDeletedCallback; this.eventCallback = eventCallback; this.rawJsonCallback = rawJsonCallback; this.stopReceived = false; #if SILVERLIGHT request.AllowReadStreamBuffering = false; #endif return request.BeginGetResponse(StreamCallback, request); }
/// <summary> /// Starts the user stream. /// </summary> public IAsyncResult StartUserStream( InitUserStreamCallback friendsCallback, StreamStoppedCallback streamStoppedCallback, StatusCreatedCallback statusCreatedCallback, StatusDeletedCallback statusDeletedCallback, DirectMessageCreatedCallback directMessageCreatedCallback, DirectMessageDeletedCallback directMessageDeletedCallback, EventCallback eventCallback, RawJsonCallback rawJsonCallback = null ) { if (request != null) { throw new InvalidOperationException("Stream is already open"); } WebRequestBuilder builder = new WebRequestBuilder(new Uri("https://userstream.twitter.com/2/user.json"), HTTPVerb.GET, Tokens, userAgent); PrepareStreamOptions(builder); if (StreamOptions != null && StreamOptions is UserStreamOptions) { if ((StreamOptions as UserStreamOptions).AllReplies) builder.Parameters.Add("replies", "all"); } request = builder.PrepareRequest(); this.friendsCallback = friendsCallback; this.streamStoppedCallback = streamStoppedCallback; this.statusCreatedCallback = statusCreatedCallback; this.statusDeletedCallback = statusDeletedCallback; this.directMessageCreatedCallback = directMessageCreatedCallback; this.directMessageDeletedCallback = directMessageDeletedCallback; this.eventCallback = eventCallback; this.rawJsonCallback = rawJsonCallback; stopReceived = false; #if SILVERLIGHT request.AllowReadStreamBuffering = false; #else request.Timeout = 10000; #endif return request.BeginGetResponse(StreamCallback, request); }
/// <summary> /// Starts the stream. /// </summary> private void StartStream(string streamUri) { WebRequestBuilder builder = new WebRequestBuilder(new Uri(streamUri), HTTPVerb.GET, this.Tokens); HttpWebRequest request; request = builder.PrepareRequest(); request.UserAgent = userAgent; request.BeginGetResponse( ar => { var req = (WebRequest)ar.AsyncState; // TODO: Add exception handling: EndGetResponse could throw using (var response = req.EndGetResponse(ar)) using (var reader = new StreamReader(response.GetResponseStream())) { // This loop goes as long as twitter is streaming while (!reader.EndOfStream) { // If the calling application has asked to halt the connection, this will abort the connection. if (this.stopReceived) { req.Abort(); OnStreamingStopped(StopReasons.StoppedByRequest, "Stop request received"); return; } try { TwitterStatus resultObject = Twitterizer.Core.SerializationHelper<TwitterStatus>.Deserialize( Encoding.UTF8.GetBytes(reader.ReadLine())); if (resultObject != null && resultObject.Id > 0 && this.OnStatusReceived != null) { this.OnStatusReceived(resultObject); } } catch (System.Runtime.Serialization.SerializationException) { } } } }, request); }
/// <summary> /// Starts the user stream. /// </summary> public void StartUserStream() { WebRequestBuilder builder = new WebRequestBuilder(new Uri("https://userstream.twitter.com/2/user.json"), HTTPVerb.GET, this.Tokens); HttpWebRequest request = builder.PrepareRequest(); request.KeepAlive = true; //request.UserAgent = userAgent; request.BeginGetResponse(StreamCallback, request); }
public void ProcessRequest(HttpContext context) { StringBuilder log = new StringBuilder(); string screenName = ""; try { string query = ""; UriBuilder urlBuilder = new UriBuilder("https://api.twitter.com/" + context.Server.UrlDecode(context.Request.QueryString["query"])); // Adds query strings to the url. // some headers may not be copied because they can't be used with clients other than twitter foreach (var queryString in context.Request.QueryString.AllKeys) { switch (queryString) { case "u": case "p": case "query": case "earned": case "pc": break; default: query += string.Format("&{0}={1}", queryString, context.Request.QueryString[queryString]); break; } } if (query.Length > 1) { query = query.Substring(1); } urlBuilder.Query = query; log.AppendLine(query); log.AppendLine("URL: " + urlBuilder.Uri.ToString()); OAuthTokens tokens = new OAuthTokens(); tokens.ConsumerKey = ConfigurationManager.AppSettings["TwitterConsumerKey"]; tokens.ConsumerSecret = ConfigurationManager.AppSettings["TwitterConsumerSecret"]; JToken accessToken; String userFileName = context.Server.MapPath("/App_Data/Users/" + context.Request.QueryString["u"] + "." + context.Request.QueryString["p"]); if (File.Exists(userFileName)) { using (StreamReader str = new StreamReader(userFileName)) { accessToken = JObject.Parse(str.ReadToEnd()); ; } tokens.AccessToken = (string)accessToken.SelectToken("AccessToken"); tokens.AccessTokenSecret = (string)accessToken.SelectToken("AccessSecret"); screenName = (string)accessToken.SelectToken("ScreenName"); log.AppendLine("User FOUND!"); } else { log.AppendLine("User NOT FOUND"); context.Response.StatusCode = 404; return; } //check if the request is xAuth, if it is, simulates the xAuth result for fooling Twitter for iPhone. if (context.Request.QueryString["query"].Contains("oauth/access_token")) { string xAuthResponse = string.Format("oauth_token={0}&oauth_token_secret={1}&user_id={2}&screen_name={3}&x_auth_expires=0", (string)accessToken.SelectToken("AccessToken"), (string)accessToken.SelectToken("AccessSecret"), (string)accessToken.SelectToken("UserId"), (string)accessToken.SelectToken("ScreenName")); context.Response.Write(xAuthResponse); screenName = (string)accessToken.SelectToken("ScreenName"); return; } HTTPVerb verb = HTTPVerb.GET; switch (context.Request.HttpMethod) { case "GET": verb = HTTPVerb.GET; break; case "POST": verb = HTTPVerb.POST; break; case "DELETE": verb = HTTPVerb.DELETE; break; } if (context.Request.Headers["Authorization"] == null) { tokens = null; log.AppendLine("Request NOT authenticated"); } WebRequestBuilder webreq = new WebRequestBuilder(urlBuilder.Uri, verb, tokens); webreq.Multipart = (context.Request.ContentType.Contains("multipart")); if (verb != HTTPVerb.GET) { // adds body parameters to request foreach (var key in context.Request.Form.AllKeys) { webreq.Parameters.Add(key, context.Request.Form[key]); } foreach (var fileKey in context.Request.Files.AllKeys) { webreq.Parameters.Add(fileKey, context.Request.Form[fileKey]); } } ServicePointManager.Expect100Continue = false; HttpWebRequest req = webreq.PrepareRequest(); try { HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); log.AppendLine("get Response"); StreamReader strReader = new StreamReader(resp.GetResponseStream()); String response = strReader.ReadToEnd(); if (ConfigurationManager.AppSettings["debugMode"] == "true") { log.AppendLine(response); } // replaces images url to use TwiX to load them response = Regex.Replace(response, @"(((http:\\/\\/www)|(http:\\/\\/)|(https:\\/\\/www)|(https:\\/\\/)|(www))[-a-zA-Z0-9@:%_\\\+.~#?&//=]+)\.(jpg|jpeg|gif|png|bmp|tiff|tga|svg)", delegate(Match match) { string v = match.ToString(); return(ConfigurationManager.AppSettings["baseUrl"] + "image/" + shFunctions.encryptBase64Url(DES.Encrypt(v.Replace(@"\/", "/").Replace("_normal", ""), shFunctions.key) + ".jpg")); }); strReader.Close(); context.Response.ClearContent(); context.Response.Write(response); } catch (WebException webex) { if (webex.Status == WebExceptionStatus.ProtocolError) { context.Response.StatusCode = (int)((HttpWebResponse)webex.Response).StatusCode; } log.AppendLine("ERROR: " + webex.Message); return; } } catch (Exception ee) { log.AppendLine("Error: " + ee.Message); log.AppendLine("stack: " + ee.StackTrace); } if (ConfigurationManager.AppSettings["log"] == "true") { writeLogToFile(log.ToString(), screenName, context.Request.HttpMethod, context); } //throw new Exception(context.Request.QueryString.ToString()); }