コード例 #1
0
        public async Task <TweetResult> GetRecentTweetsAsync(string query, int maxResults)
        {
            var url = string.Format("https://api.twitter.com/2/tweets/search/recent?query={0}&max_results={1}&{2}", HttpUtility.UrlPathEncode(query), maxResults, EXPANSIONS_AND_FIELD_QUERY);

            var parameters = new Dictionary <string, object>();

            parameters.Add("Method", "GetRecentTweetsAsync");
            parameters.Add("Uri", url);
            parameters.Add("MaxRules", maxResults);

            try
            {
                TweetResult tweetResult = null;

                using (var httpClient = new HttpClient())
                {
                    // Calls a GET request.

                    using (var request = new HttpRequestMessage(HttpMethod.Get, url))
                    {
                        request.Headers.Add("Authorization", string.Format("Bearer {0}", await _twitterApiAuthenticateService.GetOAuth2TokenAsync()));  // Uses oauth authorisation, with the bearer token from the Twitter API.

                        using (var response = await TwitterApiServiceExtensions.GetTwitterApiResponseAsync(httpClient, request))
                        {
                            // Reads the response from the HTTP request and gets the content.
                            var content = await response.Content.ReadAsStringAsync();

                            try
                            {
                                // Converts the response to a TweetResult instance.
                                tweetResult = JsonConvert.DeserializeObject <TweetResult>(content);
                            }
                            catch (Exception exception)
                            {
                                // Throw an error if unable to convert to a TweetResult.
                                throw new TwitterApiException("Unable to convert the JSON response to a RuleResult type.", exception);
                            }
                        }
                    }
                }

                return(tweetResult);
            }
            catch (TwitterApiException exception)
            {
                // Exception thrown from the Twitter API. Log the error.
                _logger.LogWithParameters(LogLevel.Error, exception, exception.Message, parameters);
                throw;
            }
            catch (Exception exception)
            {
                // General exception thrown. Log the error.
                _logger.LogWithParameters(LogLevel.Error, exception, exception.Message, parameters);
                throw;
            }
        }
コード例 #2
0
        private void ParseTag(Tags tag, TweetResult Tweetx)
        {
            ITweet[] Tweet = new ITweet[100];

            int[]  DKes            = new int[100];
            int    idx             = 0;
            string customer_key    = "L3R0OPKskWOP1uwtH1H8Y0nkL";
            string customer_secret = "TmiWOCpdAcxA1xGlbipv1JpbhJXFJV2yUUJGmuyeBVlluaa0EU";
            string token           = "725699442058268672-62KvavLauLbaMsmc9HIAftd4rqDkmCU";
            string token_secret    = "5ZtCFCryRHWmlGQ2VxWxlMWI6UbonYYang5BC3CIw7R8M";

            // When a new thread is created, the default credentials will be the Application Credentials
            Auth.ApplicationCredentials = new TwitterCredentials(customer_key, customer_secret, token, token_secret);
            var searchParameter = Search.CreateTweetSearchParameter(tag.Name);

            searchParameter.MaximumNumberOfResults = 100;
            jumlahtweetygdidapat = 0;

            try
            {
                QueryCategory NoCategory = new QueryCategory();
                NoCategory.name = "No Category";
                var tweets = Search.SearchTweets(searchParameter);
                if (tweets != null)
                {
                    jumlahtweetygdidapat = tweets.Count();
                    tweets.ForEach(t => InsertT(t, Tweet, ref idx));
                    bool[] NoCate = new bool[jumlahtweetygdidapat];
                    for (int g = 0; g < jumlahtweetygdidapat; g++)
                    {
                        NoCate[g] = false;
                    }
                    foreach (QueryCategory value in Tweetx.Query)
                    {
                        GetQuery(value.id, Tweet, value, ref NoCate, tag);
                    }
                    for (int g = 0; g < jumlahtweetygdidapat; g++)
                    {
                        if (!NoCate[g])
                        {
                            HasilTweet HasilTemp = new HasilTweet();
                            HasilTemp.TweetContent = Tweet[g];
                            HasilTemp.result       = Tweet[g].Text;
                            NoCategory.Tweet.Add(HasilTemp);
                        }
                    }
                }
                Tweetx.Query.Add(NoCategory);
            }

            catch (FileNotFoundException ex)
            {
                Console.WriteLine("File Not Found.");
            }
        }
コード例 #3
0
 public ActionResult SearchForm(Tags tag)
 {
     if (ModelState.IsValid)
     {
         TweetResult Ax = new TweetResult();
         Ax.Query = new List <QueryCategory>();
         QueryCategory Ay = new QueryCategory();
         Ay.id    = tag.DinasKesehatan;
         Ay.name  = "Dinas Kesehatan";
         Ay.num   = 0;
         Ay.Tweet = new List <HasilTweet>();
         Ax.Query.Add(Ay);
         Ay       = new QueryCategory();
         Ay.id    = tag.DinasBinamarga;
         Ay.name  = "Dinas Binamarga";
         Ay.num   = 0;
         Ay.Tweet = new List <HasilTweet>();
         Ax.Query.Add(Ay);
         Ay       = new QueryCategory();
         Ay.id    = tag.DinasPemuda;
         Ay.name  = "Dinas Pemuda";
         Ay.num   = 0;
         Ay.Tweet = new List <HasilTweet>();
         Ax.Query.Add(Ay);
         Ay       = new QueryCategory();
         Ay.id    = tag.DinasPendidikan;
         Ay.name  = "Dinas Pendidikan";
         Ay.num   = 0;
         Ay.Tweet = new List <HasilTweet>();
         Ax.Query.Add(Ay);
         Ay       = new QueryCategory();
         Ay.id    = tag.DinasSosial;
         Ay.name  = "Dinas Sosial";
         Ay.num   = 0;
         Ay.Tweet = new List <HasilTweet>();
         Ax.Query.Add(Ay);
         ParseTag(tag, Ax);
         if (jumlahtweetygdidapat > 0)
         {
             TempData["TweetAct"] = Ax;
             return(RedirectToAction("ShowResult", "Result"));
         }
         else
         {
             return(RedirectToAction("NoResult", "Result"));
         }
     }
     return(View());
 }
コード例 #4
0
ファイル: TaskController.cs プロジェクト: Lycheejam/TweetTest
        public async Task <ActionResult> Regist(TweetResult tt)
        {
            //nullのタスクを削除
            tt.tasks.RemoveAll(x => x.task == null);
            //Tweet用文字列生成
            var tweet = CreateTask(tt);

            var tm  = new TweetManager();
            var res = await tm.PostTweet(tweet);

            tt.tweetId = res.Id;
            tt.userId  = User.Identity.GetUserId();

            if (tsm.CreateTask(tt))
            {
                return(View("Index", await tm.EmbedTweetGet(tt.tweetId)));    //DBへの登録が正常終了
            }
            //失敗の時
            return(View("Index"));
        }
コード例 #5
0
ファイル: TaskController.cs プロジェクト: Lycheejam/TweetTest
        public async Task <ActionResult> Update(TweetResult tt)
        {
            //Tweet用文字列生成
            var tweet = UpdateTask(tt);

            var id = User.Identity.GetUserId();
            var tr = tsm.ReadTask(id);

            var tm  = new TweetManager();
            var res = await tm.ReplyTweet(tweet, tr.tweetId);

            tt.userId  = tr.userId;
            tt.id      = tr.id;
            tt.tweetId = res.Id;

            if (tsm.UpdateTask(tt))
            {
                return(View("Index", await tm.EmbedTweetGet(tt.tweetId)));    //DBへの登録が正常終了
            }
            //失敗の時
            return(View("Index"));
        }
コード例 #6
0
        public ActionResult ShowResult()
        {
            TweetResult rslt = (TweetResult)TempData["TweetAct"];

            return(View(rslt));
        }
コード例 #7
0
        public TweetResult ExecTweet(string oauth_token, string denied)
        {
            var successTweet = false;
            var result       = new TweetResult();

            // ユーザーアクセストークンが保存されている場合はそのまま使う
            // 認証切れ等でトークンが無効な場合、Tweet実行結果が NULL となる。
            var userAccessToken       = HttpContext.Session.GetString(SESSION_USER_ACCESS_TOKEN);
            var userAccessTokenSecret = HttpContext.Session.GetString(SESSION_USER_ACCESS_TOKEN_SECRET);

            if (!string.IsNullOrEmpty(userAccessToken) && !string.IsNullOrEmpty(userAccessTokenSecret))
            {
                var userCreds = Auth.SetUserCredentials(_twitterApiToken.ConsumerApiKey,
                                                        _twitterApiToken.ConsumerApiSecretKey, userAccessToken, userAccessTokenSecret);
                successTweet = TweetCore(userCreds);
            }

            // Tweet成功
            if (successTweet)
            {
                result.Result = true;
                return(result);
            }

            // ユーザーが認証をキャンセルした場合
            if (denied != null)
            {
                this.HttpContext.Response.Redirect("https://google.com");
                result.Result = true;
                return(null);
            }

            var appCredentials = new TwitterCredentials(_twitterApiToken.ConsumerApiKey, _twitterApiToken.ConsumerApiSecretKey);

            Auth.SetCredentials(appCredentials);

            if (Request.Query.ContainsKey(QUERY_PARAM_OAUTH_TOKEN) && Request.Query.ContainsKey(QUERY_PARAM_OAUTH_VERIFIER) && Request.Query.ContainsKey(QUERY_PARAM_AUTHORIZATION_ID))
            {
                // Twitter連携の結果で実行された場合
                var requestToken         = Request.Query[QUERY_PARAM_OAUTH_TOKEN];
                var requestTokenVerifier = Request.Query[QUERY_PARAM_OAUTH_VERIFIER];
                var authorizationId      = Request.Query[QUERY_PARAM_AUTHORIZATION_ID];

                // ユーザーのアクセストークンとシークレットを保存してTweet実行
                var userCreds = AuthFlow.CreateCredentialsFromVerifierCode(requestTokenVerifier, authorizationId);
                HttpContext.Session.SetString(SESSION_USER_ACCESS_TOKEN, userCreds.AccessToken);
                HttpContext.Session.SetString(SESSION_USER_ACCESS_TOKEN_SECRET, userCreds.AccessTokenSecret);
                successTweet = TweetCore(userCreds);

                // 結果ページにリダイレクト
                if (successTweet)
                {
                    this.HttpContext.Response.Redirect("https://twitter.com/");
                    result.Result = true;
                    return(null);
                }
            }

            var authenticationContext = AuthFlow.InitAuthentication(appCredentials, CALLBACK_URL);

            result.Result           = false;
            result.AuthorizationUri = authenticationContext.AuthorizationURL;
            return(result);
        }
コード例 #8
0
        /// <summary>
        /// Performs the recent tweets from the Twitter API for each dashboard.
        /// </summary>
        /// <param name="id">The job identifier.</param>
        /// <returns>An instance of <see cref="Task"/>.</returns>
        protected override async Task TaskActionAsync(Guid?id)
        {
            var parameters = new Dictionary <string, object>();

            parameters.Add("Method", "TaskActionAsync");
            if (id.HasValue)
            {
                parameters.Add("Job ID", id);
            }

            _logger.LogWithParameters(LogLevel.Information, "Start importing recent tweets from Twitter API", parameters);

            using (var scope = _serviceProvider.CreateScope())
            {
                // Gets the services freom the scope.
                var dashboardService      = scope.ServiceProvider.GetService <IDashboardService>();
                var dashboardTweetService = scope.ServiceProvider.GetService <IDashboardTweetService>();
                var authorService         = scope.ServiceProvider.GetService <IAuthorService>();
                var tweetService          = scope.ServiceProvider.GetService <ITweetService>();
                var blashDbContext        = scope.ServiceProvider.GetService <BlashDbContext>();

                var maxResults = _apiConfiguration.Value.Tweets.MaxPerDashboard.HasValue ? _apiConfiguration.Value.Tweets.MaxPerDashboard.Value : 100;

                var updatedTweetIds = new List <int>();

                List <Dashboard> dashboards = null;

                using (var dbContextTransaction = await blashDbContext.Database.BeginTransactionAsync())
                {
                    _logger.LogWithParameters(LogLevel.Debug, "Get all dashboards from database", parameters);
                    dashboards = _dashboard != null ? new List <Dashboard> {
                        _dashboard
                    } : await dashboardService.GetAllAsync();                                                                    // Get all dashboards (or one if we have specified a dashboard).

                    _logger.LogWithParameters(LogLevel.Debug, string.Format("{0} dashboard{1} returned from the database", dashboards.Count, dashboards.Count() != 1 ? "s" : ""), parameters);

                    foreach (var dashboard in dashboards)
                    {
                        _logger.LogWithParameters(LogLevel.Information, "Start importing recent tweets for dashboard", parameters);

                        TweetResult recentTweets = null;


                        var recentTweetSearchParameters = new Dictionary <string, object>();
                        foreach (var param in parameters)
                        {
                            recentTweetSearchParameters.Add(param.Key, param.Value);
                        }
                        recentTweetSearchParameters.Add("Search Query", dashboard.SearchQuery);
                        recentTweetSearchParameters.Add("MaxResults", maxResults);

                        // Get recent tweets based on the dashboard's search query.
                        _logger.LogWithParameters(LogLevel.Debug, "Get recent tweets from Twitter API.", recentTweetSearchParameters);
                        try
                        {
                            recentTweets = await _twitterApiTweetService.GetRecentTweetsAsync(dashboard.SearchQuery, maxResults);
                        }
                        catch (Exception)
                        {
                            // Set as null if the API throws an exception.
                            recentTweets = null;
                        }
                        _logger.LogWithParameters(LogLevel.Debug, string.Format("{0} recent tweet{1} returned from the Twitter API.", recentTweets != null && recentTweets.Tweets != null ? recentTweets.Tweets.Count : "0", recentTweets == null || recentTweets.Tweets == null || recentTweets.Tweets.Count() != 1 ? "s" : ""), recentTweetSearchParameters);

                        if (recentTweets == null || recentTweets.Tweets == null || recentTweets.Tweets.Count == 0)
                        {
                            continue;
                        }

                        foreach (var recentTweet in recentTweets.Tweets)
                        {
                            // Go through each tweet returned from the Twitter API.
                            var recentTweetParameters = new Dictionary <string, object>();
                            foreach (var param in recentTweetSearchParameters)
                            {
                                recentTweetParameters.Add(param.Key, param.Value);
                            }
                            recentTweetParameters.Add("Twitter API Tweet Id", recentTweet.Id);

                            _logger.LogWithParameters(LogLevel.Information, "Start importing tweet", recentTweetParameters);

                            if (recentTweet.ReferencedTweets != null && recentTweet.ReferencedTweets.Count > 0)
                            {
                                continue;
                            }

                            // Does tweet exist in the databse.
                            var tweet = await TaskExtensions.CreateUpdateTweetAsync(scope, _logger, recentTweet, recentTweets.Includes.Users, recentTweets.Includes.Media);

                            if (tweet == null)
                            {
                                continue;
                            }

                            // Keep a list of all the updated tweets.
                            updatedTweetIds.Add(tweet.Id);

                            // Update the dashboard & tweet relationship in the database.
                            await TaskExtensions.CreateDashboardTweetRelationshipAsync(scope, _logger, dashboard.Id, tweet.Id);

                            _logger.LogWithParameters(LogLevel.Debug, string.Format("Tweet has been added to Dashboard (id: '{0}').", dashboard.Id), recentTweetParameters);

                            _logger.LogWithParameters(LogLevel.Information, "Finish importing tweet", recentTweetParameters);
                        }
                    }
                    // Commit the transaction.
                    await dbContextTransaction.CommitAsync();
                }


                // Delete any tweets that have not been updated.
                if (_dashboard == null)
                {
                    using (var dbContextTransaction = blashDbContext.Database.BeginTransaction())
                    {
                        await dashboardTweetService.DeleteNonUpdatedTweetsAsync(updatedTweetIds); // Remove non-updated dashboard & tweet relationships.

                        await tweetService.DeleteMissingTweetsFromDashboardAsync();               // Delete any tweets that don't belong to a dashboard.

                        await authorService.DeleteMissingTweetsAsync();                           // Delete any authors that don't belong to any tweets.

                        await dbContextTransaction.CommitAsync();                                 // Commit the transaction to the database.
                    }
                }

                // Send the updated information to the clients connected through SignalR
                await _blashHub.RecentTweetsSyncAsync(await ApiExtensions.GetDashboardAndTweetsAsync(dashboards, tweetService), _dashboard == null, _cancellationToken);
            }


            _logger.LogWithParameters(LogLevel.Information, "Finish importing recent tweets from Twitter API", parameters);
        }