Google Calendar Script для синхронизации всех календарей домена с внешней базой данных - PullRequest
1 голос
/ 27 апреля 2011

У нас есть приложения Google для нашего домена (образование). В нашей базе данных студентов мы располагаем всей информацией о классе.

Мы хотели бы написать процесс синхронизации, который принудительно синхронизирует все календари преподавателей и студентов с календарем Google. Все это кажется достаточно простым ... минус все "что если", но это займет время, чтобы выяснить.

Я сейчас бью стену, когда пытаюсь решить, как пройти аутентификацию в Google. Поскольку существуют ограничения на количество разговоров, которые может выполнять один пользователь в день, у меня не может быть одной учетной записи администратора, отвечающей за синхронизацию всех пользователей.

Может кто-нибудь сказать мне, какое направление аутентификации я должен использовать с этим? Мне не нужны пользователи для входа в систему, мне просто нужно писать во все их календари. Я слышал упоминания о двухстороннем OAuth, но я не совсем понимаю, какой именно правильный ответ, и мне действительно нужны некоторые рекомендации по поводу того, что использовать.

Большое спасибо.

1 Ответ

0 голосов
/ 27 апреля 2011

Вот некоторые фрагменты кода, которые я использовал для аналогичного проекта. Я использовал google api и .net framework, что значительно облегчило работу с OAuth. Эти фрагменты в Visual Basic

Imports Google.GData
Imports Google.GData.Client
Imports Google.GData.Calendar

.....Various Property Fields for the class go here.....

Public Sub AddEvent()
    Try
        Dim theEvent As New EventEntry
        Dim theCalendarService As CalendarService = New CalendarService(FProgID)
        Dim theTime As New Extensions.When(FEventStartTime, FEventEndTime)
        Dim theEntry As AtomEntry


        If FAllDay = True Then
            theTime.AllDay = True
        Else
            theTime.AllDay = False
        End If

        theEvent.Title.Text = FEventTitle
        theEvent.Times.Add(theTime)

        If Not FDescription = "" Then
            theEvent.Content.Content = FDescription
        End If
        If Not FEventLocation = "" Then
            Dim theLocation As New Extensions.Where
            theLocation.ValueString = FEventLocation
            theEvent.Locations.Add(theLocation)
        End If
        If Not FAuthor = "" Then
            Dim theAuthor As New AtomPerson
            theAuthor.Name = FAuthor
            theEvent.Authors.Add(theAuthor)
        End If

        theCalendarService.setUserCredentials(FstrEmail, FstrPassword)
        theEntry = theCalendarService.Insert(FURLNoCookie, theEvent)
        FStatus = "Event added successfully to Google Calendar"
    Catch ex As Exception
        FStatus = "Failed: Event was added to Job List, but not Google Calendar"
    End Try
End Sub

Итак, я просто использовал класс службы календаря, предоставляемый Google для .net Framework. FstrEmail - это просто адрес электронной почты, связанный с календарем, а FstrPassword - обычный пароль Google. FURLNoCookie на самом деле, где вы указываете, к какому календарю он идет. Это просто частный URL-адрес общего доступа к XML для календаря (полученный из настроек календаря> личный адрес). Когда вы впервые получите этот URL из календаря, он будет выглядеть примерно так

http://www.google.com/calendar/feeds/somebody%40gmail.com/private-188ba1932aa23d4a64ag712db232bfe8b/basic

Измените его так, чтобы он выглядел следующим образом

http://www.google.com/calendar/feeds/somebody%40gmail.com/private/full

Аналогичный процесс можно использовать для обновления и удаления записей. Я использую это для синхронизации электронной таблицы с несколькими календарями Google, и она отлично работает.

...