2015-09-06 32 views
1

在我的Google日曆中,我有一個名爲「What's that?Nothing」的活動。如果我運行下面的查詢,該事件被正確地發現:搜索與Google日曆API查詢中的單個字符不匹配?

eventsResult = service.events().list(
    calendarId=CALENDAR_ID, 
    q="Nothing.").execute() 

但是,如果我試圖尋找完整的標題,包括單引號,也沒有發現:

eventsResult = service.events().list(
    calendarId=CALENDAR_ID, 
    q="What's that? Nothing.").execute() 

我很確定這不是字符串中出現錯誤字符的問題,因爲我試圖從日曆本身和第一個(工作)請求的結果中複製整個標題,但無濟於事。有沒有我應該做的轉義或編碼?

UPDATE:

的問題不僅限於單引號。名爲「aa.bb.cc」的事件沒有問題,「aa.b.cc」也是如此。但是,找不到「a.b.cc」。沒有點也是一樣;發現「aa b cc」,但不是「a b cc」。這似乎是某種具有單字符的問題,但是當它到底發生時我還不知道......

+0

您是否嘗試用\ \轉義單引號?或\\我不記得這是我做的 – DaImTo

+0

;它沒有幫助。無論如何,正如我寫的,問題也出現在點或空格... –

回答

1

嘗試發送報價像字符串的一部分:

eventsResult = service.events().list(
    calendarId=CALENDAR_ID, 
    q='"Nothing."').execute() 

查詢通常搜索由空格 q = term1 term2 term3分隔的術語,如here所述。

當它尋找q = aa b cc時,第一項是'aa'。搜索可能更容易,因爲參數'aa'不會有太多重複。但是讓它搜索q = a b cc,使其找到包含a和b的所有元素有點含糊。

在我共享的文檔中,還提到要進行精確的搜索查詢,您必須使用引號:q =「a b cc」。通過這種方式,整個字符串被視爲一個術語。

我在api explorer中嘗試了這種方式,並能夠找到該事件。沒有引號(正如你所提到的),api找不到它。

+0

謝謝。它適用於「ab cc」的例子,但是,由於我還不明白的原因,不是因爲「這是什麼?沒有。」...... –

4
str = "\"What's that? Nothing\".\"" 
eventsResult = service.events().list(calendarId='primary', q=str).execute()   

events = eventsResult.get('items', []) 

if not events: 
    print('No upcoming events found.') 
for event in events: 
    start = event['start'].get('dateTime', event['start'].get('date')) 
    print(start, event['summary']) 

請參閱「str」。這是你想要的。此輸出

Finding the calendar events 
2015-09-16T13:30:00+03:00 "What's that? Nothing." 
+0

謝謝,這是行得通的(儘管我仍然不知道爲什麼non-確切的查詢不)。但是,你能否解釋爲什麼我需要另一個逃脫的引號?我以爲''「那是什麼?沒有任何東西。「」''就足夠了...... –

+1

@P_S另一個逃脫的引文對谷歌來說,那個符號「。」(句號)是搜索的義務。 –

+0

啊,我明白了。是否有任何帶有語法的文檔,需要以這種方式逃脫的字符列表等? –