protected override async Task <HttpResponseMessage> SendAsync( HttpRequestMessage request, CancellationToken cancellationToken) { var resp = await base.SendAsync(request, cancellationToken).ConfigureAwait(false); if (!resp.IsSuccessStatusCode) { var rstr = await resp.Content.ReadAsStringAsync().ConfigureAwait(false); var json = MeteorJson.Parse(rstr); var ex = new TwitterApiException(resp.StatusCode, rstr); try { if (json.ContainsKey("errors") && json["errors"][0].ContainsKey("code") && json["errors"][0].ContainsKey("message")) { ex = new TwitterApiException(resp.StatusCode, json["errors"][0]["message"].AsString(), (TwitterErrorCode)(int)json["errors"][0]["code"].AsLong()); } } catch { // ignore parse exception } throw ex; } return(resp.EnsureSuccessStatusCode()); }
private static async Task <ICursorResult <IEnumerable <T> > > ReadAsCursoredAsync <T>( [NotNull] HttpResponseMessage response, [NotNull] Func <JsonValue, JsonArray> selector, [NotNull] Func <JsonValue, T> instantiator) { if (response == null) { throw new ArgumentNullException(nameof(response)); } if (selector == null) { throw new ArgumentNullException(nameof(selector)); } if (instantiator == null) { throw new ArgumentNullException(nameof(instantiator)); } var json = await response.ReadAsStringAsync().ConfigureAwait(false); var parsed = MeteorJson.Parse(json); var converteds = selector(parsed).Select(instantiator); var prevCursor = parsed["previous_cursor"].AsLongOrNull() ?? 0; var nextCursor = parsed["next_cursor"].AsLongOrNull() ?? 0; return(CursorResult.Create(converteds, prevCursor, nextCursor)); }
public void MeteorJsonValueTest() { Assert.AreEqual(1234567890e0, MeteorJson.Parse("1234567890e0").AsDouble()); Assert.AreEqual(1.234567890e4, MeteorJson.Parse("1.234567890e4").AsDouble(), 0.00000001); Assert.AreEqual(-543.21e-4, MeteorJson.Parse("-543.21e-4").AsDouble(), 0.0000001); Assert.AreEqual( "\(#`・△・)/ < Merurulince Rede Arls!", MeteorJson.Parse(@"""\(#`・△・)/ < Merurulince Rede Arls!""").AsString()); }
/// <summary> /// Parse streamed JSON line /// </summary> /// <param name="line">JSON line</param> /// <param name="handler">result handler</param> public static void ParseStreamLine(string line, IStreamHandler handler) { try { var element = MeteorJson.Parse(line); ParseStreamLine(element, handler); } catch (Exception ex) { handler.OnException(new StreamParseException( "JSON parse failed.", line, ex)); } }
private static async Task <IApiResult <TwitterUploadedMedia> > UploadMediaCoreAsync( [NotNull] this IApiAccessor accessor, [NotNull] HttpContent content, CancellationToken cancellationToken) { if (content == null) { throw new ArgumentNullException(nameof(content)); } return(await accessor.PostAsync(MediaUploadPath, content, async resp => { var json = await resp.ReadAsStringAsync().ConfigureAwait(false); return new TwitterUploadedMedia(MeteorJson.Parse(json)); }, cancellationToken).ConfigureAwait(false)); }
private static async Task <T> ReadAsAsync <T>([NotNull] HttpResponseMessage response, [NotNull] Func <JsonValue, T> instantiator) { if (response == null) { throw new ArgumentNullException(nameof(response)); } if (instantiator == null) { throw new ArgumentNullException(nameof(instantiator)); } var json = await response.ReadAsStringAsync().ConfigureAwait(false); return(instantiator(MeteorJson.Parse(json))); }
public void MeteorJsonPerformanceTest() { var cs = ""; for (int i = 0; i < LoopCount; i++) { foreach (var elements in TweetSamples.GetStreamSampleElements()) { var parsed = MeteorJson.Parse(elements); if (parsed.ContainsKey("text") && parsed.ContainsKey("user") && parsed["user"].ContainsKey("screen_name")) { cs = "@" + parsed["user"]["screen_name"].AsString() + ": " + parsed["text"].AsString(); } } } // Trace.WriteLine(cs); }
public void MeteorJsonDecodeTest() { try { foreach (var elements in TweetSamples.GetStreamSampleElements()) { // Trace.WriteLine(MeteorJson.Parse(elements).ToString()); Debug.WriteLine("{0}", MeteorJson.Parse(elements).ToString()); Debug.WriteLine("{0}", SafeMeteorJson.Parse(elements).ToString()); } } catch (JsonParseException ex) { Debug.WriteLine(ex.ToString()); throw; } }
private static async Task <IEnumerable <T> > ReadAsCollectionAsync <T>( [NotNull] HttpResponseMessage response, [NotNull] Func <JsonValue, T> factory) { if (response == null) { throw new ArgumentNullException(nameof(response)); } if (factory == null) { throw new ArgumentNullException(nameof(factory)); } var json = await response.ReadAsStringAsync().ConfigureAwait(false); var parsed = MeteorJson.Parse(json); return(parsed.AsArrayOrNull()?.Select(factory) ?? Enumerable.Empty <T>()); }
public static async Task <IEnumerable <TwitterStatus> > ReadAsStatusCollectionAsync( [NotNull] HttpResponseMessage response) { if (response == null) { throw new ArgumentNullException(nameof(response)); } var json = await response.ReadAsStringAsync().ConfigureAwait(false); var parsed = MeteorJson.Parse(json); if (parsed.ContainsKey("statuses")) { parsed = parsed["statuses"]; } return(parsed.AsArrayOrNull()?.Select(status => new TwitterStatus(status)) ?? Enumerable.Empty <TwitterStatus>()); }
public static async Task <IApiResult <long?> > GetMyRetweetIdOfStatusAsync( [NotNull] this IApiAccessor accessor, long id, CancellationToken cancellationToken) { if (accessor == null) { throw new ArgumentNullException(nameof(accessor)); } var param = new Dictionary <string, object> { { "id", id }, { "include_my_retweet", true } }; return(await accessor.GetAsync("statuses/show.json", param, async resp => { var json = await resp.ReadAsStringAsync().ConfigureAwait(false); var graph = MeteorJson.Parse(json); return graph.ContainsKey("current_user_retweet") ? graph["current_user_retweet"]["id_str"].AsString().ParseLong() : (long?)null; }, cancellationToken).ConfigureAwait(false)); }
public void MeteorJsonNumericBehaviorTest() { Assert.AreEqual(MeteorJson.Parse("1234567890e0").Equals(1234567890e0), true); Assert.AreEqual(MeteorJson.Parse("1.2345").Equals(1.2345), true); }