//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); }
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); }
/// <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; } } } } } } }
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); }
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"); } }
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(); } } }
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); }
/// <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); }
/// <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); }
public void SetStatus(int keywordId, KeywordStatus status) { throw new NotImplementedException(); }