コード例 #1
0
        public override async Task <CrawlJobData> GetCrawlJobData(
            ProviderUpdateContext context,
            IDictionary <string, object> configuration,
            Guid organizationId,
            Guid userId,
            Guid providerDefinitionId)
        {
            if (configuration == null)
            {
                throw new ArgumentNullException(nameof(configuration));
            }

            var twitterCrawlJobData = new TwitterCrawlJobData();

            var            authUrl          = "https://api.twitter.com/oauth2/token";
            var            authHeaderFormat = "Basic {0}";
            var            authHeader       = string.Format(authHeaderFormat, Convert.ToBase64String(Encoding.UTF8.GetBytes(Uri.EscapeDataString(consumerKey) + ":" + Uri.EscapeDataString(consumerSecret))));
            var            postBody         = "grant_type=client_credentials";
            HttpWebRequest authRequest      = (HttpWebRequest)WebRequest.Create(authUrl);

            authRequest.Headers.Add("Authorization", authHeader);
            authRequest.Method      = "POST";
            authRequest.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";
            using (Stream stream = authRequest.GetRequestStream())
            {
                byte[] content = ASCIIEncoding.ASCII.GetBytes(postBody);
                stream.Write(content, 0, content.Length);
            }
            WebResponse authResponse = authRequest.GetResponse();

            TwitAuthenticateResponse twitAuthResponse;

            using (authResponse)
            {
                using (var reader = new StreamReader(authResponse.GetResponseStream()))
                {
                    var objectText = reader.ReadToEnd();
                    twitAuthResponse           = JsonConvert.DeserializeObject <TwitAuthenticateResponse>(objectText);
                    twitterCrawlJobData.ApiKey = twitAuthResponse.access_token;
                }
            }

            if (configuration.ContainsKey(TwitterConstants.KeyName.ApiKey))
            {
                twitterCrawlJobData.ApiKey = twitAuthResponse.access_token;
            }
            if (configuration.ContainsKey(TwitterConstants.KeyName.Screen_name))
            {
                twitterCrawlJobData.Screen_name = configuration[TwitterConstants.KeyName.Screen_name].ToString();
            }

            return(await Task.FromResult(twitterCrawlJobData));
        }
コード例 #2
0
        public TwitterClient(ILogger log, TwitterCrawlJobData twitterCrawlJobData, IRestClient client) // TODO: pass on any extra dependencies
        {
            if (twitterCrawlJobData == null)
            {
                throw new ArgumentNullException(nameof(twitterCrawlJobData));
            }

            if (client == null)
            {
                throw new ArgumentNullException(nameof(client));
            }

            this.log    = log ?? throw new ArgumentNullException(nameof(log));
            this.client = client ?? throw new ArgumentNullException(nameof(client));

            // TODO use info from twitterCrawlJobData to instantiate the connection
            client.BaseUrl = new Uri(BaseUri);
            client.AddDefaultParameter("api_key", twitterCrawlJobData.ApiKey, ParameterType.QueryString);
        }