/// <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));
        }
Beispiel #2
0
        /// <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));
        }
Beispiel #3
0
        /// <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);
        }
Beispiel #7
0
        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());
        }