public IList<FacebookPost> GetPostsInFeed(FacebookImportOptions opts)
        {
            Ensure.That(() => opts).IsNotNull();

            DateTime? since = opts.Since;
            string url = GRAPH_FEED_LIMITED.FormatWith(opts.Feed, PAGE_LIMIT);

            if (since.HasValue)
            {
                string date = since.Value.ToIso8601();
                url = GRAPH_FEED_SINCE.FormatWith(url, date);
            }

            IList<FacebookPost> result = FetchAll(url, since, opts.Log);
            return result;
        }
        /// <summary>
        /// Imports a list of posts from Facebook, filters them and inserts into the persistance storage.
        /// </summary>
        public void Import(FacebookImportOptions opts)
        {
            int insertCount = 0;
            const string LINK_EXISTS = "Link exists: {0}";
            const string LINK_INSERTION = "Inserted Link #{0}";
            const string POST_INSERTION = "Inserted Post #{0}";

            IEnumerable<FacebookPost> posts = fbRepository.GetPostsInFeed(opts);

            foreach (FacebookPost fbPost in posts)
            {
                if (fbPost.Link == null || fbPost.Type != FacebookPostType.Link) // only links.
                {
                    continue;
                }
                Link link = linkRepository.GetByReferenceUri(fbPost.Link);
                if (link != null)
                {
                    log.Debug(LINK_EXISTS.FormatWith(link.ReferenceUri));
                    if (link.PostId.HasValue) // if link exists and it has a related post, ignore it.
                    {
                        continue;
                    }
                }
                else
                {
                    link = mapper.Map<FacebookPost, Link>(fbPost);
                    linkRepository.Insert(link);
                    log.Debug(LINK_INSERTION.FormatWith(link.Id));
                }
                Post post = mapper.Map<FacebookPost, Post>(fbPost);
                User user = userRepository.GetByFacebookGraphId(post.FacebookUserId);

                post.LinkId = link.Id;
                post.UserId = user == null ? (long?)null : user.Id;
                postRepository.Insert(post);
                log.Debug(POST_INSERTION.FormatWith(post.Id));

                insertCount++;
            }

            opts.Log.InsertCount = insertCount;
        }
        public void Import(string feed)
        {
            Ensure.That(() => feed).IsNotNull();

            FacebookImportLog entry = new FacebookImportLog
            {
                FacebookFeedId = feed,
                StartDate = DateTime.UtcNow
            };
            DateTime? since = logRepository.GetFacebookImportDate(feed);

            FacebookImportOptions options = new FacebookImportOptions
            {
                Feed = feed,
                Log = entry,
                Since = since
            };
            importerService.Import(options);

            entry.Duration = DateTime.UtcNow - entry.StartDate;

            logRepository.UpdateFacebookImportLog(entry);
        }