// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddApplicationInsightsTelemetry(); services.AddControllers(); ImageDomainConfiguration imageDomainConfiguration = Configuration.GetSection("ImageDomainConfiguration").Get <ImageDomainConfiguration>(); services.AddSingleton(imageDomainConfiguration); TwitterConfiguration twitterConfiguration = Configuration.GetSection("TwitterConfiguration").Get <TwitterConfiguration>(); services.AddSingleton(twitterConfiguration); services.AddTransient <TwitterAuthHandler>(); services.AddHttpClient <ITwitterStreamProcessor, TwitterStreamProcessor>((httpClient) => { httpClient.BaseAddress = new Uri(twitterConfiguration.BaseUrl); }) .AddHttpMessageHandler <TwitterAuthHandler>(); services.AddSingleton <ITwitterDataStorage, TwitterDataInMemoryStorage>(); services.AddSingleton <ITwitterDataCapturer, TwitterDataCapturer>(); services.AddSingleton <ITwitterSampleDataRetriever, TwitterSampleDataRetriever>(); services.AddSingleton <ITwitterEstimatedLiveDataRetriever, TwitterEstimatedLiveDataRetriever>(); services.AddSingleton <ITweetProcessor, TweetProcessor>(); services.AddSingleton <IUrlHandler, UrlHandler>(); }
public imgly(Twitter twitter, TwitterConfiguration twitterConfig) { this.tw = twitter; this.twitterConfig = twitterConfig; this.imglyApi = new ImglyApi(twitter.Api); }
public TwipplePhoto(Twitter twitter, TwitterConfiguration twitterConfig) { this.twitter = twitter ?? throw new ArgumentNullException(nameof(twitter)); this.twitterConfig = twitterConfig ?? throw new ArgumentNullException(nameof(twitterConfig)); this.twippleApi = new TwippleApi(twitter.Api); }
private TwitterApi(string consumerKey, string consumerSecret, string accessToken, string tokenSecret, TokenType tokenType, ApiVersion apiVersion = ApiVersion.V1) { var consumerCredential = new ConsumerCredential(consumerKey, consumerSecret); consumerCredential.SetToken(accessToken, tokenSecret, tokenType); var serviceProviderDescription = new ServiceProviderDescription( new OAuthEndPoint("https://api.twitter.com/oauth/request_token"), new OAuthEndPoint("https://api.twitter.com/oauth/authorize", HttpMethod.Get), new OAuthEndPoint("https://api.twitter.com/oauth/access_token"), ProtocolVersion.V10A); this._OAuth = new OAuth(consumerCredential, serviceProviderDescription); this._OAuth.Realm = ApiBaseUri; this._OAuth.Proxy = null; this.ApiVersion = apiVersion; this._Configuration = new TwitterConfiguration(); this._Timer = new Timer(_ => { var newConfig = this.RetrieveConfiguration(); if (newConfig != null) { Interlocked.Exchange(ref this._Configuration, newConfig); } }, null, 1000, 1000 * 3600 * 24); }
public void BeginSelection_FilePathTest() { using var twitter = new Twitter(); using var mediaSelector = new MediaSelector { Visible = false, Enabled = false }; twitter.Initialize("", "", "", 0L); mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Twitter"); var images = new[] { "Resources/re.gif" }; Assert.Raises <EventArgs>( x => mediaSelector.BeginSelecting += x, x => mediaSelector.BeginSelecting -= x, () => mediaSelector.BeginSelection(images) ); Assert.True(mediaSelector.Visible); Assert.True(mediaSelector.Enabled); // 2 ページ目まで選択可能な状態 var pages = mediaSelector.ImagePageCombo.Items; Assert.Equal(new[] { "1", "2" }, pages.Cast <object>().Select(x => x.ToString())); // 1 ページ目が表示されている Assert.Equal("1", mediaSelector.ImagePageCombo.Text); Assert.Equal(Path.GetFullPath("Resources/re.gif"), mediaSelector.ImagefilePathText.Text); using var imageStream = File.OpenRead("Resources/re.gif"); using var image = MemoryImage.CopyFromStream(imageStream); Assert.Equal(image, mediaSelector.ImageSelectedPicture.Image); }
public void BeginSelection_MemoryImageTest() { using var twitter = new Twitter(); using var mediaSelector = new MediaSelector { Visible = false, Enabled = false }; twitter.Initialize("", "", "", 0L); mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Twitter"); using (var bitmap = new Bitmap(width: 200, height: 200)) { Assert.Raises <EventArgs>( x => mediaSelector.BeginSelecting += x, x => mediaSelector.BeginSelecting -= x, () => mediaSelector.BeginSelection(bitmap) ); } Assert.True(mediaSelector.Visible); Assert.True(mediaSelector.Enabled); // 2 ページ目まで選択可能な状態 var pages = mediaSelector.ImagePageCombo.Items; Assert.Equal(new[] { "1", "2" }, pages.Cast <object>().Select(x => x.ToString())); // 1 ページ目が表示されている Assert.Equal("1", mediaSelector.ImagePageCombo.Text); Assert.Matches(@"^<>MemoryImage://\d+.png$", mediaSelector.ImagefilePathText.Text); using (var bitmap = new Bitmap(width: 200, height: 200)) { using var image = MemoryImage.CopyFromImage(bitmap); Assert.Equal(image, mediaSelector.ImageSelectedPicture.Image); } }
public yfrog(Twitter twitter, TwitterConfiguration twitterConfig) { this.tw = twitter; this.twitterConfig = twitterConfig; this.yfrogApi = new YfrogApi(twitter.AccessToken, twitter.AccessTokenSecret); }
public void PageChange_ImageDisposeTest() { using var twitter = new Twitter(); using var mediaSelector = new MediaSelector { Visible = false, Enabled = false }; twitter.Initialize("", "", "", 0L); mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Twitter"); var images = new[] { "Resources/re.gif", "Resources/re1.png" }; mediaSelector.BeginSelection(images); mediaSelector.ImagePageCombo.SelectedIndex = 0; // 1 ページ目 var page1Image = mediaSelector.ImageSelectedPicture.Image; mediaSelector.ImagePageCombo.SelectedIndex = 1; // 2 ページ目 var page2Image = mediaSelector.ImageSelectedPicture.Image; Assert.True(page1Image !.IsDisposed); // 前ページの画像が破棄されているか mediaSelector.ImagePageCombo.SelectedIndex = 2; // 3 ページ目 (新規ページ) Assert.True(page2Image !.IsDisposed); // 前ページの画像が破棄されているか }
public imgly(Twitter twitter, TwitterConfiguration twitterConfig) { this.tw = twitter; this.twitterConfig = twitterConfig; this.imglyApi = new ImglyApi(twitter.AccessToken, twitter.AccessTokenSecret); }
public yfrog(Twitter twitter, TwitterConfiguration twitterConfig) { this.tw = twitter; this.twitterConfig = twitterConfig; this.yfrogApi = new YfrogApi(twitter.Api); }
public void ImagePathInput_ReplaceFileMediaItemTest() { using var twitter = new Twitter(); using var mediaSelector = new MediaSelector { Visible = false, Enabled = false }; twitter.Initialize("", "", "", 0L); mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Twitter"); mediaSelector.BeginSelection(new[] { "Resources/re.gif" }); // 既に入力されているファイルパスの画像 var image1 = mediaSelector.ImageSelectedPicture.Image; // 別の画像のファイルパスを入力 mediaSelector.ImagefilePathText.Text = Path.GetFullPath("Resources/re1.png"); TestUtils.Validate(mediaSelector.ImagefilePathText); // 入力したパスの画像が表示される using (var imageStream = File.OpenRead("Resources/re1.png")) { using var image2 = MemoryImage.CopyFromStream(imageStream); Assert.Equal(image2, mediaSelector.ImageSelectedPicture.Image); } // 最初に入力されていたファイルパスの表示用の MemoryImage は破棄される Assert.True(image1 !.IsDisposed); }
public TwitterController(Helpers helpers, IOptions <AirtableConfiguration> airtableConfig, IOptions <TwitterConfiguration> twitterConfig, MongoDbServicer mongoDbServicer) { _helpers = helpers; _airtableConfig = airtableConfig.Value; _twitterConfig = twitterConfig.Value; _mongoDbServicer = mongoDbServicer; }
public void EndSelection_Test() { using (var twitter = new Twitter()) using (var mediaSelector = new MediaSelector { Visible = false, Enabled = false }) { twitter.Initialize("", "", "", 0L); mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Twitter"); mediaSelector.BeginSelection(new[] { "Resources/re.gif" }); var displayImage = mediaSelector.ImageSelectedPicture.Image; // 表示中の画像 Assert.Raises <EventArgs>( x => mediaSelector.EndSelecting += x, x => mediaSelector.EndSelecting -= x, () => mediaSelector.EndSelection() ); Assert.False(mediaSelector.Visible); Assert.False(mediaSelector.Enabled); Assert.True(displayImage.IsDisposed); } }
public void ImagePathInput_Test() { using (var twitter = new Twitter()) using (var mediaSelector = new MediaSelector { Visible = false, Enabled = false }) { twitter.Initialize("", "", "", 0L); mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Twitter"); mediaSelector.BeginSelection(); // 画像のファイルパスを入力 mediaSelector.ImagefilePathText.Text = Path.GetFullPath("Resources/re1.png"); TestUtils.Validate(mediaSelector.ImagefilePathText); // 入力したパスの画像が表示される using (var imageStream = File.OpenRead("Resources/re1.png")) using (var image = MemoryImage.CopyFromStream(imageStream)) { Assert.Equal(image, mediaSelector.ImageSelectedPicture.Image); } // 2 ページ目まで選択可能な状態 var pages = mediaSelector.ImagePageCombo.Items; Assert.Equal(new[] { "1", "2" }, pages.Cast <object>().Select(x => x.ToString())); } }
public void BeginSelection_MultiImageTest() { using (var twitter = new Twitter()) using (var mediaSelector = new MediaSelector { Visible = false, Enabled = false }) { twitter.Initialize("", "", "", 0L); mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Twitter"); var images = new[] { "Resources/re.gif", "Resources/re1.png" }; mediaSelector.BeginSelection(images); // 3 ページ目まで選択可能な状態 var pages = mediaSelector.ImagePageCombo.Items; Assert.Equal(new[] { "1", "2", "3" }, pages.Cast <object>().Select(x => x.ToString())); // 1 ページ目が表示されている Assert.Equal("1", mediaSelector.ImagePageCombo.Text); Assert.Equal(Path.GetFullPath("Resources/re.gif"), mediaSelector.ImagefilePathText.Text); using (var imageStream = File.OpenRead("Resources/re.gif")) using (var image = MemoryImage.CopyFromStream(imageStream)) { Assert.Equal(image, mediaSelector.ImageSelectedPicture.Image); } } }
public Imgur(Twitter tw, TwitterConfiguration twitterConfig) { this.twitter = tw; this.twitterConfig = twitterConfig; this.imgurApi = new ImgurApi(); }
public void BeginSelection_BlankTest() { using var twitter = new Twitter(); using var mediaSelector = new MediaSelector { Visible = false, Enabled = false }; twitter.Initialize("", "", "", 0L); mediaSelector.Initialize(twitter, TwitterConfiguration.DefaultConfiguration(), "Twitter"); Assert.Raises <EventArgs>( x => mediaSelector.BeginSelecting += x, x => mediaSelector.BeginSelecting -= x, () => mediaSelector.BeginSelection() ); Assert.True(mediaSelector.Visible); Assert.True(mediaSelector.Enabled); // 1 ページ目のみ選択可能な状態 var pages = mediaSelector.ImagePageCombo.Items; Assert.Equal(new[] { "1" }, pages.Cast <object>().Select(x => x.ToString())); // 1 ページ目が表示されている Assert.Equal("1", mediaSelector.ImagePageCombo.Text); Assert.Equal("", mediaSelector.ImagefilePathText.Text); Assert.Null(mediaSelector.ImageSelectedPicture.Image); }
public Mobypicture(Twitter twitter, TwitterConfiguration twitterConfig) { this.twitter = twitter ?? throw new ArgumentNullException(nameof(twitter)); this.twitterConfig = twitterConfig ?? throw new ArgumentNullException(nameof(twitterConfig)); this.mobypictureApi = new MobypictureApi(twitter.Api); }
public void TestInitialize() { this.mockRepository = new MockRepository(MockBehavior.Loose); //this.mockHttpClientFactory = this.mockRepository.Create<IHttpClientFactory>(); this.mockHttpClientProvider = this.mockRepository.Create <IHttpClientProvider>(); this.mockStreamReaderHandler = this.mockRepository.Create <IStreamReaderHandler>(); this.mockIncommingTweetQueue = this.mockRepository.Create <IIncommingTweetQueue>(); this.mockIncommingTweetQueue.Setup(o => o.SendMessageOntoQueue(It.IsAny <string>())).Returns(Task.FromResult(true)); string fakeFileContents = "some content"; byte[] fakeFileBytes = Encoding.UTF8.GetBytes(fakeFileContents); MemoryStream fakeMemoryStream = new MemoryStream(fakeFileBytes); this.mockStreamReaderHandler.Setup(o => o.GetStreamReader(It.IsAny <Stream>())).Returns(() => new StreamReader(fakeMemoryStream)); //var response = new Mock<HttpResponseMessage>(); //response.SetupAllProperties(); //var mockHttpMessageHandler = new Mock<HttpMessageHandler>(); //mockHttpMessageHandler.Protected() // .Setup<Task<Stream>>("GetStreamAsync", ItExpr.IsAny<string>()) // .ReturnsAsync(fakeMemoryStream); //var client = new HttpClient(mockHttpMessageHandler.Object); //this.mockHttpClientFactory.Setup(o => o.CreateClient(It.IsAny<string>())).Returns(client.Object); //this.mockHttpClientProvider = new Mock<IHttpClientProvider>(); mockHttpClientProvider.SetupAllProperties(); mockHttpClientProvider.Setup(o => o.GetStreamAsync(It.IsAny <string>())).ReturnsAsync(fakeMemoryStream, new System.TimeSpan(0, 0, 1)); mockHttpClientProvider.SetupProperty(o => o.BaseAddress); var headers = new HttpClient().DefaultRequestHeaders; mockHttpClientProvider.SetupGet(o => o.DefaultRequestHeaders).Returns(headers); var binDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location).TrimEnd(@"\bin".ToArray()); var dataFilePath = Path.GetFullPath(Path.Combine(binDirectory, Constants.AppSettingsJson)); configuration = new ConfigurationBuilder() .AddJsonFile(dataFilePath, optional: true) .Build(); twitterConfiguration = new TwitterConfiguration() { BaseUrl = configuration.GetValue <string>(Constants.TwitterBaseUrlName).ToString(), OAuthToken = configuration.GetValue <string>(Constants.TwitterOAuthTokenName).ToString(), SampleStreamUrl = configuration.GetValue <string>(Constants.TwitterSampleStreamUrlName).ToString() }; }
/// <summary> /// 投稿先サービスなどを初期化する。 /// </summary> public void Initialize(Twitter tw, TwitterConfiguration twitterConfig, string svc, int?index = null) { CreateServices(tw, twitterConfig); SetImageServiceCombo(); SetImagePageCombo(); SelectImageServiceComboItem(svc, index); }
/// <summary> /// Creates the credentials. /// </summary> /// <param name="config">The configuration.</param> /// <returns></returns> public Tweetinvi.Models.ConsumerOnlyCredentials CreateCredentials(TwitterConfiguration config) { var appCredentials = new Tweetinvi.Models.ConsumerOnlyCredentials(config.ApiKey, config.ApiKeySecret) { BearerToken = config.BearerToken }; return(appCredentials); }
private void CreateServices(Twitter tw, TwitterConfiguration twitterConfig) { this.pictureService?.Clear(); this.pictureService = new Dictionary <string, IMediaUploadService> { ["Twitter"] = new TwitterPhoto(tw, twitterConfig), ["Imgur"] = new Imgur(twitterConfig), ["Mobypicture"] = new Mobypicture(tw, twitterConfig), }; }
public void AddPostsByHashTags() { IEnumerable <Models.HashTag> hashtags = _socialFeedsRepository.GetHashTags(); TwitterConfiguration twitterConfig = _socialFeedsRepository.GeTwitterConfiguration(); foreach (var hashtag in hashtags) { AddTwitterPosts(hashtag.Hashtag, twitterConfig, _socialFeedsRepository); } }
/// <summary> /// Creates the stream. /// </summary> /// <param name="configFromRequest">The configuration from request.</param> /// <returns></returns> public Tweetinvi.Streaming.V2.ISampleStreamV2 CreateStream(TwitterConfiguration configFromRequest) { var config = this.GetConfiguration(configFromRequest); var appCredentials = this.CreateCredentials(config); var appClient = this.CreateTwitterClient(appCredentials); var sampleStreamV2 = appClient.StreamsV2.CreateSampleStream(); this.StreamStartedAt = DateTime.UtcNow; return(sampleStreamV2); }
/// <summary> /// Gets the configuration. /// </summary> /// <param name="configFromRequest">The configuration from request.</param> /// <returns></returns> public TwitterConfiguration GetConfiguration(TwitterConfiguration configFromRequest) { // Get the configuration info. There are 2 possible sources: // 1. The body of the POST request (configFromRequest) // 2. The app.config file var config = (configFromRequest == null) ? this.GetConfiguration() : configFromRequest; return(config); }
public TwitterConfiguration GeTwitterConfiguration() { Item targetItem = Sitecore.Context.Database.Items["{EE197B09-61EA-42CB-B5DE-F0BBAC2D54DF}"]; TwitterConfiguration twitterconfig = new TwitterConfiguration(); twitterconfig.ConsumerKey = targetItem.Fields["ConsumerKey"].Value; twitterconfig.ConsumerSecret = targetItem.Fields["ConsumerSecret"].Value; twitterconfig.Token = targetItem.Fields["Token"].Value; twitterconfig.TokenSecret = targetItem.Fields["TokenSecret"].Value; return(twitterconfig); }
public async Task <string> ReciveTweets(IHttpClientProvider client, TwitterConfiguration twitterConfiguration , IIncommingTweetQueue incommingTweetQueue, IStreamReaderHandler streamReaderHandler, CancellationToken cancellationToken) { int tweetCount = 0; var tasks = new List <Task>(); DateTime startRun = DateTime.UtcNow; try { client.BaseAddress = new Uri(twitterConfiguration.BaseUrl); if (client != null) { client.DefaultRequestHeaders.Add("Authorization", "Bearer " + twitterConfiguration.OAuthToken); var stream = await client.GetStreamAsync(twitterConfiguration.SampleStreamUrl); try { using (var reader = streamReaderHandler.GetStreamReader(stream)) { do { var rawTweetData = await reader.ReadLineAsync(); RawTweetModel messageWithData = new RawTweetModel() { TweetCount = tweetCount, RawTweetData = rawTweetData }; // send new tweet onto queue for processing tasks.Add(Task.Run(() => incommingTweetQueue.SendMessageOntoQueue(JsonConvert.SerializeObject(messageWithData)))); tweetCount++; cancellationToken.ThrowIfCancellationRequested(); } while (true); } // } catch (OperationCanceledException) { // canceled } catch (Exception exc) { throw exc; } } } catch (Exception exc) { throw exc; } Task.WaitAll(tasks.ToArray()); return("Done Collecting Tweets... "); }
public Mobypicture(Twitter twitter, TwitterConfiguration twitterConfig) { if (twitter == null) throw new ArgumentNullException(nameof(twitter)); if (twitterConfig == null) throw new ArgumentNullException(nameof(twitterConfig)); this.twitter = twitter; this.twitterConfig = twitterConfig; this.mobypictureApi = new MobypictureApi(twitter.Api); }
public TwipplePhoto(Twitter twitter, TwitterConfiguration twitterConfig) { if (twitter == null) throw new ArgumentNullException(nameof(twitter)); if (twitterConfig == null) throw new ArgumentNullException(nameof(twitterConfig)); this.twitter = twitter; this.twitterConfig = twitterConfig; this.twippleApi = new TwippleApi(twitter.Api); }
/// <summary> /// Gets the configuration. /// </summary> /// <returns></returns> public TwitterConfiguration GetConfiguration() { var config = new TwitterConfiguration(); config.Url = ConfigurationManager.AppSettings[JHA.WebServices.Contract.Constants.TwitterConstants.TwitterUrlSetting]; config.ApiKey = ConfigurationManager.AppSettings[JHA.WebServices.Contract.Constants.TwitterConstants.TwitterApiKeySetting]; config.ApiKeySecret = ConfigurationManager.AppSettings[JHA.WebServices.Contract.Constants.TwitterConstants.TwitterApiKeySecretSetting]; config.AccessToken = ConfigurationManager.AppSettings[JHA.WebServices.Contract.Constants.TwitterConstants.TwitterAccessTokenSetting]; config.AccessTokenSecret = ConfigurationManager.AppSettings[JHA.WebServices.Contract.Constants.TwitterConstants.TwitterAccessTokenSecretSetting]; config.BearerToken = ConfigurationManager.AppSettings[JHA.WebServices.Contract.Constants.TwitterConstants.TwitterBearerTokenSetting]; return(config); }
private void CreateServices(Twitter tw, TwitterConfiguration twitterConfig) { this.pictureService?.Clear(); this.pictureService = null; this.pictureService = new Dictionary <string, IMediaUploadService> { ["Twitter"] = new TwitterPhoto(tw, twitterConfig), ["img.ly"] = new imgly(tw, twitterConfig), ["yfrog"] = new yfrog(tw, twitterConfig), ["ついっぷるフォト"] = new TwipplePhoto(tw, twitterConfig), ["Imgur"] = new Imgur(tw, twitterConfig), ["Mobypicture"] = new Mobypicture(tw, twitterConfig), }; }
public QueueHub(IHttpClientProvider httpClientProvider, IIncommingTweetQueue incommingTweetQueue, IConfiguration configuration, IRuntimeStatsService runtimeStatsService, IStreamService streamService, IStreamReaderHandler streamReaderHandler) { _httpClientProvider = httpClientProvider; _incommingTweetQueue = incommingTweetQueue; _runtimeStatsService = runtimeStatsService; _streamService = streamService; _streamReaderHandler = streamReaderHandler; _twitterConfiguration = new TwitterConfiguration() { BaseUrl = configuration.GetValue <string>(Constants.TwitterBaseUrlName).ToString(), OAuthToken = configuration.GetValue <string>(Constants.TwitterOAuthTokenName).ToString(), SampleStreamUrl = configuration.GetValue <string>(Constants.TwitterSampleStreamUrlName).ToString() }; }
public void UpdateTwitterConfiguration(TwitterConfiguration config) { this.twitterConfig = config; }
//private List<PostClass> _deletemessages = new List<PostClass>(); public Twitter() { this.Configuration = TwitterConfiguration.DefaultConfiguration(); }
public Twitter(TwitterApi api) { this.Api = api; this.Configuration = TwitterConfiguration.DefaultConfiguration(); }
private TwitterApi(string consumerKey, string consumerSecret, string accessToken, string tokenSecret, TokenType tokenType, ApiVersion apiVersion = ApiVersion.V1) { var consumerCredential = new ConsumerCredential(consumerKey, consumerSecret); consumerCredential.SetToken(accessToken, tokenSecret, tokenType); var serviceProviderDescription = new ServiceProviderDescription( new OAuthEndPoint("https://api.twitter.com/oauth/request_token"), new OAuthEndPoint("https://api.twitter.com/oauth/authorize", HttpMethod.Get), new OAuthEndPoint("https://api.twitter.com/oauth/access_token"), ProtocolVersion.V10A); this._OAuth = new OAuth(consumerCredential, serviceProviderDescription); this._OAuth.Realm = ApiBaseUri; this._OAuth.Proxy = null; this.ApiVersion = apiVersion; this._Configuration = new TwitterConfiguration(); this._Timer = new Timer(_ => { var newConfig = this.RetrieveConfiguration(); if (newConfig != null) Interlocked.Exchange(ref this._Configuration, newConfig); }, null, 1000, 1000 * 3600 * 24); }