【问题标题】:Recent modification to Twitter API?最近对 Twitter API 的修改?
【发布时间】:2011-01-21 20:20:15
【问题描述】:

我编写了一个非常简单的 C# 应用程序来在 Windows 机器之间发送推文。为此,每个端点(即这个使用 TweetSharp 库的 C#.NET 桌面应用程序)都有一个计时器,当 Elapsed 事件触发时,所有消息都通过 GetDirectMessages() 调用收集在一起,然后这些消息由端点。

我的问题是我在两周前的几个小时内构建了这个,一切正常。我也把它掸掉并在一周前执行,没问题。现在,我今天打破它,我得到了一个非常奇怪的异常(参见异常部分),它起源于“IEnumerable directMessage = service.ListDirectMessagesReceived();”这一行。 (参见来源部分)。我的问题是,由于我的代码没有改变,API 是否有可能(我知道我知道极不可能)。 StackO 的正直博学的成员有什么想法吗?

顺便说一句,我已经检查并且我的 ConsumerKey/Secret 有效,我的身份验证部分使用的缓存 OAuth 访问令牌也是有效的。这很奇怪,因为我可以拉出我的关注者列表,检查我的速率限制统计数据等。而且我的 NewtonSoft、Hammoch 和 TweetSharp 参考还没有更新/更改。

谢谢。

[来源]

    private struct message
    {
        public long id;
        public string text;

        public message(long i, string t)
        {
            id = i;
            text = t;
        }
    }    

    private MessageEngine
    {
        /* Do auth -- excised for obvious reasons */

        Timer timer = new Timer();
        timer.Interval = 15000;
        timer.Tick += new EventHandler(timer_Tick);
        timer.Start();
    }    

    private List<message> GetDirectMessages()
    {
        try
        {
            //Declarations:
            message message = new message();
            List<message> messages = new List<message>();
/*line 344*/IEnumerable<TwitterDirectMessage> directMessages = service.ListDirectMessagesReceived();

            //Fetch all current direct message:
            foreach (TwitterDirectMessage directMessage in directMessages)
            {
                //Store each message into a list, in reverse older:
                message = new message(directMessage.Id, directMessage.Text);
                messages.Insert(0, message);
            }

            return messages;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
            return null;
        }
    }

    private void timer_Tick(object sender, EventArgs e)
    {
        try
        {
            List<message> messages = GetDirectMessages();
            LocalExecute(messages);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }

    private bool LocalExecute(List<message> messages)
    {
        /* process messages */
    }

[例外]

Newtonsoft.Json.JsonSerializationException: Cannot deserialize JSON array into type 'TweetSharp.TwitterDirectMessage'.
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.EnsureArrayContract(Type objectType, JsonContract contract) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs:line 412
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateList(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, Object existingValue, String reference) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs:line 432
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, Object existingValue) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs:line 222
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueNonProperty(JsonReader reader, Type objectType, JsonContract contract) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs:line 205
   at TweetSharp.Serialization.SerializerBase.DeserializeJson(String content, Type type) in C:\Users\Dimebrain\Desktop\Src\tweetsharp\src\vs2010\TweetSharp.Next\Serialization\SerializerBase.cs:line 60
   at TweetSharp.Serialization.JsonSerializer.AddDeserializedItem(String c, Type type, IList collection) in C:\Users\Dimebrain\Desktop\Src\tweetsharp\src\vs2010\TweetSharp.Next\Serialization\JsonSerializer.cs:line 131
   at TweetSharp.Serialization.JsonSerializer.DeserializeCollection[T](String content) in C:\Users\Dimebrain\Desktop\Src\tweetsharp\src\vs2010\TweetSharp.Next\Serialization\JsonSerializer.cs:line 90
   at TweetSharp.Serialization.JsonSerializer.Deserialize[T](String content) in C:\Users\Dimebrain\Desktop\Src\tweetsharp\src\vs2010\TweetSharp.Next\Serialization\JsonSerializer.cs:line 17
   at Hammock.RestClient.DeserializeEntityBody[T](RestBase request, RestResponse`1 response) in C:\Users\Dimebrain\Desktop\Src\hammock\src\net35\Hammock\RestClient.cs:line 2285
   at Hammock.RestClient.BuildResponseFromResult[T](RestBase request, WebQuery query) in C:\Users\Dimebrain\Desktop\Src\hammock\src\net35\Hammock\RestClient.cs:line 2212
   at Hammock.RestClient.Request[T](RestRequest request) in C:\Users\Dimebrain\Desktop\Src\hammock\src\net35\Hammock\RestClient.cs:line 107
   at TweetSharp.TwitterService.WithHammockImpl[T](RestRequest request) in C:\Users\Dimebrain\Desktop\Src\tweetsharp\src\vs2010\TweetSharp.Next\Service\TwitterService.cs:line 401
   at TweetSharp.TwitterService.WithHammock[T](String path) in C:\Users\Dimebrain\Desktop\Src\tweetsharp\src\vs2010\TweetSharp.Next\Service\TwitterService.cs:line 378
   at TweetSharp.TwitterService.WithHammock[T](String path, Object[] segments) in C:\Users\Dimebrain\Desktop\Src\tweetsharp\src\vs2010\TweetSharp.Next\Service\TwitterService.cs:line 383
   at TweetSharp_Test.Form1.GetDirectMessages() in C:\Users\kmarks2\Documents\Visual Studio 2008\Projects\TweetSharp_Test\TweetSharp_Test\Form1.cs:line 344

【问题讨论】:

  • 你能不能给我们看一下有用的 RAW Json

标签: c# api twitter tweetsharp


【解决方案1】:

正如我从堆栈跟踪中看到的那样,TweetSharp.TwitterDirectMessage 类架构与反序列化程序所期望的不同,可能是传递的 Json 数据与您上次检查时有所不同。

我还认为 Tweetsharp 有一些与此相关的问题。

当我在 codeplex 上检查变更集时,对使用 fluent 修复带有 ID 的直接消息进行了更改。

在这里查看。

http://tweetsharp.codeplex.com/SourceControl/changeset/changes/8bf46a5230bc

尝试下载新的TweetSharp v2.0.0.0 - Preview 9

【讨论】:

  • 您能否向我们展示 RAW Json,这对于确定问题的确切来源几乎没有帮助...
  • 太棒了。这成功了。仍然奇怪的是,我使用的 2 周“损坏”的库确实工作了一点。
  • 谢谢...尝试更新您的库/dll...这里的变化太快...;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-16
相关资源
最近更新 更多