From f8be8641f7a90302cacc903a1123202eb7db8cee Mon Sep 17 00:00:00 2001 From: Sebastiaan Janssen Date: Sat, 7 Jan 2017 12:00:24 +0100 Subject: [PATCH] Get Twitter search results into the page by async --- OurUmbraco.Site/OurUmbraco.Site.csproj | 1 - .../Views/MacroPartials/Community/Home.cshtml | 15 +++- .../Community/TwitterSearchUmbraco.cshtml | 89 ------------------- .../Partials/Home/TwitterSearchUmbraco.cshtml | 54 ++++++++++- .../Controllers/TwitterSearchController.cs | 55 ++++++++++++ OurUmbraco/Our/MigrationsHandler.cs | 36 -------- OurUmbraco/OurUmbraco.csproj | 5 ++ OurUmbraco/packages.config | 1 + 8 files changed, 126 insertions(+), 130 deletions(-) delete mode 100644 OurUmbraco.Site/Views/MacroPartials/Community/TwitterSearchUmbraco.cshtml create mode 100644 OurUmbraco/Community/Controllers/TwitterSearchController.cs diff --git a/OurUmbraco.Site/OurUmbraco.Site.csproj b/OurUmbraco.Site/OurUmbraco.Site.csproj index 8601510b..b5942a3a 100644 --- a/OurUmbraco.Site/OurUmbraco.Site.csproj +++ b/OurUmbraco.Site/OurUmbraco.Site.csproj @@ -1792,7 +1792,6 @@ - diff --git a/OurUmbraco.Site/Views/MacroPartials/Community/Home.cshtml b/OurUmbraco.Site/Views/MacroPartials/Community/Home.cshtml index a6eea8ab..ea9d0deb 100644 --- a/OurUmbraco.Site/Views/MacroPartials/Community/Home.cshtml +++ b/OurUmbraco.Site/Views/MacroPartials/Community/Home.cshtml @@ -58,12 +58,23 @@ @if (Members.IsLoggedIn()) { @Html.Partial("home/forumactivity") - @Html.Partial("home/twittersearchumbraco") + @Html.Partial("home/documentation") } else { @Html.Partial("home/documentation") @Html.Partial("home/forumactivity") - @Html.Partial("home/twittersearchumbraco") + } + + \ No newline at end of file diff --git a/OurUmbraco.Site/Views/MacroPartials/Community/TwitterSearchUmbraco.cshtml b/OurUmbraco.Site/Views/MacroPartials/Community/TwitterSearchUmbraco.cshtml deleted file mode 100644 index e1f414b6..00000000 --- a/OurUmbraco.Site/Views/MacroPartials/Community/TwitterSearchUmbraco.cshtml +++ /dev/null @@ -1,89 +0,0 @@ -@using System.Configuration -@using OurUmbraco.Forum.Extensions -@using Tweetinvi -@using Tweetinvi.Models -@using Tweetinvi.Parameters -@using Umbraco.Core.Cache -@using Umbraco.Core.Logging -@inherits Umbraco.Web.Macros.PartialViewMacroPage - -@{ - ITweet[] tweets = {}; - ITweet[] filteredTweets = {}; - try - { - tweets = ApplicationContext.ApplicationCache.RuntimeCache.GetCacheItem("UmbracoSearchedTweets", - () => - { - Auth.SetUserCredentials(ConfigurationManager.AppSettings["twitterConsumerKey"], - ConfigurationManager.AppSettings["twitterConsumerSecret"], - ConfigurationManager.AppSettings["twitterUserAccessToken"], - ConfigurationManager.AppSettings["twitterUserAccessSecret"]); - var user = Tweetinvi.User.GetAuthenticatedUser(); - - var searchParameter = new SearchTweetsParameters("umbraco") {SearchType = SearchResultType.Recent}; - return Search.SearchTweets(searchParameter).ToArray(); - }, TimeSpan.FromMinutes(1)); - - // TODO: make configurable in Umbraco - var usernameFilter = "Technologx,Technologx4Real,SOAzure,AdamSmith1,UriSamuels,coding_jobfeeds,TechSparkUk,ItProjectBoard,liveedutv,AdeboyejoAde,VivacitySocial".ToLowerInvariant().Split(','); - var wordFilter = "exegesis,#Job Alert:".ToLowerInvariant().Split(','); - - filteredTweets = tweets.Where( - x => x.CreatedBy.UserIdentifier.ScreenName.ToLowerInvariant().ContainsAny(usernameFilter) == false - && x.Text.ToLowerInvariant().ContainsAny(wordFilter) == false).ToArray(); - } - catch (Exception ex) - { - LogHelper.Error("Could not get tweets", ex); - } -} - -@if (filteredTweets.Any()) -{ -
-
-
- -
-

Twitter Activity

-

- Recent activity on twitter, where people are talking about Umbraco. -

-
-
- Recent tweets -
- -
- @Column(filteredTweets) -
- - - -
-
-
-} - -@helper Column(ITweet[] tweets) -{ - foreach (var tweet in tweets.Take(6)) - { - - -
- -
- -
-
-

@tweet.Text

-

@tweet.CreatedAt.ConvertToRelativeTime() by @@@tweet.CreatedBy.UserIdentifier.ScreenName (@tweet.CreatedBy.Name)

-
-
-
- } -} \ No newline at end of file diff --git a/OurUmbraco.Site/Views/Partials/Home/TwitterSearchUmbraco.cshtml b/OurUmbraco.Site/Views/Partials/Home/TwitterSearchUmbraco.cshtml index 220fd34e..35a4e201 100644 --- a/OurUmbraco.Site/Views/Partials/Home/TwitterSearchUmbraco.cshtml +++ b/OurUmbraco.Site/Views/Partials/Home/TwitterSearchUmbraco.cshtml @@ -1,2 +1,52 @@ -@inherits Umbraco.Web.Macros.PartialViewMacroPage -@Umbraco.RenderMacro("TwitterSearchUmbraco") \ No newline at end of file +@using OurUmbraco.Forum.Extensions +@using Tweetinvi.Models +@model ITweet[] + +@if (Model.Any()) +{ +
+
+
+ +
+

Twitter Activity

+

+ Recent activity on twitter, where people are talking about Umbraco. +

+
+
+ Recent tweets +
+ +
+ @Column(Model) +
+ + + +
+
+
+} + +@helper Column(ITweet[] tweets) +{ + foreach (var tweet in tweets.Take(6)) + { + + +
+ +
+ +
+
+

@tweet.Text

+

@tweet.CreatedAt.ConvertToRelativeTime() by @@@tweet.CreatedBy.UserIdentifier.ScreenName (@tweet.CreatedBy.Name)

+
+
+
+ } +} \ No newline at end of file diff --git a/OurUmbraco/Community/Controllers/TwitterSearchController.cs b/OurUmbraco/Community/Controllers/TwitterSearchController.cs new file mode 100644 index 00000000..e3aab551 --- /dev/null +++ b/OurUmbraco/Community/Controllers/TwitterSearchController.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Web.Mvc; +using Tweetinvi; +using Tweetinvi.Models; +using Tweetinvi.Parameters; +using Umbraco.Core; +using Umbraco.Core.Cache; +using Umbraco.Core.Logging; +using Umbraco.Web.Mvc; + +namespace OurUmbraco.Community.Controllers +{ + public class TwitterSearchController : SurfaceController + { + public ActionResult TwitterSearchResult(string searchWord = "umbraco") + { + ITweet[] filteredTweets = { }; + try + { + var tweets = ApplicationContext.ApplicationCache.RuntimeCache.GetCacheItem("UmbracoSearchedTweets", + () => + { + Auth.SetUserCredentials(ConfigurationManager.AppSettings["twitterConsumerKey"], + ConfigurationManager.AppSettings["twitterConsumerSecret"], + ConfigurationManager.AppSettings["twitterUserAccessToken"], + ConfigurationManager.AppSettings["twitterUserAccessSecret"]); + Tweetinvi.User.GetAuthenticatedUser(); + + var searchParameter = new SearchTweetsParameters(searchWord) { SearchType = SearchResultType.Recent }; + return Search.SearchTweets(searchParameter).ToArray(); + + }, TimeSpan.FromMinutes(2)); + + var usernameFilter = "Technologx,Technologx4Real,SOAzure,AdamSmith1,AdamSmitht1,UriSamuels,coding_jobfeeds,TechSparkUk,ItProjectBoard,liveedutv,AdeboyejoAde,VivacitySocial,CHHCInc,DevOpsBlogs,ItCrowdSource,EquiKey".ToLowerInvariant().Split(','); + var wordFilter = "exegesis,#Job Alert:,#pigefodboldbsf".ToLowerInvariant().Split(','); + + filteredTweets = tweets.Where( + x => x.Urls.Any(u => u.ExpandedURL.Contains("umbraco-proxy.com")) == false + && x.CreatedBy.UserIdentifier.ScreenName.ToLowerInvariant().ContainsAny(usernameFilter) == false + && x.Text.ToLowerInvariant().ContainsAny(wordFilter) == false).ToArray(); + } + catch (Exception ex) + { + LogHelper.Error("Could not get tweets", ex); + } + + return PartialView("~/Views/Partials/Home/TwitterSearchUmbraco.cshtml", filteredTweets); + } + } +} diff --git a/OurUmbraco/Our/MigrationsHandler.cs b/OurUmbraco/Our/MigrationsHandler.cs index d03cee99..840542d3 100644 --- a/OurUmbraco/Our/MigrationsHandler.cs +++ b/OurUmbraco/Our/MigrationsHandler.cs @@ -37,7 +37,6 @@ namespace OurUmbraco.Our AddMarkAsSolutionReminderSent(); UseNewLoginForm(); UseNewForgotPasswordForm(); - TwitterSearchMacro(); } private void EnsureMigrationsMarkerPathExists() @@ -638,40 +637,5 @@ namespace OurUmbraco.Our LogHelper.Error(string.Format("Migration: '{0}' failed", migrationName), ex); } } - - private void TwitterSearchMacro() - { - var migrationName = MethodBase.GetCurrentMethod().Name; - - try - { - var path = HostingEnvironment.MapPath(MigrationMarkersPath + migrationName + ".txt"); - if (File.Exists(path)) - return; - - var macroService = ApplicationContext.Current.Services.MacroService; - var macroAlias = "TwitterSearchUmbraco"; - if (macroService.GetByAlias(macroAlias) == null) - { - // Run migration - - var macro = new Macro - { - Name = macroAlias, - Alias = macroAlias, - ScriptingFile = "~/Views/MacroPartials/Community/TwitterSearchUmbraco.cshtml", - UseInEditor = true - }; - macro.Save(); - } - - string[] lines = { "" }; - File.WriteAllLines(path, lines); - } - catch (Exception ex) - { - LogHelper.Error(string.Format("Migration: '{0}' failed", migrationName), ex); - } - } } } diff --git a/OurUmbraco/OurUmbraco.csproj b/OurUmbraco/OurUmbraco.csproj index 17e63b10..6936bd47 100644 --- a/OurUmbraco/OurUmbraco.csproj +++ b/OurUmbraco/OurUmbraco.csproj @@ -293,6 +293,10 @@ ..\packages\UmbracoCms.Core.7.5.6\lib\TidyNet.dll True + + ..\packages\TweetinviAPI.1.2.0\lib\net45\Tweetinvi.dll + True + ..\packages\UmbracoCms.Core.7.5.6\lib\umbraco.dll True @@ -340,6 +344,7 @@ + diff --git a/OurUmbraco/packages.config b/OurUmbraco/packages.config index a5e18baa..58046930 100644 --- a/OurUmbraco/packages.config +++ b/OurUmbraco/packages.config @@ -48,6 +48,7 @@ +