#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. Я не сталкивался с какими-либо проблемами с этим. Однако мой никогда не тестировался при такой высокой нагрузке. Максимум, что я делаю, это сотню или около того в день.