Обновить событие Google в календаре С#

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

<tr style = "display:none;">
    <td width = "300" style = "width:225.0pt; background:#313131; padding:0in 0in 0in 0in; height:30.0pt; border-radius:3px">
        <p class = "x_MsoNormal" align = "center" style = "text-align:center">
            <span style = "font-family:Arial,sans-serif; color:white">
                <a href = "@Model.GoogleLink" target = "_blank" rel = "noopener noreferrer" data-auth = "NotApplicable" data-linkindex = "10">
                    <span style = "color:white; text-decoration:none">Add to Google Calendar</span>
                </a>
            </span>
        </p>
    </td>
</tr>

А это моя ссылка в гугле: https://www.google.com/calendar/event?action=TEMPLATE&text=Piercing+Studio+Appointment+(Ossington+Piercing+Studio)&dates=20230716T202000Z/20230716T204000Z&location=64+Ossington+Avenue,+Toronto,+Ontario,+M 6J2Y7&details=64+Ossington+Avenue,+Toronto,+Ontario,+M6J2Y7%0A%0AView/Change+Appointment:%0Ahttps://app.acuityscheduling.com/schedule.php?owner%3D28316543%26id%255B%255D%3D87dc83cf48dc 52001b1dd5f79ce9b0ef%26action%3Dappt%0A%0A(созданный+by+Acuity+Scheduling)%0AAcuityID%3D1071322728%0AGoogle&sf=true&output=xml&pli=1

Есть ли способ обновить событие, если оно уже есть в календаре?

PS: я не использую google-calendar-api, но решение с ним также будет оценено.

В веб-приложении обновление событий Календаря Google без использования Google API невозможно. API Google предоставляет необходимый доступ и разрешения для стороннего приложения для создания, чтения, обновления или удаления событий.

Corey Sutton 24.07.2023 20:54

Хорошо, я отредактировал свой исходный пост, чтобы приветствовать решения с API. Обратите внимание, что я НЕ знаю электронную почту пользователей. Они должны получить запрос на вход

MYA 24.07.2023 21:11

Понятно, я опубликую ответ, используя API.

Corey Sutton 24.07.2023 21:15

@yousufalvi - пожалуйста, рассмотрите возможность «проголосовать» и «принять» ответ Кори Саттона.

paulsm4 24.07.2023 21:29
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
4
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Для достижения функциональности обновления событий Календаря Google из веб-приложения рекомендуется использовать API Календаря Google вместе с проверкой подлинности OAuth 2.0. Этот метод предоставляет необходимый доступ и разрешения для стороннего приложения для создания, чтения, обновления или удаления событий в календаре пользователя. Обновление является ключевым словом здесь для вашего вопроса.

Ниже приведены шаги, необходимые для интеграции API Календаря Google для обновлений событий:

Настройте учетные данные Google API: начните с создания нового проекта в Google Developers Console. Включите API Календаря Google для этого проекта и создайте учетные данные идентификатора клиента OAuth 2.0 для своего веб-приложения. Эти учетные данные предоставят необходимый доступ для управления событиями в календарях пользователей.

Код на стороне клиента. Измените существующий HTML-код, включив в него соответствующий JavaScript и библиотеки для обработки вызовов Google API. Реализуйте аутентификацию OAuth 2.0, чтобы получить токен доступа после успешной аутентификации пользователя. Этот токен позволит вашему приложению взаимодействовать с Календарем Google пользователя.

Обновление события: когда пользователь нажимает кнопку «Добавить в Календарь Google», инициируйте процесс аутентификации OAuth 2.0 с помощью вашего кода JavaScript (здесь Google попросит их войти). Получив токен доступа, используйте его, чтобы сделать запрос PATCH к API Календаря Google, обновив сведения о конкретном событии в тексте запроса.

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

Обратите внимание, что во время этого процесса пользователи могут столкнуться с экраном согласия Google, на котором объясняются разрешения, запрашиваемые вашим приложением, включая доступ к их Календарю Google. Это стандартная часть потока OAuth, обеспечивающая прозрачность для пользователей, и я бы не стал об этом беспокоиться.

Использование Google Calendar API вместе с проверкой подлинности OAuth 2.0 предлагает более безопасный и надежный способ взаимодействия с календарями пользователей по сравнению с попыткой манипулировать событиями с помощью прямой ссылки в электронном письме. Для более глубокого понимания деталей реализации вы можете обратиться к официальной документации Google Calendar API.

Отличный ответ. У OP есть несколько проблем: 1) обновление существующего события Google Calendar (исходный вопрос), 2) запрос, существует ли существующее событие, 3) добавление нового события, если его нет, и 4) «Аутентификация» (для выполнения любого из вышеперечисленных). Он обязательно должен использовать .NET API, и ему необходимо зарегистрировать и настроить свое приложение, чтобы разрешить OAuth2. Вы рассмотрели все это :) ДОПОЛНИТЕЛЬНО: я бы посоветовал ОП рассмотреть Identity Framework Core

paulsm4 24.07.2023 21:26

Хотя ответ Кори Саттона представляет собой исчерпывающее руководство о том, как решить проблему, я предоставлю вам пример кода C#, который должен помочь вам обновить событие с помощью API Календаря Google:

public async Task UpdateCalendarEvent(string eventId, Google.Apis.Calendar.v3.Data.Event newEvent)
{
// Initialize the client
UserCredential credential;
using (var stream = new FileStream("credentials.json", FileMode.Open, FileAccess.Read))
{
    string credPath = "token.json";
    credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
        GoogleClientSecrets.Load(stream).Secrets,
        Scopes,
        "user",
        CancellationToken.None,
        new FileDataStore(credPath, true)).Result;
}

var service = new CalendarService(new BaseClientService.Initializer()
{
    HttpClientInitializer = credential,
    ApplicationName = ApplicationName,
});

// Fetch the existing event
Google.Apis.Calendar.v3.Data.Event existingEvent = await service.Events.Get("primary", eventId).ExecuteAsync();

// Update the necessary fields from the new event data
existingEvent.Summary = newEvent.Summary;
existingEvent.Location = newEvent.Location;
existingEvent.Description = newEvent.Description;
existingEvent.Start = newEvent.Start;
existingEvent.End = newEvent.End;

// Update the event in the calendar
var request = service.Events.Update(existingEvent, "primary", existingEvent.Id);
request.Execute();
}

Это упрощенная версия кода для обновления события Календаря Google с помощью API Календаря Google с C#. Вам необходимо заменить «credentials.json» и «token.json» правильными путями к файлу учетных данных OAuth 2.0 и файлу хранилища токенов соответственно. «основной» используется для обозначения основного календаря аутентифицированного пользователя. Также укажите Scopes и ApplicationName в соответствии с вашими требованиями.

Как упомянул Кори Саттон, вам нужно использовать OAuth 2.0 для аутентификации пользователя и получения его разрешения на доступ и изменение своего Календаря Google. Клиентские библиотеки Google API .NET предоставляют метод GoogleWebAuthorizationBroker.AuthorizeAsync для обработки процесса проверки подлинности. После получения необходимой авторизации вы можете использовать CalendarService для взаимодействия с календарем пользователя.

Метод service.Events.Get используется для получения существующего события. После обновления необходимых полей используется метод service.Events.Update для обновления события в календаре.

Другие вопросы по теме