/** Public methods **/ public QuestionsResponse RequestQuestions(uint amount, QuestionDifficulty difficulty = QuestionDifficulty.Undefined, QuestionType type = QuestionType.Undefined, ResponseEncoding encoding = ResponseEncoding.Undefined, uint categoryID = 0, string sessionToken = "") { string Url = "https://opentdb.com/api.php?amount=" + amount; if (categoryID != 0) { Url += "&category=" + categoryID; } if (difficulty != QuestionDifficulty.Undefined) { Url += "&difficulty=" + difficulty.ToString().ToLower(); } if (type != QuestionType.Undefined) { Url += "&type=" + type.ToString().ToLower(); } if (encoding != ResponseEncoding.Undefined) { Url += "&encode=" + encoding.ToString(); } if (sessionToken != "") { Url += "&token=" + sessionToken; } string JsonString = SendAPIRequest(Url); return(JsonConvert.DeserializeObject <QuestionsResponse>(JsonString)); }
/// <summary> /// Retrieves random <see cref="TriviaQuestion"/>. /// </summary> /// <param name="amount"> /// Amount of questions to be retrieved. /// </param> /// <param name="category"> /// Category of the questions to be retrieved. /// </param> /// <param name="type"> /// Type of the questions to be retrieved. /// </param> /// <param name="difficulty"> /// Difficulty of the questions to be retrieved. /// </param> /// <param name="encoding"> /// Encoding of the API response to be used. /// </param> /// <param name="sessionToken"> /// Session token to be used. /// </param> /// <returns> /// Array of <see cref="TriviaQuestion"/> based on specified parameters. /// </returns> /// <exception cref="OpenTriviaException"> /// Unexpected error occured. /// </exception> /// <exception cref="HttpRequestException"> /// The request failed due to an underlying issue such as network connectivity, DNS /// failure, server certificate validation or timeout. /// </exception> /// <exception cref="JsonException"> /// The JSON is invalid. /// </exception> public async Task <TriviaQuestion[]> GetQuestionAsync(byte amount = 10, Category category = Category.Any, TriviaType type = TriviaType.Any, Difficulty difficulty = Difficulty.Any, ResponseEncoding encoding = ResponseEncoding.Default, string sessionToken = "") { if (amount <= 0) { amount = 1; } else if (amount > 50) // hard limit { amount = 50; } var url = new StringBuilder(this._BaseApiUrl + $"amount={ amount }"); if (category != Category.Any) { url.Append($"&category={ (byte)category }"); } if (difficulty != Difficulty.Any) { url.Append($"&difficulty={ difficulty.ToString().ToLower() }"); } if (type != TriviaType.Any) { url.Append($"&type={ type.ToString().ToLower() }"); } if (encoding != ResponseEncoding.Default) { url.Append($"&encode={ encoding.ToString().ToLower() }"); } if (sessionToken != "") { url.Append($"&token={ sessionToken }"); } else { if (this._SessionToken != "") { url.Append($"&token={ this._SessionToken }"); } } using (var doc = await this.GetJsonResponseAsync <JsonDocument>(url.ToString())) { var responseCode = doc.RootElement.GetProperty("response_code").GetByte(); if (responseCode != 0) { throw new OpenTriviaException(this.ResponseError(responseCode)); } var jsonArray = doc.RootElement.GetProperty("results"); var questions = new List <TriviaQuestion>(); if (encoding == ResponseEncoding.Default) { foreach (var item in jsonArray.EnumerateArray()) { questions.Add(this.ReadTriviaQuestion(item)); } } else if (encoding == ResponseEncoding.Url3986) { foreach (var item in jsonArray.EnumerateArray()) { questions.Add(this.ReadTriviaQuestionURL(item)); } } else { foreach (var item in jsonArray.EnumerateArray()) { questions.Add(this.ReadTriviaQuestionBase64(item)); } } return(questions.ToArray()); } }