3

私はドキュメントを読み、さまざまなEventQueryパラメーターで何日も遊んでいます。設定した公開カレンダーからイベントを取得するために、Googleの.net APIでC#.NETを使用しています。APIからイベントを取得することはできますが、日付ごとに次の今後のイベントを取得することはできません。私のカレンダーには、繰り返しイベントとワンショットイベントが混在しています。リクエストURIで直接クエリパラメータ文字列を使用するためにインターネットで何かを読んだことがありますが、.netapi構造で使用すると正しく機能しないようです。これが私が現在私のベースとして持っているものです:

CalendarService myService = new CalendarService("testGoogleCalendar-1");
EventQuery myQuery = new EventQuery();
myQuery.Uri = new Uri(CalendarURI);
myQuery.NumberToRetrieve = NumberOfEvents;
EventFeed calFeed = myService.Query(myQuery);
foreach (AtomEntry entry in calFeed.Entries)
{
    LiteralControl test = new LiteralControl("<p><b>" + entry.Title.Text + "</b></p>");
    this.Controls.Add(test);
}            

EventQueryのメンバーであるStartDate、StartTime、EndTime、SortOrder、FutureEventsで遊んでみました。さらに、CalendarURIローカルメンバーに「?orderby=starttime」を追加してみました。

apiクエリは、イベントが発生するときではなく、カレンダーでイベントを作成したときのイベントの公開日の順序を返すようです。

また、AtomEntryオブジェクトからイベントの日付と時刻だけを取得しようとしているので、自分で並べ替えて、自分のコントロールのタイトルでフォーマットできますが、表示されるのはAtomEntryのContent.Contentだけです。私が本当に欲しくない他のもの。日付を取得できるように、このためのAtomEntryのDateTimeメンバーはありますか?

これは本当に今私を混乱させているので、どんな助けもありがたいです。

4

7 に答える 7

4

.NETのGDataカレンダーAPIは使用していませんが、Javaではかなり慣れています。イベントの開始時間は、イベントの種類によって異なります。再発イベント自体には開始時刻はありませんが、「単一の」イベントには実際には複数回ある場合があります。これらは<gd:when>要素として保存されます-それはあなたが探す必要があるものです。

orderby=starttimeしかし、実際には機能するはずです。WireSharkまたは同様のものを使用して、正確なクエリが送信され、正確な結果が返されることを確認して、問題を引き起こしているAPIの何かではないことを確認することは価値があるかもしれません。特に、Uriプロパティでそれを使用するのはそうではない可能性があります。何らかの理由でサポートされています...

編集:設定してみましたか

query.ExtraParameters = "orderby=starttime";

?それはおそらくそれを最終的なクエリに入れる最も安全な方法です...

于 2009-06-26T16:30:21.633 に答える
4
 myQuery.ExtraParameters = "orderby=starttime&sortorder=ascending";

チャームのように機能します!

于 2009-08-20T22:37:42.797 に答える
1

OPには遅れるかもしれませんが、結果を並べ替えるこのプロパティを見つけました。それは多分誰かを助けるかもしれません;)

var query = new EventQuery(FEED_URL);    
query.SortOrder = CalendarSortOrder.ascending;
于 2011-12-06T10:55:28.887 に答える
0

これは、カレンダーAPIのGoogleドキュメントにありました。

EventQuery myQuery = new EventQuery(feedUrl);
myQuery.StartTime = new DateTime(2007, 1, 5);
myQuery.EndTime = new DateTime(2007, 1, 7);

EventFeed myResultsFeed = myService.Query(myQuery);

あなたはここでそれについてもっと読むことができます。

于 2009-06-26T16:18:25.860 に答える
0

日付を取得するために、Linqクエリを使用してこのようなことを行いました。

public static IEnumerable<EventDto> FindTopEvent(this AtomEntryCollection items, int cnt)
{
    return (from  item in items.OfType<EventEntry>()
            select new EventDto
            {
                Url = item.FeedUri,
                Title = item.Title.Text,
                Date = item.Times[0].StartTime.ToShortDateString()
            }).Take(cnt);
}

定期的なイベントがある場合は、次のようなことを検討する必要があります。

Date = (item.Times.Count > 0) ? item.Times[0].StartTime.ToShortDateString() : ""

また、SingleEventプロパティをに設定EventQueryするtrueと役立ちます。

于 2009-09-30T03:24:57.847 に答える
0
EventQuery query = new EventQuery();
query.Uri = new Uri("https://www.google.com/calendar/feeds/" + this.Service.Credentials.Username + "/private/full");
query.ExtraParameters = "orderby=starttime&sortorder=ascending";
query.SingleEvents = true;
query.StartTime = DateTime.Now;
query.EndTime = DateTime.Now.AddDays(7.0);

EventFeed calFeed = this.Service.Query(query);

List<SyndicationItem> items = new List<SyndicationItem>();
foreach (var entry in calFeed.Entries)
{
   EventEntry eventEntry = entry as Google.GData.Calendar.EventEntry;
   if (eventEntry != null)
   {
      if (eventEntry.Times.Count != 0)
      {
         DateTime dt = eventEntry.Times[0].StartTime;
    }
}

私のために働いた。

于 2010-12-19T19:52:23.210 に答える
0

キャンセルされたイベントが発生しないようにすることもできます。これは、再発イベントの最初の発生のみを削除し、その後、シーケンス内の残りのイベントを削除した場合に発生する可能性があります。削除したシーケンスの残りのイベントは実際には削除されておらず、ステータスは舞台裏でキャンセルされるように設定されていました。

コードでこれらのイベントを読み取らない唯一の方法は、EventEntryのStatusプロパティを確認することです。

于 2011-10-13T15:16:46.307 に答える