Microsoft Bot Framework, Luis 및 Google Calendar를 사용하여 LUIS가 자신의 밥을 결정하게 만들고 싶습니다.

gloops AdventCalendar 12일차



gloops advent calendar 12 일째입니다
생일입니다
집에 빨리 돌아와 케이크를 먹을 예정이 이런 시간이 되었습니다.

11일째는 @m_nabeta씨의 「지금까지 세상에 보내 버리고 나중에 맹성 한 파이썬 패턴」이었습니다.
좋아요가 많이 붙었습니다.

저는 웹 애플리케이션 엔지니어인 Mgr을 하고 있고 평소 코드를 만질 기회가 적고,
다이어트를 하고 있으므로, 양쪽 모두를 채워 주는 취미 어플리케이션 작성하고 있습니다.
아직 미완성이므로, 각각의 API 제휴 코드를 실어 드리겠습니다.
※ 아직 작성 중입니다. 업데이트에 따라 업데이트하겠습니다.

Google Calendar API



C#에서 특정 사용자의 GoogleCalendar 정보를 검색하려고했습니다.

GetGoogleAsync

public  async Task<List<Calendar>> GetGoogleAsync(DateTime Today)
{
  var CalendarList = new List<Calendar>();
  try
  {
    const string calendarId = "取得したいカレンダーのID";
    const string apiKey = "GoogleCalendarAPIで発行したAPIKey";
    const string apiUrl = "https://www.googleapis.com/calendar/v3/calendars/" + calendarId + "/events?key=" + apiKey + "&singleEvents=true";

    //スケジュールstartTime順 上限15件
    var paramList = "orderBy=startTime&maxResults=15";
    //日付のスタート設定
    paramList += "&timeMin=" + Today.ToString("yyyy-MM-dd") + "T00:00:00%2b0900";
    //日付のエンド設定
    paramList += "&timeMax=" + Today.AddDays(1).ToString("yyyy-MM-dd") + "T00:00:00%2b0900";
    var url = apiUrl + "&" + paramList;

    var httpClient = new HttpClient();
    var clientResponse = await httpClient.GetAsync(url);
    //APIのデータを成形
    CalendarList.AddRange(JsonConvert.DeserializeObject<GoogleCalendarList>(await clientResponse.Content.ReadAsStringAsync())
                    .items.Select(item => new Calendar
                {
                    summary = item.summary,
                    start = item.start.dateTime == null ? new DateTime(1901, 1, 1) : DateTime.Parse(item.start.dateTime),
                    end = item.end.dateTime == null ? new DateTime(1901, 1, 1) : DateTime.Parse(item.end.dateTime)
                }));
    }
    catch (AggregateException ex)
    {
    
    }
            return CalendarList;

}

public class GoogleCalendarList
{
        public GoogleCalendar[] items { get; set; }
}

public class GoogleCalendar
{
        public string summary { get; set; }
        public start start { get; set; }
        public end end { get; set; }
}

public class start
{
        public string dateTime { get; set; }
}

public class end
{
        public string dateTime { get; set; }
}

public class Calendar
{
        public string summary { get; set; }
        public DateTime start { get; set; }

        public DateTime end { get; set; }
}

참고 사이트) htp : // bg. 호 wdy ぃ 케 s. jp/엔트리/20120806/1344265078

BotFramework와 LUIS 간의 협력



야간 캘린더의 데이터를 취득하여 회식인지 여부 판정

Post

public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
{
  if (activity.Type == ActivityTypes.Message || activity.Text.Contains("夜"))
     var text = activity.Text;
     var calendarList = await GetGoogleAsync();
     var nightSchedule = "なし";
     // 19時半以降の予定取得
     var night = calendarList.FirstOrDefault(
                    x => x.start >= new DateTime(Today.Year, Today.Month, Today.Day, 19, 30, 0));
     if (night?.summary != null)
        nightSchedule = night.summary;
     var baseurl = $"https://api.projectoxford.ai/luis/v2.0/apps/AppのId?subscription-key=AppのKey&q=";
     var url = $"{baseurl + text}&verbose=true";
     var httpClient = new HttpClient();
     var clientResponse = await httpClient.GetAsync(url);
     var content = await clientResponse.Content.ReadAsStringAsync();

     // メッセージを返答
     ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl));
     Activity reply = activity.CreateReply(content);
     await connector.Conversations.ReplyToActivityAsync(reply);
  }
   var response = Request.CreateResponse(HttpStatusCode.OK);
   return response;
}

참고 사이트) htps : // 찢어졌다. jp/dml/ぅ이 s_1

LUIS 측 데이터 상황





LUIS 측에 Google 캘린더 데이터를 보낸 응답 데이터



꽤 정확한 응답을 돌려줍니다.
송년회가 술집이 되거나 체육관이 왠지 술자리로 판정되기 때문에,
앞으로도 LUIS에게 학습시키고 싶습니다.




향후 구현 예정



・낮의 google 캘린더 데이터와 밤의 회식 상황을 가미해, 점심・밤 밥을 결정해 준다

요약



LUIS를 처음 사용해 보고, 육성시키고 싶다는 애착이 나왔습니다.
향후 교육을 계속해 실시해, 나의 컨디션 관리를 관리해 주는 아이에게 키워 가고 싶습니다.

좋은 웹페이지 즐겨찾기