Example #1
0
        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());
        }
Example #2
0
        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));
        }
Example #3
0
 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());
 }
Example #4
0
 /// <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));
     }
 }
Example #5
0
 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));
 }
Example #6
0
        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)));
        }
Example #7
0
        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);
        }
Example #8
0
 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;
     }
 }
Example #9
0
        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>());
        }
Example #10
0
        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>());
        }
Example #11
0
        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));
        }
Example #12
0
 public void MeteorJsonNumericBehaviorTest()
 {
     Assert.AreEqual(MeteorJson.Parse("1234567890e0").Equals(1234567890e0), true);
     Assert.AreEqual(MeteorJson.Parse("1.2345").Equals(1.2345), true);
 }