public JsonResult GetCityTweets(string cityName) { TwitterViewModel model = new TwitterViewModel { ProfileName = string.Empty, FollowerCount = 0, FollowingCount = 0, TweetList = new List<TweetViewModel>() }; var searchParameter = new TweetSearchParameters("") { Lang = Language.English, //hard coding the geo location for newyork GeoCode = Geo.GenerateGeoCode(Geo.GenerateCoordinates(-74.006, 40.742), 1000, DistanceMeasure.Miles) }; var tweets = Search.SearchTweets(searchParameter); foreach (var item in tweets.OrderByDescending(res => res.CreatedAt)) { model.TweetList.Add(new TweetViewModel { TweetText = item.Text, CreatedAt = String.Format("{0:d/M/yyyy HH:mm:ss}", item.CreatedAt), CreatedBy = item.CreatedBy.Id.ToString(), HashTag = item.Hashtags.Any() ? item.Hashtags[0].Text : "" }); } return Json(model, JsonRequestBehavior.AllowGet); }
//OLD UNUSED CODE// public static string createBinArrayFile(IEnumerable<ITweet> listOfTweets, TweetSearchParameters searchParameters) { string date = "", time = ""; string startDir = Directory.GetCurrentDirectory(); string currentDir = startDir + @"\Searches\" + date; string filePath = ""; GetDateTime(ref date, ref time); if(!Directory.Exists(currentDir)) Directory.CreateDirectory(currentDir); Directory.SetCurrentDirectory(currentDir); sTweet[] tweetArray = ListToSerialTweet(listOfTweets, listOfTweets.Count(), searchParameters); BinaryFormatter bf = new BinaryFormatter(); byte[] buffer; using(var ms = new MemoryStream()) { bf.Serialize(ms, tweetArray); buffer = ms.ToArray(); } filePath = String.Format("{0}_{1}.bin", date, time); using(BinaryWriter newFile = new BinaryWriter(File.Open(filePath, FileMode.CreateNew))) { newFile.Write(buffer, 0, buffer.Length); newFile.Close(); } Directory.SetCurrentDirectory(startDir); return currentDir + filePath; }
// Note: The latitude/longitude order here is reversed compared to the various // signatures in Tweetinvi (see the GeoCode constructor below for example), // for ease of copy-and-pasting coordinates from the web static ISearchResult SearchTweetsTaggedWithGeo(string query, double latitude, double longitude, double radius = 15, DistanceMeasure distanceMeasure = DistanceMeasure.Miles) { var searchParameters = new TweetSearchParameters(query) { GeoCode = new GeoCode(longitude, latitude, radius, distanceMeasure), Lang = Language.English, SearchType = SearchResultType.Recent, MaximumNumberOfResults = 15, Locale = "new york" }; return Search.SearchTweetsWithMetadata(searchParameters); }
public ITweetSearchParameters CloneTweetSearchParameters(ITweetSearchParameters tweetSearchParameters) { var clone = new TweetSearchParameters(tweetSearchParameters.SearchQuery) { Filters = tweetSearchParameters.Filters, GeoCode = tweetSearchParameters.GeoCode, Lang = tweetSearchParameters.Lang, Locale = tweetSearchParameters.Locale, MaxId = tweetSearchParameters.MaxId, MaximumNumberOfResults = tweetSearchParameters.MaximumNumberOfResults, SearchType = tweetSearchParameters.SearchType, Since = tweetSearchParameters.Since, SinceId = tweetSearchParameters.SinceId, TweetSearchType = tweetSearchParameters.TweetSearchType, Until = tweetSearchParameters.Until }; return clone; }
private BTree.BTree<int, sTweet> Pesquisar() { // Creates the search parameter for the search function. var searchParameter = new TweetSearchParameters(searchTextParameter.Text) { MaximumNumberOfResults = (int) numberTweetsParameter.Value, Lang = ((KeyValuePair<string, Language>) langParameter.SelectedItem).Value, //get language value of selected item in langParameter listbox TweetSearchType = Type(), //get Tweet Search Type from selected item in tweetsearchtypeparameter listbox }; //if the <none> geolocation isn't selected, the user wants to set a geolocation. //Searches through index of listbox and finds which option the user choose. int indexGeoPosParameter = GeoPosBoxParameter.SelectedIndex; switch (indexGeoPosParameter) { case 1: //Campus Centro searchParameter.GeoCode = new GeoCode(-51.2209625, -30.0331423, (double)radiusParameter.Value, DistanceMeasure.Kilometers); break; case 2: //Campus do Vale searchParameter.GeoCode = new GeoCode(-51.1218710, -30.0710872, (double)radiusParameter.Value, DistanceMeasure.Kilometers); break; case 3: //Hospital de Clínicas searchParameter.GeoCode = new GeoCode(-51.2069721, -30.0390867, (double)radiusParameter.Value, DistanceMeasure.Kilometers); break; case 4: //Aeroporto Salgado Filho searchParameter.GeoCode = new GeoCode(-51.1753810, -29.9934730, (double)radiusParameter.Value, DistanceMeasure.Kilometers); break; case 5: //Mercado Público searchParameter.GeoCode = new GeoCode(-51.2278460, -30.0275120, (double)radiusParameter.Value, DistanceMeasure.Kilometers); break; case 6: //Cristo Redentor searchParameter.GeoCode = new GeoCode(-43.2104845, -22.9519098, (double) radiusParameter.Value, DistanceMeasure.Kilometers); break; case 7: //Aeropuerto Tegucigalpa searchParameter.GeoCode = new GeoCode(-87.2170801, 14.0608254, (double) radiusParameter.Value, DistanceMeasure.Kilometers); break; default: //Geolocale not defined break; } return Pesquisar(searchParameter); }
public static void searchTweets() { tweetList = new List<TweetObj>(); TweetSearchParameters searchParameter; if (location) { searchParameter = new TweetSearchParameters(new GeoCode(longi, lat, r, DistanceMeasure.Kilometers)); } else { searchParameter = new TweetSearchParameters("*"); } searchParameter.Lang = Language.English; searchParameter.MaximumNumberOfResults = 250; var tweets = Search.SearchTweets(searchParameter); using (var sequenceEnum = tweets.GetEnumerator()) { while (sequenceEnum.MoveNext()) { tweetList.Add(new TweetObj(sequenceEnum.Current.Text, sequenceEnum.Current.CreatedBy.Name, sequenceEnum.Current.CreatedBy.ScreenName, sequenceEnum.Current.CreatedAt, sequenceEnum.Current.Coordinates, sequenceEnum.Current.Place, sequenceEnum.Current.Hashtags)); } } }
public static double ProfileFrequency(string query) { if (profiledQueries.ContainsKey(query)) return profiledQueries[query]; if (!IsNextRequestPossible()) SleepUntilNextRequest(); var credentials = new TwitterCredentials( ConfigurationManager.AppSettings["ConsumerKey"], ConfigurationManager.AppSettings["ConsumerSecret"], ConfigurationManager.AppSettings["WorkerToken"], ConfigurationManager.AppSettings["WorkerSecret"] ); exceptionError = ""; List<DateTime> tweetsDateTime = new List<DateTime>(); Auth.ExecuteOperationWithCredentials(credentials, () => { int profilingRetries = 0; TweetSearchParameters searchParams = new TweetSearchParameters(query) { SearchType = SearchResultType.Recent }; // retry profiling a few times if there is no response while (profilingRetries <= Convert.ToInt32(ConfigurationManager.AppSettings["TwitterProfilerRetries"])) { var tweets = Search.SearchTweets(searchParams); if (tweets == null) { var latestException = ExceptionHandler.GetLastException(); exceptionError = latestException.TwitterDescription; profilingRetries++; } else { ++numberOfRequestsMade; exceptionError = ""; foreach (var tweet in tweets) tweetsDateTime.Add(tweet.CreatedAt); break; } } }); lastRequest = DateTime.Now; nextPossibleRequest = DateTime.Now.AddMilliseconds(Convert.ToInt32(ConfigurationManager.AppSettings["TwitterProfilerRateLimitMs"])); double returnFrequency = double.Epsilon; if (tweetsDateTime.Count == 0 || tweetsDateTime.Count == 1) { if (exceptionError != "") { returnFrequency = (int)InvalidReturns.Exception; } profiledQueries.Add(query, returnFrequency); Console.WriteLine("Query [{0}] has frequency {1}", query, returnFrequency); return returnFrequency; } tweetsDateTime.Sort(); TimeSpan timeDiffBetweenTweets = tweetsDateTime.Last().Subtract(tweetsDateTime.First()); returnFrequency = (tweetsDateTime.Count-1)/((Math.Abs(timeDiffBetweenTweets.TotalMilliseconds)+1)/1000.0); profiledQueries.Add(query, returnFrequency); Console.WriteLine("Query [{0}] has frequency {1}", query, returnFrequency); return returnFrequency; }
//Type converters public static sTweet[] ListToSerialTweet(IEnumerable<ITweet> listOfTweets, int TweetsInList, TweetSearchParameters searchParameters) { int index = 0; Tweetinvi.Core.Interfaces.Models.IGeoCode aux = searchParameters.GeoCode; bool isKilo = false; sTweet[] tweetArray = new sTweet[TweetsInList]; foreach (var tweet in listOfTweets) { tweetArray[index] = new sTweet(tweet.Text, tweet.CreatedBy.Name, tweet.CreatedBy.ScreenName, tweet.CreatedAt, tweet.RetweetCount, tweet.FavouriteCount, tweet.Id, tweet.IdStr); if(aux != null) { if(aux.DistanceMeasure == Tweetinvi.Core.Enum.DistanceMeasure.Kilometers) isKilo = true; else isKilo = false; tweetArray[index].serializeParameters = new sParameters ( aux.Coordinates.Longitude, aux.Coordinates.Latitude, aux.Radius, isKilo, (byte) searchParameters.Lang, (byte) searchParameters.TweetSearchType ); index++; } else { tweetArray[index].serializeParameters = new sParameters(-1, -1, -1, false, (byte) searchParameters.Lang, (byte) searchParameters.TweetSearchType); index++; } } return tweetArray; }
// Note: The latitude/longitude order here is reversed compared to the various // signatures in Tweetinvi (see the GeoCode constructor below for example), // for ease of copy-and-pasting coordinates from the web static ISearchResult SearchTweetsTaggedWithGeo(string query, double latitude, double longitude, double radius = 15, DistanceMeasure distanceMeasure = DistanceMeasure.Miles) { var searchParameters = new TweetSearchParameters(query) { GeoCode = new GeoCode(longitude, latitude, radius, distanceMeasure), Lang = Language.English, SearchType = SearchResultType.Recent, MaximumNumberOfResults = 15 }; try { var result = Search.SearchTweetsWithMetadata(searchParameters); return result; } catch (Exception e) { PrintStackTrace(e); Log(e); return null; } }
private BTree.BTree<int, sTweet> Pesquisar(TweetSearchParameters searchParameter) { string aux = button1.Text; if ((searchParameter.SearchQuery != "") || (searchParameter.GeoCode != null)) //usuário passou parâmetros { progressBar.Show(); button1.Text = "Searching, please wait..."; IEnumerable<ITweet> list = Search.SearchTweets(searchParameter); progressBar.Step = 33; progressBar.PerformStep(); sTweet[] tweetArray = FileManipulation.ListToSerialTweet(list, list.Count(), searchParameter); progressBar.PerformStep(); TreeIndexCheck check = new TreeIndexCheck(0, 0, 0); BTree.BTree<int, sTweet> Tree = FileManipulation.SerialITweetToBTree(tweetArray, ref check); progressBar.PerformStep(); int i = list.Count(); button1.Text = aux; MessageBox.Show("Todos tweets lidos. Retornando a lista com " + i.ToString() + " elementos."); progressBar.Value = 0; return Tree; } else { MessageBox.Show("Pesquisa sem parâmetros!\nInsira pelos menos um query de texto ou um geolocal.", "ERROR 001"); return null; } }
public JsonResult GetUserDetails(string id, string key, string geo) { string message = ""; TwitterViewModel model = new TwitterViewModel { TweetList = new List<TweetViewModel>() }; if (!string.IsNullOrEmpty(id)) { var user = Tweetinvi.User.GetUserFromScreenName(id); model.ProfileName = user.Name; model.FollowerCount = user.FollowersCount; model.FollowingCount = user.FriendsCount; } string query = string.IsNullOrEmpty(key) ? "" : key + " "; query += string.IsNullOrEmpty(id) ? "" : "from:" + id; var searchParameter = new TweetSearchParameters("") { Lang = Language.English, SearchQuery = query.TrimEnd() }; if(!string.IsNullOrEmpty(geo)) { string[] result = geo.Split(','); if (!string.IsNullOrEmpty(result[0].Trim())) { searchParameter.GeoCode = new GeoCode(double.Parse(result[1].TrimEnd()), double.Parse(result[0].TrimEnd()), double.Parse(result[2].TrimEnd()), DistanceMeasure.Miles); } } var tweets = Search.SearchTweets(searchParameter); foreach (var item in tweets.OrderByDescending(res => res.CreatedAt)) { model.TweetList.Add(new TweetViewModel { TweetText = item.Text, CreatedAt = String.Format("{0:d/M/yyyy HH:mm:ss}", item.CreatedAt), CreatedBy = item.CreatedBy.Name, HashTag = item.Hashtags.Any() ? item.Hashtags[0].Text : "" }); } return Json(model, JsonRequestBehavior.AllowGet); }
/// <summary> /// Search Tweets by text /// </summary> /// <param name="text"></param> /// <returns>Enumeration of finded tweets or null if nothing</returns> public IEnumerable<ITweet> SearchTweets(string text) { ITweetSearchParameters parameters = new TweetSearchParameters(text) { MaximumNumberOfResults = 20 }; var tweets = Search.SearchTweets(parameters); return tweets; }
public TweetContainer Search(string query, long sinceId, int maximumNumberOfResults) { TweetContainer container = new TweetContainer(); TweetSearchParameters parameters = new TweetSearchParameters(query); parameters.TweetSearchType = TweetSearchType.OriginalTweetsOnly; parameters.SearchType = SearchResultType.Mixed; parameters.SinceId = sinceId; parameters.MaximumNumberOfResults = maximumNumberOfResults; container.Tweets = Tweetinvi.Search.SearchTweets(parameters); container.HasNextBatch = maximumNumberOfResults == container.Tweets.Count(); container.Tweets = container.Tweets.Where(tweet => tweet.Text.IndexOf(": RT", StringComparison.OrdinalIgnoreCase) > -1 == false); container.Tweets = container.Tweets.Where(tweet => tweet.Text.StartsWith("RT", StringComparison.OrdinalIgnoreCase) == false); container.Tweets = container.Tweets.Where(tweet => IgnoredUsers.Any(user => !tweet.CreatedBy.ScreenName.Equals(user, StringComparison.OrdinalIgnoreCase))); container.Tweets = container.Tweets.Where(tweet => IgnoredUsers.Any(user => !tweet.Text.Contains(user))); container.Tweets = container.Tweets.Where(tweet => tweet.Text.Replace(".", "").Replace(" ", "").IndexOf("lastrtwin", StringComparison.OrdinalIgnoreCase) == -1); return container; }