working with timelines statuses home_timeline example card twitter tweetsharp

with - twitter comments api



Problema de Tweetsharp al obtener el UserProfile y TimeLine (3)

Estamos utilizando la API TweetSharp (TweetSharp versión = 2.3.1 y Newtonsoft.Json versión = 5.0.6) para mostrar los Tweets de los usuarios en nuestra aplicación web. A continuación se muestra el código que estamos usando en nuestra aplicación asp.net mvc (C #):

var service = new TwitterService("ConsumerKey", "ConsumerKeySecret"); service.AuthenticateWith("TwitterToken", "TwitterTokenSecret"); TweetSharp.TwitterUser tuSelf = service.GetUserProfile(new GetUserProfileOptions() { IncludeEntities = false, SkipStatus = false }); if (tuSelf != null) { //Get the User Details } var tweets = service.ListTweetsOnUserTimeline(new ListTweetsOnUserTimelineOptions { Count = 5 });

Obtenemos la siguiente excepción al obtener el perfil de usuario:

System.OverflowException: Value was either too large or too small for an Int32. Generated: Wed, 30 Oct 2013 05:48:41 GMT System.OverflowException: Value was either too large or too small for an Int32. at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) at Newtonsoft.Json.JsonTextReader.ParseNumber() at Newtonsoft.Json.JsonTextReader.ParseValue() at Newtonsoft.Json.JsonTextReader.ReadInternal() at Newtonsoft.Json.JsonReader.ReadAsInt32Internal() at Newtonsoft.Json.JsonTextReader.ReadAsInt32() at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ReadForType(JsonReader reader, JsonContract contract, Boolean hasConverter) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent) at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType) at TweetSharp.SerializerBase.DeserializeJson(String content, Type type) at TweetSharp.JsonSerializer.DeserializeJson(String content, Type type) at TweetSharp.JsonSerializer.DeserializeSingle(String content, Type type) at TweetSharp.JsonSerializer.DeserializeContent(String content, Type type) at TweetSharp.JsonSerializer.Deserialize[T](RestResponseBase response) at Hammock.RestClient.DeserializeEntityBody[T](RestRequest request, RestResponse`1 response) at Hammock.RestClient.BuildResponseFromResult[T](RestRequest request, WebQuery query) at Hammock.RestClient.Request[T](RestRequest request) at TweetSharp.TwitterService.WithHammockImpl[T](RestRequest request) at TweetSharp.TwitterService.WithHammock[T](String path) at TweetSharp.TwitterService.WithHammock[T](String path, Object[] segments) at TweetSharp.TwitterService.GetUserProfile(GetUserProfileOptions options) at TweetApp.Web.Controllers.TwitterController.GetFollowersAndTweets(TwitterSettings twitterSettings) at TweetApp.Web.Controllers.TwitterController.ViewTwitter(Nullable`1 Id) at lambda_method(Closure , ControllerBase , Object[] ) at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41() at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33() at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<BeginInvokeActionMethodWithFilters>b__36(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<>c__DisplayClass2a.<BeginInvokeAction>b__20() at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) at System.Web.Mvc.Controller.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() at System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() at System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) at System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) at System.Web.Mvc.MvcHandler.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() at System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

Y la siguiente excepción al obtener los Tweets de la línea de tiempo:

Newtonsoft.Json.JsonSerializationException: Cannot deserialize the current JSON array (e.g. [1,2,3]) into type ''TweetSharp.TwitterStatus'' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly. To fix this error either change the JSON to a JSON object (e.g. {"name":"value"}) or change the deserialized type to an array or a type that implements a collection interface (e.g. ICollection, IList) like List<T> that can be deserialized from a JSON array. JsonArrayAttribute can also be added to the type to force it to deserialize from a JSON array. Path '''', line 1, position 1. Generated: Wed, 30 Oct 2013 04:45:03 GMT Newtonsoft.Json.JsonSerializationException: Cannot deserialize the current JSON array (e.g. [1,2,3]) into type ''TweetSharp.TwitterStatus'' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly. To fix this error either change the JSON to a JSON object (e.g. {"name":"value"}) or change the deserialized type to an array or a type that implements a collection interface (e.g. ICollection, IList) like List<T> that can be deserialized from a JSON array. JsonArrayAttribute can also be added to the type to force it to deserialize from a JSON array. Path '''', line 1, position 1. at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.EnsureArrayContract(JsonReader reader, Type objectType, JsonContract contract) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateList(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, Object existingValue, String id) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent) at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType) at TweetSharp.SerializerBase.DeserializeJson(String content, Type type) at TweetSharp.JsonSerializer.DeserializeJson(String content, Type type) at TweetSharp.JsonSerializer.AddDeserializedItem(String c, Type type, IList collection) at TweetSharp.JsonSerializer.DeserializeCollection(String content, Type type) at TweetSharp.JsonSerializer.DeserializeContent(String content, Type type) at TweetSharp.JsonSerializer.Deserialize[T](RestResponseBase response) at Hammock.RestClient.DeserializeEntityBody[T](RestRequest request, RestResponse`1 response) at Hammock.RestClient.BuildResponseFromResult[T](RestRequest request, WebQuery query) at Hammock.RestClient.Request[T](RestRequest request) at TweetSharp.TwitterService.WithHammockImpl[T](RestRequest request) at TweetSharp.TwitterService.WithHammock[T](String path) at TweetSharp.TwitterService.WithHammock[T](String path, Object[] segments) at TweetSharp.TwitterService.ListTweetsOnUserTimeline(ListTweetsOnUserTimelineOptions options)

No está sucediendo para todos los usuarios de Twitter. Sucede solo para unos pocos usuarios que tienen más tweets. Por favor, sugiera cómo manejar esto?


Estoy bastante seguro de que esto tiene que ver con la nueva longitud de identificación de usuario que Twitter usa para nuevas cuentas.

Tuve el mismo error al trabajar con una nueva cuenta de Twitter. También ocurre cuando se buscan cuentas antiguas si tienen tweets o menciones de cuentas nuevas.

Tweetsharp está usando números enteros para el user_id en algunos lugares que arrojan las excepciones.

Ve a github y descarga la última fuente. Se ha actualizado para manejar los nuevos ID de usuario. (Necesitarás compilarlo tú mismo)

Robar


Twitter ha cambiado su id de Int32 a Int64 y TweetSharp no se ha actualizado para manejar esto.

Arreglar:

  1. En el archivo packages.config , elimine la referencia a TweetSharp.
  2. Abra la consola del administrador de paquetes
  3. PM> Install-Package TweetSharp-Unofficial

Y bum. Deberias hacer eso.


Tengo este problema, acabo de actualizar el paquete JSON.Net y está arreglado.

Vaya a Exp. De solución -> Referencias, haga clic derecho -> Administrar paquete Nuget -> Ver actualizaciones y actualizar el paquete Json.net.