Public feed #723140

atsushieno

public text v1 · immutable
Raw Edit
·published 2007-10-02 15:31 UTC
rendered paste body
        public Statuses GetTimeline(DateTime since)
        {
            try
            {
                String responseBody = GET(String.Format("/statuses/friends_timeline.xml?since={0}", Utility.UrlEncode(since.ToUniversalTime().ToString("r"))));

                Statuses statuses;
                if (NilClasses.CanDeserialize(responseBody))
                {
                    statuses = new Statuses();
                    statuses.Status = new Status[0];
                }
                else
                {
                    statuses = Statuses.Serializer.Deserialize(new StringReader(responseBody)) as Statuses;
                    if (statuses == null || statuses.Status == null)
                    {
                        statuses = new Statuses();
                        statuses.Status = new Status[0];
                    }
                }

                responseBody = GET("/statuses/replies.xml");
                if (!NilClasses.CanDeserialize(responseBody))
                {
                    Statuses replies = Statuses.Serializer.Deserialize(new StringReader(responseBody)) as Statuses;
                    if (statuses != null && statuses.Status != null)
                    {
                        List<Status> merged = new List<Status>();
                        merged.AddRange(statuses.Status);
                        // Add only newer items than 'since' (it does not work
                        // for the first query, but well, we likely ignore
                        // those first results ...)
                        foreach (Status s in replies.Status)
                            if (s.CreatedAt > since)
                                merged.Add(s);
                        statuses.Status = merged.ToArray();
                    }
                }

                return statuses;
            }

            catch (WebException we)
            {
                throw;
            }
            catch (InvalidOperationException ioe)
            {
                // XmlSerializer
                throw new TwitterServiceException(ioe);
            }
            catch (XmlException xe)
            {
                throw new TwitterServiceException(xe);
            }
            catch (IOException ie)
            {
                throw new TwitterServiceException(ie);
            }
        }