Beispiel #1
0
        /// <summary>
        /// appends parameters for <see cref="Tweet"/> request
        /// </summary>
        /// <param name="parameters">list of parameters from expression tree</param>
        /// <param name="url">base url</param>
        /// <returns>base url + parameters</returns>
        Request BuildUrlParameters(Dictionary <string, string> parameters, string url)
        {
            var req       = new Request(BaseUrl + url);
            var urlParams = req.RequestParameters;

            if (parameters.ContainsKey(nameof(Ids)))
            {
                Ids = parameters[nameof(Ids)];
                urlParams.Add(new QueryParameter("ids", Ids.Replace(" ", "")));
            }
            else
            {
                throw new ArgumentException($"{nameof(Ids)} is required", nameof(Ids));
            }

            if (parameters.ContainsKey(nameof(Expansions)))
            {
                Expansions = parameters[nameof(Expansions)];
                urlParams.Add(new QueryParameter("expansions", Expansions.Replace(" ", "")));
            }

            if (parameters.ContainsKey(nameof(MediaFields)))
            {
                MediaFields = parameters[nameof(MediaFields)];
                urlParams.Add(new QueryParameter("media.fields", MediaFields.Replace(" ", "")));
            }

            if (parameters.ContainsKey(nameof(PlaceFields)))
            {
                PlaceFields = parameters[nameof(PlaceFields)];
                urlParams.Add(new QueryParameter("place.fields", PlaceFields.Replace(" ", "")));
            }

            if (parameters.ContainsKey(nameof(PollFields)))
            {
                PollFields = parameters[nameof(PollFields)];
                urlParams.Add(new QueryParameter("poll.fields", PollFields.Replace(" ", "")));
            }

            if (parameters.ContainsKey(nameof(TweetFields)))
            {
                TweetFields = parameters[nameof(TweetFields)];
                urlParams.Add(new QueryParameter("tweet.fields", TweetFields.Replace(" ", "")));
            }

            if (parameters.ContainsKey(nameof(UserFields)))
            {
                UserFields = parameters[nameof(UserFields)];
                urlParams.Add(new QueryParameter("user.fields", UserFields.Replace(" ", "")));
            }

            return(req);
        }
        /// <summary>
        /// appends parameters for Tweet request
        /// </summary>
        /// <param name="parameters">list of parameters from expression tree</param>
        /// <param name="url">base url</param>
        /// <returns>base url + parameters</returns>
        void BuildUrlParameters(Dictionary <string, string> parameters, IList <QueryParameter> urlParams)
        {
            if (parameters.ContainsKey(nameof(Expansions)))
            {
                Expansions = parameters[nameof(Expansions)];
                urlParams.Add(new QueryParameter("expansions", Expansions.Replace(" ", "")));
            }

            if (parameters.ContainsKey(nameof(MediaFields)))
            {
                MediaFields = parameters[nameof(MediaFields)];
                urlParams.Add(new QueryParameter("media.fields", MediaFields.Replace(" ", "")));
            }

            if (parameters.ContainsKey(nameof(PlaceFields)))
            {
                PlaceFields = parameters[nameof(PlaceFields)];
                urlParams.Add(new QueryParameter("place.fields", PlaceFields.Replace(" ", "")));
            }

            if (parameters.ContainsKey(nameof(PollFields)))
            {
                PollFields = parameters[nameof(PollFields)];
                urlParams.Add(new QueryParameter("poll.fields", PollFields.Replace(" ", "")));
            }

            if (parameters.ContainsKey(nameof(TweetFields)))
            {
                TweetFields = parameters[nameof(TweetFields)];
                urlParams.Add(new QueryParameter("tweet.fields", TweetFields.Replace(" ", "")));
            }

            if (parameters.ContainsKey(nameof(UserFields)))
            {
                UserFields = parameters[nameof(UserFields)];
                urlParams.Add(new QueryParameter("user.fields", UserFields.Replace(" ", "")));
            }

            if (parameters.ContainsKey(nameof(Ids)))
            {
                Ids = parameters[nameof(Ids)];
                urlParams.Add(new QueryParameter("ids", Ids.Replace(" ", "")));
            }
        }
Beispiel #3
0
 /// <summary>
 /// Specifies the fields to be returned in the current request.
 /// </summary>
 /// <param name="fields">The tweet fields.</param>
 /// <returns>
 /// The current request builder.
 /// </returns>
 IFieldsCalled IFieldsCalling <IFieldsCalled, TweetFields> .Fields(TweetFields fields)
 {
     this.StreamRequest.Configuration.Fields = fields;
     return(this);
 }
Beispiel #4
0
        public static string ToQueryString(this TweetFields value)
        {
            if (value == TweetFields.None)
            {
                return("");
            }

            var builder = new StringBuilder();

            if ((value & TweetFields.Attachments) != 0)
            {
                builder.Append("attachments,");
            }
            if ((value & TweetFields.AuthorId) != 0)
            {
                builder.Append("author_id,");
            }
            if ((value & TweetFields.ContextAnnotations) != 0)
            {
                builder.Append("context_annotations,");
            }
            if ((value & TweetFields.ConversationId) != 0)
            {
                builder.Append("conversation_id,");
            }
            if ((value & TweetFields.CreatedAt) != 0)
            {
                builder.Append("created_at,");
            }
            if ((value & TweetFields.Entities) != 0)
            {
                builder.Append("entities,");
            }
            if ((value & TweetFields.Geo) != 0)
            {
                builder.Append("geo,");
            }
            if ((value & TweetFields.Id) != 0)
            {
                builder.Append("id,");
            }
            if ((value & TweetFields.InReplyToUserId) != 0)
            {
                builder.Append("in_reply_to_user_id,");
            }
            if ((value & TweetFields.Lang) != 0)
            {
                builder.Append("lang,");
            }
            if ((value & TweetFields.NonPublicMetrics) != 0)
            {
                builder.Append("non_public_metrics,");
            }
            if ((value & TweetFields.PublicMetrics) != 0)
            {
                builder.Append("public_metrics,");
            }
            if ((value & TweetFields.OrganicMetrics) != 0)
            {
                builder.Append("organic_metrics,");
            }
            if ((value & TweetFields.PromotedMetrics) != 0)
            {
                builder.Append("promoted_metrics,");
            }
            if ((value & TweetFields.PossiblySensitive) != 0)
            {
                builder.Append("possibly_sensitive,");
            }
            if ((value & TweetFields.ReferencedTweets) != 0)
            {
                builder.Append("referenced_tweets,");
            }
            if ((value & TweetFields.Source) != 0)
            {
                builder.Append("source,");
            }
            if ((value & TweetFields.Text) != 0)
            {
                builder.Append("text,");
            }
            if ((value & TweetFields.Withheld) != 0)
            {
                builder.Append("withheld,");
            }

            return(builder.ToString(0, builder.Length - 1));
        }
        /// <summary>
        /// appends parameters for Search request
        /// </summary>
        /// <param name="parameters">list of parameters from expression tree</param>
        /// <param name="url">base url</param>
        /// <returns>base url + parameters</returns>
        private Request BuildSearchUrlParameters(Dictionary <string, string> parameters, string url)
        {
            var req       = new Request(BaseUrl + url);
            var urlParams = req.RequestParameters;


            if (parameters.ContainsKey(nameof(Query)) && !string.IsNullOrWhiteSpace(parameters[nameof(Query)]))
            {
                Query = parameters[nameof(Query)];
                urlParams.Add(new QueryParameter("query", Query));
            }
            else
            {
                throw new ArgumentNullException(nameof(Query), "Query filter in where clause is required.");
            }

            if (parameters.ContainsKey(nameof(EndTime)))
            {
                EndTime = DateTime.Parse(parameters[nameof(EndTime)]);
                urlParams.Add(new QueryParameter("end_time", EndTime.ToString(L2TKeys.ISO8601, CultureInfo.InvariantCulture)));
            }

            if (parameters.ContainsKey(nameof(Expansions)))
            {
                Expansions = parameters[nameof(Expansions)];
                urlParams.Add(new QueryParameter("expansions", Expansions.Replace(" ", "")));
            }

            if (parameters.ContainsKey(nameof(MaxResults)))
            {
                MaxResults = int.Parse(parameters[nameof(MaxResults)]);
                urlParams.Add(new QueryParameter("max_results", MaxResults.ToString(CultureInfo.InvariantCulture)));
            }

            if (parameters.ContainsKey(nameof(MediaFields)))
            {
                MediaFields = parameters[nameof(MediaFields)];
                urlParams.Add(new QueryParameter("media.fields", MediaFields.Replace(" ", "")));
            }

            if (parameters.ContainsKey(nameof(NextToken)))
            {
                NextToken = parameters[nameof(NextToken)];
                urlParams.Add(new QueryParameter("next_token", NextToken));
            }

            if (parameters.ContainsKey(nameof(PlaceFields)))
            {
                PlaceFields = parameters[nameof(PlaceFields)];
                urlParams.Add(new QueryParameter("place.fields", PlaceFields.Replace(" ", "")));
            }

            if (parameters.ContainsKey(nameof(PollFields)))
            {
                PollFields = parameters[nameof(PollFields)];
                urlParams.Add(new QueryParameter("poll.fields", PollFields.Replace(" ", "")));
            }

            if (parameters.ContainsKey(nameof(SinceID)))
            {
                SinceID = parameters[nameof(SinceID)];
                urlParams.Add(new QueryParameter("since_id", SinceID));
            }

            if (parameters.ContainsKey(nameof(StartTime)))
            {
                StartTime = DateTime.Parse(parameters[nameof(StartTime)]);
                urlParams.Add(new QueryParameter("start_time", StartTime.ToString(L2TKeys.ISO8601, CultureInfo.InvariantCulture)));
            }

            if (parameters.ContainsKey(nameof(TweetFields)))
            {
                TweetFields = parameters[nameof(TweetFields)];
                urlParams.Add(new QueryParameter("tweet.fields", TweetFields.Replace(" ", "")));
            }

            if (parameters.ContainsKey(nameof(UntilID)))
            {
                UntilID = parameters[nameof(UntilID)];
                urlParams.Add(new QueryParameter("until_id", UntilID));
            }

            if (parameters.ContainsKey(nameof(UserFields)))
            {
                UserFields = parameters[nameof(UserFields)];
                urlParams.Add(new QueryParameter("user.fields", UserFields.Replace(" ", "")));
            }

            return(req);
        }
Beispiel #6
0
        /// <summary>
        /// Retrieves the tweets asynchronously.
        /// </summary>
        /// <param name="accessToken">The access token.</param>
        /// <param name="ids">The list of Twitter handles (without "@" character).</param>
        /// <param name="since">UTC time for the earliest tweet. Always matched again the <see cref="Tweet.GatheredTime" />.
        /// Must be earlier than <paramref name="until" />.
        /// The <paramref name="since" /> can be maximally 30 days in the past.
        /// Default value is 30 minutes in the past from the current UTC time.</param>
        /// <param name="until">UTC time for the latest tweet. Always matched again the <see cref="Tweet.GatheredTime" />.
        /// Must be later than <paramref name="since" />.
        /// Default value is the current time in UTC.</param>
        /// <param name="fields">The fields to be retrieved and filled in the <see cref="Tweet" />.</param>
        /// <returns>
        /// The tweets list sorted by <see cref="Tweet.GatheredTime" /> from newest to oldest. If no tweets are retrieved an empty list is returned.
        /// </returns>
        /// <example>
        ///   <code>
        /// var tweets = await komfoProvider.RetrieveTweetsAsync("&lt;your_access_token&gt;", new[] { "dkoroedova", "bkoroedova" });
        /// foreach (var tweet in tweets)
        /// {
        ///   this.ShowTweet(tweet);
        /// }
        ///   </code>
        /// </example>
        public virtual async Task <IEnumerable <Tweet> > RetrieveTweetsAsync(string accessToken, IEnumerable <string> ids, DateTime?since = null, DateTime?until = null, TweetFields fields = TweetFields.All)
        {
            Assert.ArgumentNotNull(accessToken, "accessToken");
            Assert.ArgumentNotNull(ids, "ids");
            Assert.ArgumentCondition(fields != TweetFields.None, "fields", "At least one field should be specified.");
            if (since.HasValue)
            {
                Assert.ArgumentCondition(since.Value.Kind == DateTimeKind.Utc, "since", "DateTime should be in the UTC format.");
            }

            if (until.HasValue)
            {
                Assert.ArgumentCondition(until.Value.Kind == DateTimeKind.Utc, "until", "DateTime should be in the UTC format.");
            }

            var idsList = ids as IList <string> ?? ids.ToList();

            Assert.ArgumentCondition(idsList.Any(), "ids", "There should be at least one Twitter handle.");

            var queryString = HttpUtility.ParseQueryString(string.Empty);

            queryString["ids"] = string.Join(",", idsList);

            if (fields != TweetFields.All)
            {
                queryString["fields"] = this.ParseFlagsEnum(fields);
            }

            if (since.HasValue)
            {
                queryString["since"] = since.Value.ToUtcIso();
            }

            if (until.HasValue)
            {
                queryString["until"] = until.Value.ToUtcIso();
            }

            var responseContent = await this.SendJsonRequestAsync(HttpMethod.Get, this.endpointsConfiguration.Stream, accessToken, null, queryString);

            return(JsonConvert.DeserializeAnonymousType(responseContent, new { Data = new List <Tweet>() }).Data);
        }
Beispiel #7
0
        /// <summary>
        /// builds url based on input parameters
        /// </summary>
        /// <param name="parameters">criteria for url segments and parameters</param>
        /// <returns>URL conforming to Twitter API</returns>
        public Request BuildUrl(Dictionary <string, string> parameters)
        {
            if (parameters.ContainsKey(nameof(Type)))
            {
                Type = RequestProcessorHelper.ParseEnum <SearchType>(parameters[nameof(Type)]);
            }
            else
            {
                throw new ArgumentException($"{nameof(Type)} is required", nameof(Type));
            }

            string urlSegment = Type switch
            {
                SearchType.FullSearch => "tweets/search/all",
                SearchType.RecentSearch => "tweets/search/recent",
                _ => throw new ArgumentException($"Unknown SearchType: '{Type}'")
            };

            return(BuildSearchUrlParameters(parameters, urlSegment));
        }

        /// <summary>
        /// appends parameters for Search request
        /// </summary>
        /// <param name="parameters">list of parameters from expression tree</param>
        /// <param name="url">base url</param>
        /// <returns>base url + parameters</returns>
        Request BuildSearchUrlParameters(Dictionary <string, string> parameters, string url)
        {
            var req       = new Request(BaseUrl + url);
            var urlParams = req.RequestParameters;


            if (parameters.ContainsKey(nameof(Query)) && !string.IsNullOrWhiteSpace(parameters[nameof(Query)]))
            {
                Query = parameters[nameof(Query)];
                urlParams.Add(new QueryParameter("query", Query));
            }
            else
            {
                throw new ArgumentNullException(nameof(Query), "Query filter in where clause is required.");
            }

            if (parameters.ContainsKey(nameof(EndTime)))
            {
                EndTime = DateTime.Parse(parameters[nameof(EndTime)]);
                urlParams.Add(new QueryParameter("end_time", EndTime.ToString(L2TKeys.ISO8601, CultureInfo.InvariantCulture)));
            }

            if (parameters.ContainsKey(nameof(Expansions)))
            {
                Expansions = parameters[nameof(Expansions)];
                urlParams.Add(new QueryParameter("expansions", Expansions.Replace(" ", "")));
            }

            if (parameters.ContainsKey(nameof(MaxResults)))
            {
                MaxResults = int.Parse(parameters[nameof(MaxResults)]);
                urlParams.Add(new QueryParameter("max_results", MaxResults.ToString(CultureInfo.InvariantCulture)));
            }

            if (parameters.ContainsKey(nameof(MediaFields)))
            {
                MediaFields = parameters[nameof(MediaFields)];
                urlParams.Add(new QueryParameter("media.fields", MediaFields.Replace(" ", "")));
            }

            if (parameters.ContainsKey(nameof(NextToken)))
            {
                NextToken = parameters[nameof(NextToken)];
                urlParams.Add(new QueryParameter("next_token", NextToken));
            }

            if (parameters.ContainsKey(nameof(PlaceFields)))
            {
                PlaceFields = parameters[nameof(PlaceFields)];
                urlParams.Add(new QueryParameter("place.fields", PlaceFields.Replace(" ", "")));
            }

            if (parameters.ContainsKey(nameof(PollFields)))
            {
                PollFields = parameters[nameof(PollFields)];
                urlParams.Add(new QueryParameter("poll.fields", PollFields.Replace(" ", "")));
            }

            if (parameters.ContainsKey(nameof(SinceID)))
            {
                SinceID = parameters[nameof(SinceID)];
                urlParams.Add(new QueryParameter("since_id", SinceID));
            }

            if (parameters.ContainsKey(nameof(StartTime)))
            {
                StartTime = DateTime.Parse(parameters[nameof(StartTime)]);
                urlParams.Add(new QueryParameter("start_time", StartTime.ToString(L2TKeys.ISO8601, CultureInfo.InvariantCulture)));
            }

            if (parameters.ContainsKey(nameof(TweetFields)))
            {
                TweetFields = parameters[nameof(TweetFields)];
                urlParams.Add(new QueryParameter("tweet.fields", TweetFields.Replace(" ", "")));
            }

            if (parameters.ContainsKey(nameof(UntilID)))
            {
                UntilID = parameters[nameof(UntilID)];
                urlParams.Add(new QueryParameter("until_id", UntilID));
            }

            if (parameters.ContainsKey(nameof(UserFields)))
            {
                UserFields = parameters[nameof(UserFields)];
                urlParams.Add(new QueryParameter("user.fields", UserFields.Replace(" ", "")));
            }

            return(req);
        }