Ejemplo n.º 1
0
        //remove when real logic is implemented
        private List <KeywordStatus> FakeMentionsList(int count)
        {
            List <KeywordStatus> kl = new List <KeywordStatus>();
            List <Status>        sl = new List <Status>();

            for (int i = 0; i < count; i++)
            {
                sl.Add(new Status {
                    id = i, text = "tweet" + i.ToString(), user = new User {
                        name = "GoDaddy"
                    }
                });
            }

            KeywordStatus ks = new KeywordStatus {
                KeywordId = 2, StatusList = sl
            };

            kl.Add(ks);
            ks = new KeywordStatus {
                KeywordId = 3, StatusList = sl
            };
            kl.Add(ks);

            return(kl);
        }
Ejemplo n.º 2
0
        public void PostTwitterMentionsToRest()
        {
            string result = string.Empty;

            //http://localhost/BIDataAPI/api/twitter/mentions
            requestPost                       = (HttpWebRequest)WebRequest.Create("http://localhost/BIdataApi/api/twitter/mentions");
            requestPost.Method                = "POST";
            requestPost.ContentType           = "application/json";
            requestPost.UseDefaultCredentials = true;

            TweetManager  tm = new TweetManager();
            KeywordStatus ks = new KeywordStatus();

            Twitter.Components.Twitter t = new Twitter.Components.Twitter();
            ks.KeywordId  = 7;
            ks.StatusList = tm.GetTweetsByQuery(20, Uri.EscapeDataString("\"go daddy\" OR godaddy OR go-daddy"), Twitter.Utility.GetOAuthToken(t.Xml));

            string requestData = new JavaScriptSerializer().Serialize(ks);

            byte[] data = Encoding.UTF8.GetBytes(requestData);

            using (Stream dataStream = requestPost.GetRequestStream())
                dataStream.Write(data, 0, data.Length);

            HttpWebResponse response = requestPost.GetResponse() as HttpWebResponse;

            result = new StreamReader(response.GetResponseStream()).ReadToEnd();

            Assert.AreEqual(response.StatusCode, HttpStatusCode.Created);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// All Brand mentions
        /// </summary>
        /// <param name="twitterDataComponent"></param>
        private static void SaveStatus(KeywordStatus mentionMaster)
        {
            if (!Object.Equals(mentionMaster, null))
            {
                foreach (Status mention in mentionMaster.StatusList)
                {
                    if (!String.IsNullOrEmpty(mention.user.id))
                    {
                        try
                        {
                            DataFactory.ExecuteNonQuery("TwitterUsersInsert",
                                                        new KeyValuePair <string, object>("@TwitterUserID", mention.user.id),
                                                        new KeyValuePair <string, object>("@TwitterUserName", mention.user.name),
                                                        new KeyValuePair <string, object>("@TwitterScreenName", mention.user.screen_name),
                                                        new KeyValuePair <string, object>("@FollowersCount", mention.user.followers_count ?? 0));

                            DataFactory.ExecuteNonQuery("TwitterMentionsRepliesInsert",
                                                        new KeyValuePair <string, object>("@TwitterUserID", mention.user.id),
                                                        new KeyValuePair <string, object>("@CreateDate", DateTime.ParseExact(mention.created_at, "ddd MMM dd HH:mm:ss zzzz yyyy", CultureInfo.InvariantCulture).ToUniversalTime().AddHours(-7)),
                                                        new KeyValuePair <string, object>("@StatusID", mention.id),
                                                        new KeyValuePair <string, object>("@StatusText", mention.text),
                                                        new KeyValuePair <string, object>("@InReplyToScreenName", mention.in_reply_to_screen_name),
                                                        new KeyValuePair <string, object>("@InReplyToUserID", mention.in_reply_to_user_id),
                                                        new KeyValuePair <string, object>("@LanguageCode", mention.lang),
                                                        new KeyValuePair <string, object>("@InReplyToStatusID", mention.in_reply_to_status_id));

                            DataFactory.ExecuteNonQuery("TwitterMentionsbyKeywordsInsert",
                                                        new KeyValuePair <string, object>("@KeywordID", mentionMaster.KeywordId),
                                                        new KeyValuePair <string, object>("@StatusID", mention.id));
                        }
                        catch (Exception e)
                        {
                            if (e.Message.Contains("deadlocked"))
                            {
                                SaveStatus(mentionMaster);
                                ExceptionExtensions.LogInformation("TwitterDataSource.SaveStatus", "Deadlock encountered, trying again");
                            }
                            else if (e.Message.Contains("duplicate"))
                            {
                                Utility.WriteToLogFile(String.Format("TwitterQueueProcessor_Duplicates_{0:M_d_yyyy}", DateTime.Today) + ".log", "Duplicate StatusID encountered: " + mention.id);
                            }
                            else
                            {
                                ExceptionExtensions.LogError(e, "TwitterDataSource.SaveStatus", string.Format("mention: {0}", mention.id ?? 0));

                                //if tempdb full or other critical db error, re-throw
                                if (Utility.IsCriticalDBError(e))
                                {
                                    throw;
                                }
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 4
0
        public KeywordStatus CreateMentions(KeywordStatus value)
        {
            try
            {
                _queueManager.AddToQueue(Utility.SerializeToXMLString <KeywordStatus>(value), "Twitter KeywordStatus" + value.KeywordId);
            }
            catch (Exception e)
            {
                ExceptionExtensions.LogError(e, "TwitterService.CreateMentions");
            }

            return(value);
        }
Ejemplo n.º 5
0
        private void SendAllMentions(KeywordStatus keywordStatus)
        {
            //CreatePostRequest
            Uri apiuri = new Uri(XMLUtility.GetTextFromAccountNode(Xml, "apiuri") + "/mentions");

            //send
            try
            {
                HttpStatusCode code = SendRequest(apiuri, keywordStatus, true);
            }
            catch (Exception e)
            {
                ExceptionExtensions.LogError(e, "TwitterDataSource.SendAllMentions");
            }
        }
Ejemplo n.º 6
0
        public override void ProcessMessage(object sender, MessageEventArgs args)
        {
            bool handled = false;

            try
            {
                string        msg = Encoding.UTF8.GetString(args.Message.BodyStream.ToByteArray());
                KeywordStatus ks  = Utility.DeserializeXMLString <KeywordStatus>(msg);

                if (!Object.Equals(ks, null))
                {
                    TwitterDataComponent tdc = new TwitterDataComponent();
                    tdc.KeywordStatus = ks;

                    handled = true;
                    FireMessageProcessingEvent();
                    QueueComponentDataSource.Process(tdc);
                    FireMessageProcessedEvent();
                }

                List <User> users = Utility.DeserializeXMLString <List <User> >(msg);
                if (!Object.Equals(null, users))
                {
                    TwitterDataComponent tdc = new TwitterDataComponent();
                    tdc.TwitterUserList = users;

                    handled = true;
                    FireMessageProcessingEvent();
                    QueueComponentDataSource.Process(tdc);
                    FireMessageProcessedEvent();
                }
            }
            catch (Exception e)
            {
                ExceptionExtensions.LogError(e, "QueueTwitter.ProcessMessage");

                if (Utility.IsCriticalDBError(e))
                {
                    FireShuttingDownEvent();
                }

                if (handled)
                {
                    FireMessageProcessedEvent();
                }
            }
        }
Ejemplo n.º 7
0
        public HttpResponseMessage Post([FromBody] KeywordStatus value)
        {
            HttpResponseMessage response;

            if (!Object.Equals(null, value))
            {
                KeywordStatus cr = _tweetService.CreateMentions(value);
                response = Request.CreateResponse(HttpStatusCode.Created);
                //response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = 1 }));
            }
            else
            {
                response = Request.CreateResponse(HttpStatusCode.BadRequest);
            }

            return(response);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Get all tweets with "GoDaddy" in them.
        /// 100 per page, up to 15 pages if we loop and make seperate calls for each page
        /// </summary>
        internal Dictionary <int, List <Status> > GetAllMentionsByQuery(TwitterContext cont)
        {
            Dictionary <int, List <Status> > allTwitterMentions = new Dictionary <int, List <Status> >();

            if (XMLUtility.IsComponentEnabled(Xml, ProcessorName))
            {
                int countPerPage; int pageCount;
                TwitterDataSource data = new TwitterDataSource();
                TweetManager      tm   = new TweetManager();

                XMLUtility.GetPageResultCounts(Xml, ProcessorName, out countPerPage, out pageCount, 100, 3);
                List <Keyword> queries    = data.GetTweetQueries();
                bool           useSinceId = XMLUtility.UseSinceId(Xml, ProcessorName);

                //create backup of current keys in case of failure at db level
                lock (cont) cont.prevRunLatestTweetIDs = cont.LatestTweetIDs.ToDictionary(entry => entry.Key, entry => entry.Value);

                foreach (Keyword item in queries)
                {
                    try
                    {
                        long sinceId = 0;
                        if (useSinceId)
                        {
                            //get the last recorded id for this query and use it
                            if (!Object.Equals(cont, null))
                            {
                                lock (cont)
                                {
                                    if (cont.LatestTweetIDs.ContainsKey(item.KeywordId))
                                    {
                                        cont.LatestTweetIDs.TryGetValue(item.KeywordId, out sinceId);
                                    }
                                }
                            }
                        }

                        //call the mention object in the API wrapper
                        TwitterDataComponent _dataComponent = DroneDataComponent as TwitterDataComponent;
                        KeywordStatus        ks             = new KeywordStatus();
                        ks.KeywordId = item.KeywordId;

                        ks.StatusList = tm.GetTweetsByQuery(countPerPage, item.KeywordValue + (sinceId > 0 ? "&since_id=" + sinceId : string.Empty), Utility.GetOAuthToken(Xml));
                        allTwitterMentions.Add(ks.KeywordId, ks.StatusList);

                        _dataComponent.KeywordStatus = ks;
                        DroneDataSource.Process(_dataComponent);

                        //if there was a failure saving to the db, reset the since id to gather and try again
                        if (_dataComponent.SaveFailure)
                        {
                            lock (cont) cont.LatestTweetIDs = cont.prevRunLatestTweetIDs.ToDictionary(entry => entry.Key, entry => entry.Value);
                        }

                        //get the last id for this query and store it
                        if (!Object.Equals(cont, null) && allTwitterMentions.ContainsKey(item.KeywordId) && allTwitterMentions[item.KeywordId].Count > 0)
                        {
                            long latestID;
                            long.TryParse(allTwitterMentions[item.KeywordId][0].id.ToString(), out latestID);

                            lock (cont)
                            {
                                if (cont.LatestTweetIDs.ContainsKey(item.KeywordId))
                                {
                                    cont.LatestTweetIDs[item.KeywordId] = latestID;
                                }
                                else
                                {
                                    cont.LatestTweetIDs.Add(item.KeywordId, latestID);
                                }
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        ExceptionExtensions.LogError(e, "Twitter.GetAllMentionsByQuery()", "Keyword name: " + item.KeywordName);
                    }
                }
            }
            return(allTwitterMentions);
        }
Ejemplo n.º 9
0
 /// <summary>
 /// Sets the status.
 /// </summary>
 /// <param name="keywordId">The keyword ID.</param>
 /// <param name="status">The status.</param>
 public void SetStatus(int keywordId, KeywordStatus status)
 {
     Factory.SetStatus(keywordId, (byte)status);
 }
Ejemplo n.º 10
0
 public void SetStatus(int keywordId, KeywordStatus status)
 {
     throw new NotImplementedException();
 }