Скрипт календаря Google для синхронизации всех календарей домена с внешней базой данных

#oauth #google-api #google-calendar-api #google-authentication

#oauth #google-api #google-calendar-api #google-аутентификация

Вопрос:

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

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

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

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

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

Ответ №1:

Вот несколько фрагментов кода, которые я использовал для аналогичного проекта. Я использовал 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@gmail.com/private-188ba1932aa23d4a64ag712db232bfe8b/basic
  

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

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

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

Комментарии:

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

2. Я не сталкивался с какими-либо проблемами с этим. Однако мой никогда не тестировался при такой высокой нагрузке. Максимум, что я делаю, это сотню или около того в день.