# data[].attributes.body
디지털 교과서를 활용한 수업 + 마이크로비트 실습

# data[].attributes.body
마이크로비트를 활용한 실습과 구글드라이브에 제출

# data[].attributes.attachment_link.description
Get access to files anywhere through secure cloud storage and file backup for your photos, videos, files and more with Google Drive.

# data[].attributes.headline
코랩을 활용한 수행평가

# data[].attributes.subject
코랩을 활용한 수행평가

# data[].attributes.headline
디지털 교과서를 활용한 알고리즘 수업

# data[].attributes.subject
디지털 교과서를 활용한 알고리즘 수업

# data[].attributes.headline
코랩을 활용한 수행평가 제출

# data[].attributes.subject
코랩을 활용한 수행평가 제출

# data[].attributes.attachment_link.description
Get access to files anywhere through secure cloud storage and file backup for your photos, videos, files and more with Google Drive.

# data[].attributes.headline
제니마이를 활용한 유튜브 탐색

# data[].attributes.subject
제니마이를 활용한 유튜브 탐색

# data[].attributes.body
@YouTube 파이썬 공부를 하기를 원해. 최근 영상 중 기초가 약한 여고생이 찾기 좋은 영상을 찾아 5개만 나타내줘

# data[].attributes.attachment_link.description
Gemini is your personal, proactive, and powerful AI assistant from Google. Try it for free to help with work, school, and at home for whatever inspires you.

# data[].attributes.headline
제미나이를 활용한 구글지도 탐색

# data[].attributes.subject
제미나이를 활용한 구글지도 탐색

# data[].attributes.body
@Google 지도 나는 베트남의 나트랑을 여행갈거야. 숙소로 좋은 곳을 5군데 추천해줘. 가격과 깨끗함, 조식이 중요해

# data[].attributes.attachment_link.description
Gemini is your personal, proactive, and powerful AI assistant from Google. Try it for free to help with work, school, and at home for whatever inspires you.

# data[].attributes.headline
디지털 역량 강화 주간

# data[].attributes.subject
디지털 역량 강화 주간

# data[].attributes.headline
api 활용 생기부 작성

# data[].attributes.subject
api 활용 생기부 작성

# data[].attributes.attachment_link.title
ChatGPT API를 활용한 스프레드시트 이용 생기부 작성

# data[].attributes.body
const MODEL_ID = PropertiesService.getScriptProperties().getProperty("MODEL_ID") || "gpt-4o-2024-11-20";


function GPT(prompt, cellData) {
  const apiKey = PropertiesService.getScriptProperties().getProperty("API_KEY");
  if (!apiKey) {
    return "Error: API key is missing. Please set it in the Script Properties.";
  }
  if (!prompt || !cellData) {
    return "Error: Both prompt and cell data are required.";
  }


  const fullPrompt = `
  당신은 대한민국 정보 교사의 입장에서 생활기록부를 작성하는 역할을 맡고 있습니다.
  주어진 관찰 키워드를 기반으로 500자 이상의 생활기록부 문단을 작성하세요.
  - 문장은 "~함", "~임", "~음"으로 끝나야 합니다.
  - 학생의 성격, 학습 태도, 활동에 대한 내용을 포함하세요.
  - 학생의 수업 소감을 바탕으로 기록을 작성하세요.


  관찰 내용 키워드: ${cellData}
  예시1: 텍스트 프로그래밍 언어의 개발 환경과 문법적 특성을 이해하기 위해 기본 개념을 학습하고 코드 리뷰를 성실하게 수행함. 자료형과 연산자의 개념을 이해하고 코드에 적용하는 등력이 탁월함.
  예시2: 매시간 수업에 적극적으로 참여하며 알고리즘을 이해하고 적용할 수 있도록 노력하는 모습이 돋보임. 한 번에 해결하지 못한 문제의 코드를 수정하고 보완하면서 본인의 것으로 만들고자 하는 끈기를 보임.
  예시3: 텍스트 프로그래밍을 통해 함수는 동일한 명령을 반복적으로 사용하거나 프로그램의 전체 구조와 실행 흐름을 파악할 수 있도록 만든 작은 프로그램으로 파악하고 프로그래밍에 수학적 사고력과 지식이 필요함을 인식하며 내재된 높은 지적 호기심을 발휘하여 문제를 적극적으로 해결함.
  `;


  const apiUrl = "https://api.openai.com/v1/chat/completions";
  const data = {
    model: MODEL_ID,
    messages: [
      { role: "system", content: "Be concise." },
      { role: "user", content: fullPrompt }
    ],
    max_tokens: 450
  };


  const headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer " + apiKey
  };


  const options = {
    method: "POST",
    headers: headers,
    payload: JSON.stringify(data)
  };


  try {
    const response = UrlFetchApp.fetch(apiUrl, options);
    const result = JSON.parse(response.getContentText());
    if (!result.choices || result.choices.length === 0) {
      return "Error: No response from the model.";
    }
    return result.choices[0].message.content.trim();
  } catch (error) {
    if (error.message.includes("429")) {
      return "Error: Rate limit exceeded. Please try again later.";
    } else if (error.message.includes("401")) {
      return "Error: Unauthorized. Check your API key.";
    }
    return `Error: ${error.message}`;
  }
}

# data[].attributes.attachment_link.title
[학번이름]지속가능한 미래를 위한 데이터 분석과 가치 발견하기_양식(학생용)_최종의 사본