public int UpdatePageFeedDetails(Facebookaccounts facebookAccount) { ApiHitsCount = 0; var databaseRepository = new DatabaseRepository(); if (facebookAccount.LastUpdate.AddHours(1) <= DateTime.UtcNow) { if (!facebookAccount.IsAccessTokenActive) { return(0); } ApiHitsCount++; UpdatePageDetails(facebookAccount, databaseRepository); UpdateFeeds(facebookAccount); UpdatePosts(facebookAccount); UpdatePageNotifications(facebookAccount); UpdatePageConversations(facebookAccount); UpdatePageTaggedDetails(facebookAccount); UpdatePagePromotionPostDetails(facebookAccount); } else { ApiHitsCount = 0; } return(0); }
public void UpdatePageConversations(Facebookaccounts facebookAccount) { try { var conversations = FacebookApiHelper.GetConversations(facebookAccount.AccessToken); var conversationCollections = JObject.Parse(conversations); var conversationCollection = conversationCollections.SelectTokens("data").SelectMany(x => x) .Select(item => new MongoDirectMessages { messageId = item.SelectToken("id")?.ToString(), createdDate = Convert.ToDateTime(item.SelectToken("updated_time")?.ToString() ?? DateTime.Now.ToString(CultureInfo.InvariantCulture)).ToString("yyyy/MM/dd HH:mm:ss"), ConversationLink = item.SelectToken("link")?.ToString(), type = MessageType.FacebookPagDirectMessageReceived }).ToList(); AddConversationDetailsToDb(conversationCollection); } catch (Exception ex) { Console.WriteLine(ex.Message); } }
public void UpdatePagePromotionPostDetails(Facebookaccounts facebookAccount) { try { var promotablePosts = FacebookApiHelper.GetPromotablePostsDetails(facebookAccount.AccessToken); var taggedDetailCollections = ParseTagAndPromoteDetails(facebookAccount, promotablePosts, FacebookPagePromotion.PromotablePosts).ToList(); AddedPromotionDetailsToDb(taggedDetailCollections); } catch (Exception ex) { Console.WriteLine(ex.Message); } }
public void ParseAndUpdateAccountDetails(Facebookaccounts facebookAccount, DatabaseRepository databaseRepository) { try { var profileDetails = FacebookApiHelper.GetUserDetails(facebookAccount.AccessToken).ToString(); var profile = JObject.Parse(profileDetails); if (Convert.ToString(profile) == "Invalid Access Token") { return; } facebookAccount.Friends = FacebookApiHelper.GetFriendCounts(facebookAccount.AccessToken); ApiHitsCount++; facebookAccount.EmailId = profile.SelectToken("email")?.ToString(); facebookAccount.ProfileUrl = profile.SelectToken("link")?.ToString(); if (string.IsNullOrEmpty(facebookAccount.ProfileUrl)) { facebookAccount.ProfileUrl = profile.SelectToken("picture.data.url")?.ToString(); } facebookAccount.Gender = profile.SelectToken("gender")?.ToString(); facebookAccount.Bio = profile.SelectToken("bio")?.ToString(); facebookAccount.About = profile.SelectToken("about")?.ToString(); facebookAccount.CoverPic = profile.SelectToken("cover.source")?.ToString(); facebookAccount.Birthday = profile.SelectToken("birthday")?.ToString(); var profileEducationDetails = JArray.Parse(profile.SelectToken("education")?.ToString() ?? "[]"); facebookAccount.College = profileEducationDetails?.LastOrDefault()?.SelectToken("school.name")?.ToString(); facebookAccount.Education = profileEducationDetails?.LastOrDefault()?.SelectToken("concentration.name")?.ToString(); var profileWorkingDetails = JArray.Parse(profile["work"]?.ToString() ?? "[]"); facebookAccount.WorkPosition = profileWorkingDetails?.FirstOrDefault()?.SelectToken("position.name")?.ToString(); facebookAccount.WorkCompany = profileWorkingDetails?.FirstOrDefault()?.SelectToken("employer.name")?.ToString(); facebookAccount.LastUpdate = DateTime.UtcNow; databaseRepository.Update(facebookAccount); } catch (Exception ex) { Console.WriteLine(ex.Message); } }
public IEnumerable <MongoMessageModel> UpdatePageNotifications(Facebookaccounts facebookAccount) { var notificationDetails = new List <MongoMessageModel>(); try { var notificationsDetails = FacebookApiHelper.GetPageNotifications(facebookAccount.AccessToken); var notifications = JObject.Parse(notificationsDetails); foreach (var item in notifications["data"]) { var inboxMessages = new MongoMessageModel { profileId = facebookAccount.FbUserId, type = MessageType.FacebookPageNotification, messageTimeStamp = SBHelper.ConvertToUnixTimestamp(DateTime.UtcNow) }; try { inboxMessages.Message = item.SelectToken("title")?.ToString(); inboxMessages.messageId = item.SelectToken("id").ToString(); inboxMessages.fromId = item.SelectToken("from.id").ToString(); inboxMessages.fromName = item.SelectToken("from.name").ToString(); inboxMessages.fromScreenName = item.SelectToken("from.name").ToString(); inboxMessages.fromProfileUrl = "http://graph.facebook.com/" + inboxMessages.fromId + "/picture?type=small"; inboxMessages.RecipientId = item.SelectToken("to.id").ToString(); inboxMessages.RecipientName = item.SelectToken("to.name").ToString(); inboxMessages.messageDate = Convert.ToDateTime(item["created_time"].ToString()).ToString(CultureInfo.InvariantCulture); notificationDetails.Add(inboxMessages); } catch (Exception ex) { Console.WriteLine(ex.Message); } } AddNotificationsToDb(notificationDetails); } catch (Exception ex) { Console.WriteLine(ex.Message); } return(notificationDetails); }
public IActionResult GetPrimaryFacebookAcc(long userId, long groupId) { DatabaseRepository dbr = new DatabaseRepository(_logger, _env); List <Domain.Socioboard.Models.Groupprofiles> lstGrpProfiles = Repositories.GroupProfilesRepository.GetAllGroupProfiles(groupId, _redisCache, dbr); //List<Domain.Socioboard.Models.Facebookaccounts> lstFbAcc = new List<Facebookaccounts>(); Domain.Socioboard.Models.Facebookaccounts UserFbAccDetail = new Facebookaccounts(); foreach (var item in lstGrpProfiles.Where(t => t.profileType == Domain.Socioboard.Enum.SocialProfileType.Facebook)) { Domain.Socioboard.Models.Facebookaccounts fbAcc = Repositories.FacebookRepository.getFacebookAccount(item.profileId, _redisCache, dbr); Domain.Socioboard.Models.User userdata = dbr.Single <Domain.Socioboard.Models.User>(t => t.Id == fbAcc.UserId); if (fbAcc != null && userdata.EmailId == fbAcc.EmailId) { UserFbAccDetail = fbAcc; } } return(Ok(UserFbAccDetail)); }
public IEnumerable <FacebookPagePromotionDetails> UpdatePageTaggedDetails(Facebookaccounts facebookAccount) { var taggedDetailCollections = new List <FacebookPagePromotionDetails>(); try { var taggedDetails = FacebookApiHelper.GetPageTaggedDetails(facebookAccount.AccessToken); taggedDetailCollections = ParseTagAndPromoteDetails(facebookAccount, taggedDetails).ToList(); AddedPromotionDetailsToDb(taggedDetailCollections); } catch (Exception ex) { Console.WriteLine(ex.Message); } return(taggedDetailCollections); }
public void UpdatePageDetails(Facebookaccounts facebookAccount, DatabaseRepository databaseRepository) { try { if (facebookAccount.FbPageSubscription == FbPageSubscription.NotSubscribed && FacebookApiHelper.MakeSubscribedWithApp(facebookAccount.AccessToken)) { facebookAccount.FbPageSubscription = FbPageSubscription.Subscribed; } var pageDetails = JObject.Parse(FacebookApiHelper.GetPageDetails(facebookAccount.AccessToken)); facebookAccount.Friends = long.Parse(pageDetails.SelectToken("fan_count")?.ToString() ?? "0"); databaseRepository.Update(facebookAccount); } catch (Exception ex) { Console.WriteLine(ex.Message); } }
public void UpdateFeeds(Facebookaccounts facebookAccount) { const int maximumPaginationCount = 25; var currentPage = 0; if (currentPage >= maximumPaginationCount) { return; } string feeds = FacebookApiHelper.GetOwnFeedDetails(facebookAccount.AccessToken).ToString(); var feedDetails = JObject.Parse(feeds); string nextPaginationUrl; do { nextPaginationUrl = feedDetails.SelectToken("paging.next")?.ToString(); var postDetails = FetchAccountsFeedDetails(facebookAccount, feedDetails).ToList(); if (postDetails.Count > 0) { UpdatePostsToDb(postDetails); if (!string.IsNullOrEmpty(nextPaginationUrl)) { feedDetails = JObject.Parse(FacebookApiHelper .GetResponse(nextPaginationUrl, facebookAccount.AccessToken).ToString()); } } else { nextPaginationUrl = string.Empty; } currentPage++; if (currentPage > maximumPaginationCount) { nextPaginationUrl = string.Empty; } } while (!string.IsNullOrEmpty(nextPaginationUrl)); }
public IEnumerable <MongoFacebookFeed> FetchAccountsFeedDetails(Facebookaccounts facebookAccount, JObject feedDetails) { return((from feed in feedDetails.SelectTokens("data")?.SelectMany(feed => feed) select JObject.Parse(feed.ToString()) into feedDetail let fromName = feedDetail.SelectToken("from.name")?.ToString() let fromId = feedDetail.SelectToken("from.id")?.ToString() let feedId = feedDetail.SelectToken("id")?.ToString() let createdDateTime = DateTime.Parse(feedDetail.SelectToken("created_time")?.ToString() ?? DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")) .ToString("yyyy/MM/dd HH:mm:ss") let likeCount = feedDetail.SelectToken("likes.summary.total_count")?.ToString() let commentCount = feedDetail.SelectToken("comments.summary.total_count")?.ToString() let postType = feedDetail.SelectToken("type")?.ToString() ?? "status" let postingFrom = feedDetail.SelectToken("application.name")?.ToString() ?? "Facebook" let picture = feedDetail.SelectToken("picture")?.ToString() let message = feedDetail.SelectToken("message")?.ToString() ?? feedDetail.SelectToken("description")?.ToString() ?? feedDetail.SelectToken("story")?.ToString() ?? string.Empty let postDate = SBHelper.ConvertToUnixTimestamp(Convert.ToDateTime(createdDateTime)) select new MongoFacebookFeed { Type = "fb_feed", ProfileId = facebookAccount.FbUserId, Id = ObjectId.GenerateNewId(), FromProfileUrl = $"http://graph.facebook.com/{facebookAccount.FbUserId}/picture?type=small", FromName = fromName, FromId = fromId, FeedId = feedId, FeedDate = postDate.ToString(CultureInfo.InvariantCulture), FeedDateToshow = SBHelper.ConvertFromUnixTimestamp(Convert.ToDouble(postDate)).ToString("yyyy/MM/dd HH:mm:ss"), FbComment = $"http://graph.facebook.com/{feedId}/comments", FbLike = $"http://graph.facebook.com/{feedId}/likes", Likecount = likeCount, Commentcount = commentCount, postType = postType, postingFrom = postingFrom, Picture = picture, FeedDescription = message, EntryDate = DateTime.UtcNow.ToString("yyyy/MM/dd HH:mm:ss") }).ToList()); }
public int UpdateFbFeedDetails(Facebookaccounts facebookAccount) { ApiHitsCount = 0; var databaseRepository = new DatabaseRepository(); if (facebookAccount.LastUpdate.AddHours(1) <= DateTime.UtcNow) { if (!facebookAccount.IsAccessTokenActive) { return(0); } ApiHitsCount++; ParseAndUpdateAccountDetails(facebookAccount, databaseRepository); UpdateFeeds(facebookAccount); } else { ApiHitsCount = 0; } return(0); }
public IActionResult AddFacebookPages(long userId, long groupId) { try { string data = Request.Form["profileaccesstoken"]; var pages = JArray.Parse($"[{data}]"); var pageDetails = new List <Facebookaccounts>(); foreach (var page in pages) { try { var facebookAccount = new Facebookaccounts { AccessToken = page.SelectToken("AccessToken").ToString(), FbUserId = page.SelectToken("ProfilePageId").ToString(), Friends = long.Parse(page.SelectToken("LikeCount").ToString()), FbUserName = page.SelectToken("Name").ToString(), EmailId = page.SelectToken("Email").ToString(), }; facebookAccount.CoverPic = $"https://graph.facebook.com/{facebookAccount.FbUserId}/picture?type=small"; facebookAccount.ProfileUrl = $"https://graph.facebook.com/{facebookAccount.FbUserId}/picture?type=small"; pageDetails.Add(facebookAccount); } catch (Exception e) { Console.WriteLine(e); } } var pageIds = pageDetails.Select(x => x.FbUserId).ToList(); var dbr = new DatabaseRepository(_logger, _env); var availableAccounts = Repositories.FacebookRepository.GetFacebookAccounts(pageIds, _redisCache, dbr).Select(x => x.FbUserId).ToList(); pageDetails.RemoveAll(x => availableAccounts.Contains(x.FbUserId)); CustomTaskFactory.Instance.Start(() => { var groupDetails = dbr.FindFirstMatch <Groups>(t => t.adminId == userId && t.id == groupId); if (groupDetails == null) { return; } foreach (var page in pageDetails) { Repositories.FacebookRepository.AddFacebookPage(page, dbr, userId, groupDetails.id, Domain.Socioboard.Enum.FbProfileType.FacebookPage, page.AccessToken, _redisCache, _appSettings, _logger); } }); if (availableAccounts.Count == 0) { return(Ok("All Pages added successfully!")); } if (availableAccounts.Count == pageDetails.Count) { return(Ok("All Pages already added!")); } if (availableAccounts.Count < pageDetails.Count) { var remainding = pageDetails.Count - availableAccounts.Count; return(Ok($"Totally {remainding} Pages added, Rest already added either by you or others!")); } return(Ok("Pages added!")); } catch (Exception) { return(Ok("Error while adding pages")); } }
public IActionResult SchedulePagePost(string profileId, int TimeInterVal, long UserId) { int addedPageCount = 0; int invalidaccessToken = 0; profileId = profileId.TrimEnd(','); try { try { foreach (var items in profileId.Split(',')) { string pageUrls = Request.Form["pageUrls"]; Domain.Socioboard.Models.Facebookaccounts _Facebookaccounts = new Facebookaccounts(); DatabaseRepository dbr = new DatabaseRepository(_logger, _appEnv); _Facebookaccounts = FacebookRepository.getFacebookAccount(items, _redisCache, dbr); List <Domain.Socioboard.Models.Mongo.PageDetails> pageid = Helper.FacebookHelper.GetFbPagePostDetails(pageUrls, _Facebookaccounts.AccessToken); if (pageid.Count == 0) { invalidaccessToken++; } foreach (Domain.Socioboard.Models.Mongo.PageDetails item in pageid) { addedPageCount++; if (_Facebookaccounts != null) { LinkShareathon _LinkShareathon = new LinkShareathon(); _LinkShareathon.Id = ObjectId.GenerateNewId(); _LinkShareathon.strId = ObjectId.GenerateNewId().ToString(); _LinkShareathon.Userid = UserId; _LinkShareathon.Facebookusername = _Facebookaccounts.FbUserName; _LinkShareathon.FacebookPageUrl = item.PageUrl; _LinkShareathon.TimeInterVal = TimeInterVal; _LinkShareathon.Facebookpageid = item.PageId; _LinkShareathon.IsActive = true; MongoRepository _ShareathonRepository = new MongoRepository("LinkShareathon", _appSettings); _ShareathonRepository.Add(_LinkShareathon); new Thread(delegate() { Helper.FacebookHelper.schedulePage_Post(_Facebookaccounts.AccessToken, item.PageId, TimeInterVal); }).Start(); } } } } catch (Exception ex) { } } catch (System.Exception ex) { } if (addedPageCount == profileId.Length) { return(Ok("successfully added")); } else if (invalidaccessToken > 0) { return(Ok(invalidaccessToken + "pages access token expired")); } return(Ok("successfully added")); }
public void PageShreathon(object o) { try { var arr = o as object[]; var shareathon = (PageShareathon)arr[0]; var dbr = (DatabaseRepository)arr[1]; var shareathonRepository = (MongoRepository)arr[2]; var ids = shareathon.Facebookpageid.Split(','); GlobalVariable.pageShareathonIdsRunning.Add(shareathon.strId); foreach (var id in ids) { try { PageapiHitsCount = 0; var fbAcc = dbr.Single <Facebookaccounts>(t => t.FbUserId == shareathon.Facebookaccountid); Facebookaccounts facebookPage = null; var lstFbAcc = dbr.Single <Facebookaccounts>(t => t.FbUserId == id); if (lstFbAcc != null) { facebookPage = lstFbAcc; } if (facebookPage != null) { if (PageapiHitsCount < PageMaxapiHitsCount) { var feeds = string.Empty; if (facebookPage.PageShareathonUpdate.AddHours(1) <= DateTime.UtcNow) { feeds = Fbpages.getFacebookRecentPost(fbAcc.AccessToken, facebookPage.FbUserId); var feedId = string.Empty; if (!string.IsNullOrEmpty(feeds) && !feeds.Equals("[]")) { PageapiHitsCount++; var fbpageNotes = JObject.Parse(feeds); foreach (var obj in JArray.Parse(fbpageNotes["data"].ToString())) { try { feedId = obj["id"].ToString(); feedId = feedId.Split('_')[1]; var dt = SBHelper.ConvertFromUnixTimestamp( shareathon.Lastsharetimestamp); dt = dt.AddMinutes(shareathon.Timeintervalminutes); if (!shareathon.Lastpostid.Equals(feedId) && SBHelper.ConvertToUnixTimestamp(dt) <= SBHelper.ConvertToUnixTimestamp(DateTime.UtcNow)) { var ret = ShareFeed(fbAcc.AccessToken, feedId, facebookPage.FbUserId, "", fbAcc.FbUserId, facebookPage.FbUserName); if (!string.IsNullOrEmpty(ret)) { Thread.Sleep(1000 * 60 * shareathon.Timeintervalminutes); } } } catch { PageapiHitsCount = PageMaxapiHitsCount; } } fbAcc.PageShareathonUpdate = DateTime.UtcNow; facebookPage.PageShareathonUpdate = DateTime.UtcNow; dbr.Update(fbAcc); dbr.Update(facebookPage); } else { FilterDefinition <BsonDocument> filter = new BsonDocument("strId", shareathon.strId); var update = Builders <BsonDocument> .Update.Set("FacebookStatus", 0); shareathonRepository.Update <PageShareathon>(update, filter); } } else { PageapiHitsCount = 0; } } } } catch { PageapiHitsCount = PageMaxapiHitsCount; } } try { if (!string.IsNullOrEmpty(shareathon.FacebookPageUrlId)) { var urlsIds = shareathon.FacebookPageUrlId.Split(','); foreach (var idUrl in urlsIds) { try { PageapiHitsCount = 0; var fbAcc = dbr.Single <Facebookaccounts>( t => t.FbUserId == shareathon.Facebookaccountid); var pagename = Fbpages.GetFbPageName(fbAcc.AccessToken, idUrl); if (PageapiHitsCount < PageMaxapiHitsCount) { var feeds = string.Empty; feeds = Fbpages.getFacebookRecentPost(fbAcc.AccessToken, idUrl); var feedId = string.Empty; if (!string.IsNullOrEmpty(feeds) && !feeds.Equals("[]")) { PageapiHitsCount++; var fbpageNotes = JObject.Parse(feeds); foreach (var obj in JArray.Parse(fbpageNotes["data"].ToString())) { try { feedId = obj["id"].ToString(); feedId = feedId.Split('_')[1]; var dt = SBHelper.ConvertFromUnixTimestamp( shareathon.Lastsharetimestamp); dt = dt.AddMinutes(shareathon.Timeintervalminutes); if (!shareathon.Lastpostid.Equals(feedId) && SBHelper.ConvertToUnixTimestamp(dt) <= SBHelper.ConvertToUnixTimestamp(DateTime.UtcNow)) { var ret = ShareFeed(fbAcc.AccessToken, feedId, idUrl, "", fbAcc.FbUserId, pagename); if (!string.IsNullOrEmpty(ret)) { Thread.Sleep(1000 * 60 * shareathon.Timeintervalminutes); } } } catch { PageapiHitsCount = PageMaxapiHitsCount; } } fbAcc.PageShareathonUpdate = DateTime.UtcNow; dbr.Update(fbAcc); } else { FilterDefinition <BsonDocument> filter = new BsonDocument("strId", shareathon.strId); var update = Builders <BsonDocument> .Update.Set("FacebookStatus", 1); shareathonRepository.Update <PageShareathon>(update, filter); } } } catch { PageapiHitsCount = PageMaxapiHitsCount; } } } } catch (Exception) { } GlobalVariable.pageShareathonIdsRunning.Remove(shareathon.strId); } catch (Exception e) { PageapiHitsCount = PageMaxapiHitsCount; Console.WriteLine(e.Message); } finally { NoOfthreadPageshreathonRunning--; } }
private static IEnumerable <FacebookPagePromotionDetails> ParseTagAndPromoteDetails(Facebookaccounts facebookAccount, string taggedDetails, FacebookPagePromotion facebookPagePromotion = FacebookPagePromotion.Tagged) { var data = JObject.Parse(taggedDetails); var taggedDetailCollections = new List <FacebookPagePromotionDetails>(); foreach (var item in data["data"]) { var inboxMessages = new FacebookPagePromotionDetails { ProfileId = facebookAccount.FbUserId, type = facebookPagePromotion, EntryDate = SBHelper.ConvertToUnixTimestamp(DateTime.UtcNow) }; try { inboxMessages.message = item.SelectToken("message")?.ToString(); inboxMessages.FeedId = item.SelectToken("id")?.ToString(); inboxMessages.FromId = item.SelectToken("from.id")?.ToString(); inboxMessages.FromName = item.SelectToken("from.name")?.ToString(); inboxMessages.FromProfileUrl = "http://graph.facebook.com/" + inboxMessages.FromId + "/picture?type=small"; inboxMessages.FeedDate = SBHelper.ConvertToUnixTimestamp(Convert.ToDateTime(item.SelectToken("created_time")?.ToString())); inboxMessages.Picture = item.SelectToken("picture")?.ToString(); inboxMessages.FeedDescription = item.SelectToken("description")?.ToString(); taggedDetailCollections.Add(inboxMessages); } catch (Exception ex) { Console.WriteLine(ex.Message); } } return(taggedDetailCollections); }