python office365创建会议活动

时间:2016-08-02 19:06:15

标签: python office365

我在下面有这个python代码来创建一个会议事件,它正在运行。我计划将此脚本与Web表单子目录结合使用,用户可以在其中输入主题,与会者和会议日期/时间等基本信息,然后Python脚本将根据Web表单中提交的信息创建会议事件。我没有问题要完成,但问题是会议的时区。

正如您所看到的,Python脚本需要开始/结束时间为“2016-08-03T15:00:00-07:00”(-07:00是PDT时间)。但是,Web表单不知道当前用户的时区(用户可能在西部,山区,中部或东部时区)。要弄清楚时区是-7(PDT),-8(PST),-6(CT)太复杂了)......

有没有办法根据用户登录查询创建会议的人的当前时区设置?然后将该时区转换为数字(PDT为-7,PST为-8,-6 CT ......)...所以“StartTimeZone”和“EndTimeZone”有正确的时间?

# Set the request parameters
url = 'https://outlook.office365.com/api/v1.0/me/events?$Select=Start,End'
user = 'user1@domain.com'

pwd = getpass.getpass('Please enter your AD password: ')


# Create JSON payload
data = {
  "Subject": "Testing Outlock Event",
  "Body": {
    "ContentType": "HTML",
    "Content": "Test Content"
  },
  "Start": "2016-08-03T15:00:00-07:00",
  "StartTimeZone": "Pacific Standard Time",
  "End": "2016-08-03T16:00:00-07:00",
  "EndTimeZone": "Pacific Standard Time",
      "Attendees": [
    {

      "EmailAddress": {
        "Address": "attendee1@domain.com",
        "Name": "User2"
      },
       "Type": "Required"  },

       {
      "EmailAddress": {
        "Address": "attendee2@domain.com",
        "Name": "User3"
      },
       "Type": "Optional"  }
  ]
}

json_payload = json.dumps(data)

# Build the HTTP request
opener = urllib2.build_opener(urllib2.HTTPHandler)
request = urllib2.Request(url, data=json_payload)
auth = base64.encodestring('%s:%s' % (user, pwd)).replace('\n', '')
request.add_header('Authorization', 'Basic %s' % auth)
request.add_header('Content-Type', 'application/json')
request.add_header('Accept', 'application/json')
request.get_method = lambda: 'POST'
# Perform the request
result = opener.open(request)

1 个答案:

答案 0 :(得分:1)

您可以在客户端上使用JavaScript获取用户的UTC时区偏移量,然后在表单提交期间将此值传递给服务器。请参阅this回答。

更新:

假设您的用户的区域设置已正确设置,getTimezoneOffset()将返回当前区域设置(source)与UTC的时区偏移(以分钟为单位)。你不必担心夏令时。使用UTC时间作为转换的基础。获得偏移量后,使用此偏移量将用户指定的会议时间转换为UTC,然后将UTC时间转换为服务器上使用的时区。

更新2:

我意识到事实上你应该关心夏令时,因为getTimezoneOffset()会返回当前偏移量,而用户可以在夏令时之后的某个地方创建事件将更改此偏移量,转换将变得不准确。因此,正确的解决方案不是直接使用当前的UTC偏移量,而是使用它来获取您将用于转换的实际时区。 jsTimezoneDetect库可以为您完成此操作。