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; } }
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."); } }
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()); }
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")); }
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")); }
public ActionResult ShowResult() { TweetResult rslt = (TweetResult)TempData["TweetAct"]; return(View(rslt)); }
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); }
/// <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); }