Пример #1
0
        public static async Task <bool> PopulateAll(string sqlConn, string schema, string cognitiveKey, string client, string secret, string date)
        {
            string token = await FacebookUtility.GetAccessTokenAsync(client, secret);

            string[] pages = SqlUtility.GetPages(sqlConn, schema);

            List <JObject> posts = new List <JObject>();

            foreach (var pageToSearch in pages)
            {
                string page = pageToSearch.Replace(" ", "");
                try
                {
                    var pageObj = await FacebookUtility.GetPage(page, token);

                    // Get Facebook Posts
                    posts = await FacebookUtility.GetPostsAsync(page, date, token);

                    // Get All Data Tables
                    var commentsDataTable  = DataTableUtility.GetCommentsDataTable();
                    var hashTagDataTable   = DataTableUtility.GetHashTagDataTable();
                    var keyPhraseDataTable = DataTableUtility.GetKeyPhraseDataTable();
                    var postDataTable      = DataTableUtility.GetPostsDataTable();
                    var reactionsDataTable = DataTableUtility.GetReactionsDataTable();
                    var sentimentDataTable = DataTableUtility.GetSentimentDataTable();

                    PopulatePostCommentsAndReactions(postDataTable, commentsDataTable, reactionsDataTable, posts, page, pageObj);

                    // Populate Sentiment
                    Dictionary <string, string> items = new Dictionary <string, string>();
                    CognitiveUtility.PopulateDictionary(items, postDataTable);
                    CognitiveUtility.PopulateDictionary(items, commentsDataTable);
                    var payloads = CognitiveUtility.GetPayloads(items);

                    await CognitiveUtility.GetSentimentAsync(payloads, sentimentDataTable, cognitiveKey);

                    await CognitiveUtility.GetKeyPhraseAsync(payloads, keyPhraseDataTable, cognitiveKey);

                    CognitiveUtility.GetHashTags(postDataTable, hashTagDataTable);
                    CognitiveUtility.GetHashTags(commentsDataTable, hashTagDataTable);

                    // Bulk Insert
                    SqlUtility.BulkInsert(sqlConn, postDataTable, schema + "." + "StagingPosts");
                    SqlUtility.BulkInsert(sqlConn, sentimentDataTable, schema + "." + "StagingSentiment");
                    SqlUtility.BulkInsert(sqlConn, commentsDataTable, schema + "." + "StagingComments");
                    SqlUtility.BulkInsert(sqlConn, keyPhraseDataTable, schema + "." + "StagingKeyPhrase");
                    SqlUtility.BulkInsert(sqlConn, reactionsDataTable, schema + "." + "StagingReactions");
                    SqlUtility.BulkInsert(sqlConn, hashTagDataTable, schema + "." + "StagingHashTags");

                    // Debugging
                    var     errorDataTable = DataTableUtility.GetErrorDataTable();
                    DataRow errorRow       = errorDataTable.NewRow();
                    errorRow["Date"]  = date;
                    errorRow["Error"] = "";
                    errorRow["Posts"] = page + ":" + JToken.FromObject(posts).ToString();
                    errorDataTable.Rows.Add(errorRow);
                    SqlUtility.BulkInsert(sqlConn, errorDataTable, schema + "." + "StagingError");
                }
                catch (Exception e)
                {
                    var     errorDataTable = DataTableUtility.GetErrorDataTable();
                    DataRow errorRow       = errorDataTable.NewRow();
                    errorRow["Date"]  = date;
                    errorRow["Error"] = e.ToString();
                    errorRow["Posts"] = page + ":" + JToken.FromObject(posts).ToString();
                    errorDataTable.Rows.Add(errorRow);
                    SqlUtility.BulkInsert(sqlConn, errorDataTable, schema + "." + "StagingError");
                    throw;
                }
            }
            return(true);
        }