예제 #1
0
        /// <summary>
        /// Get Twitter posts
        /// </summary>
        /// <param name="model"></param>
        /// <param name="screenName"></param>
        public static List <SocialFeedItemModel> GetTwitterPosts(SocialMediaAuthorizeModel model, string screenName)
        {
            var authorizer = new MvcAuthorizer
            {
                CredentialStore = new SingleUserInMemoryCredentialStore
                {
                    ConsumerKey       = model.AppId,
                    ConsumerSecret    = model.AppSecret,
                    AccessToken       = model.AccessToken,
                    AccessTokenSecret = model.AccessTokenSecret
                }
            };
            var context = new TwitterContext(authorizer);

            var tweets = (from tweet in context.Status
                          where tweet.Type == StatusType.User &&
                          tweet.ScreenName == screenName
                          select tweet)
                         .ToList();

            return(tweets.Select(t => new SocialFeedItemModel
            {
                Id = t.ID.ToString(CultureInfo.InvariantCulture),
                Message = t.Text,
                Created = t.CreatedAt
            }).ToList());
        }
예제 #2
0
        /// <summary>
        /// Check if token is expired
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public static bool IsFacebookTokenExpired(SocialMediaAuthorizeModel model)
        {
            try
            {
                var     client = new FacebookClient(model.AccessToken);
                dynamic result = client.Get("me/friends");
            }
            catch (FacebookOAuthException)
            {
                return(true);
            }

            return(false);
        }
예제 #3
0
        /// <summary>
        /// Check if LinkedIn token is expired
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public static bool IsLinkedInTokenExpired(SocialMediaAuthorizeModel model)
        {
            try
            {
                var linkedInHelper = new LinkedInHelper(model.AccessToken);

                var userInfo = linkedInHelper.GetCurrentUser();
            }
            catch (Exception)
            {
                return(true);
            }

            return(false);
        }
예제 #4
0
        /// <summary>
        /// Check and update active token status
        /// </summary>
        public void CheckAndUpdateTokenStatus()
        {
            var tokens = GetAllActiveTokens().ToList();

            foreach (var socialMediaToken in tokens)
            {
                var authorizeModel = new SocialMediaAuthorizeModel
                {
                    AppId             = socialMediaToken.AppId,
                    AppSecret         = socialMediaToken.AppSecret,
                    AccessToken       = socialMediaToken.AccessToken,
                    AccessTokenSecret = socialMediaToken.AccessTokenSecret
                };

                var expired = false;
                switch (socialMediaToken.SocialMediaId.ToEnum <SocialMediaEnums.SocialNetwork>())
                {
                case SocialMediaEnums.SocialNetwork.Facebook:
                    expired = SocialUtilities.IsFacebookTokenExpired(authorizeModel);
                    break;

                case SocialMediaEnums.SocialNetwork.Twitter:
                    //Currently now the twitter token does not expired
                    break;

                case SocialMediaEnums.SocialNetwork.LinkedIn:
                    expired = SocialUtilities.IsLinkedInTokenExpired(authorizeModel);
                    break;
                }

                if (expired)
                {
                    socialMediaToken.Status      = SocialMediaEnums.TokenStatus.Expired;
                    socialMediaToken.ExpiredDate = null;
                    socialMediaToken.IsDefault   = false;
                    Update(socialMediaToken);
                }
            }
        }
예제 #5
0
        /// <summary>
        /// Post status to Twitter
        /// </summary>
        /// <param name="model"></param>
        /// <param name="message"></param>
        public static object PostTwitterStatus(SocialMediaAuthorizeModel model, SocialMessageModel message)
        {
            var authorizer = new MvcAuthorizer
            {
                CredentialStore = new SingleUserInMemoryCredentialStore
                {
                    ConsumerKey       = model.AppId,
                    ConsumerSecret    = model.AppSecret,
                    AccessToken       = model.AccessToken,
                    AccessTokenSecret = model.AccessTokenSecret
                }
            };
            var context = new TwitterContext(authorizer);

            if (string.IsNullOrEmpty(message.ImageUrl))
            {
                var tweet = Task.Run(() => context.TweetAsync(message.Message));
                return(tweet);
            }

            //Post with image
            try
            {
                var    webClient  = new WebClient();
                byte[] imageBytes = webClient.DownloadData(message.ImageUrl);
                var    media      = Task.Run(() => context.UploadMediaAsync(imageBytes, MimeMapping.GetMimeMapping(message.ImageUrl)));
                var    tweet      = Task.Run(() => context.TweetAsync(message.Message, new List <ulong> {
                    media.Result.MediaID
                }));
                return(tweet);
            }
            catch (Exception)
            {
                var tweet = Task.Run(() => context.TweetAsync(message.Message));
                return(tweet);
            }
        }
예제 #6
0
        /// <summary>
        /// Get social media feed by token id
        /// </summary>
        /// <param name="tokenId"></param>
        /// <param name="total"></param>
        /// <returns></returns>
        public SocialFeedWidget GetFeed(int tokenId, int total)
        {
            var token = GetById(tokenId);

            if (token != null && token.Status == SocialMediaEnums.TokenStatus.Active)
            {
                var posts = new List <SocialFeedItemModel>();
                switch (token.SocialMediaId.ToEnum <SocialMediaEnums.SocialNetwork>())
                {
                case SocialMediaEnums.SocialNetwork.Facebook:
                    posts = SocialUtilities.GetFacebookPosts(token.AccessToken);
                    break;

                case SocialMediaEnums.SocialNetwork.Twitter:
                    var authorize = new SocialMediaAuthorizeModel
                    {
                        AppId             = token.AppId,
                        AppSecret         = token.AppSecret,
                        AccessToken       = token.AccessToken,
                        AccessTokenSecret = token.AccessTokenSecret
                    };
                    posts = SocialUtilities.GetTwitterPosts(authorize, token.FullName);
                    break;

                case SocialMediaEnums.SocialNetwork.LinkedIn:
                    posts = SocialUtilities.GetLinkedInPosts(token.AccessToken);
                    break;
                }

                return(new SocialFeedWidget
                {
                    Feed = posts
                });
            }

            return(null);
        }
예제 #7
0
        /// <summary>
        /// Post status to Facebook
        /// </summary>
        /// <param name="model"></param>
        /// <param name="message"></param>
        public static object PostFacebookStatus(SocialMediaAuthorizeModel model, SocialMessageModel message)
        {
            var client = new FacebookClient(model.AccessToken);

            if (!string.IsNullOrEmpty(message.ImageUrl))
            {
                return(client.Post("/me/feed", new
                {
                    message = message.Message,
                    link = message.Url,
                    picture = message.ImageUrl,
                    name = message.Title,
                    description = message.Description
                }));
            }

            return(client.Post("/me/feed", new
            {
                message = message.Message,
                link = message.Url,
                name = message.Title,
                description = message.Description
            }));
        }
예제 #8
0
        /// <summary>
        /// Post status to Twitter
        /// </summary>
        /// <param name="model"></param>
        /// <param name="message"></param>
        public static object PostLinkedInStatus(SocialMediaAuthorizeModel model, SocialMessageModel message)
        {
            var linkedInHelper = new LinkedInHelper(model.AccessToken);

            return(linkedInHelper.PostStatus(message));
        }