搜索与Google Calendar API查询中的单个字符不匹配?

时间:2015-09-06 10:44:01

标签: python google-api google-calendar-api

在我的Google日历中,我有一个名为&#34的活动,那是什么? 。没什么"如果我运行以下查询,则可以正确找到该事件:

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

但是,如果我试图查找完整的标题,包括单引号,则找不到:

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

我很确定这不是字符串中包含错误字符的问题,因为我尝试从日历本身和第一个(工作)请求的结果中复制整个标题,但无济于事。我应该做什么逃避或编码?

更新:

问题不仅限于单引号。一个名为" aa.bb.cc"的事件发现没有问题,因为" aa.b.cc"。然而," a.b.cc"找不到。没有圆点也是如此; " aa b cc"找到了,但不是" a b cc"。单字符似乎是某种问题,但我还不知道它究竟发生的时间......

2 个答案:

答案 0 :(得分: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."

答案 1 :(得分: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找不到它。