쿠팡 어필리에이트 API를 사용하려면
판매금액 150,000원을 채워야한다.
나는 이미 채웠고, API는 아래와 같이 사용한다.
화면 구성 중 2번 화면을 설명해보겠다.
1. 쿠팡 API로 상품 HTML 만드는 화면
2. 쿠팡 상품명을 기반으로 GPT 를 이용해 설명을 만들고, HTML과 병합하는 화면
3. GPT 를 이용해 글을 작성하는 화면
이 화면을 사용하는 이유는
아래와 같이 따로따로 작성된 글들을 합치기 위함이다.
이런식으로
상품명 > 설명 > 링크 > 가격
순서대로 정렬이되야 가독성이 좋기 때문이다.
[Merge]라는 별도의 버튼을 빼서 실행해도 되고
html을 생성하고, GPT로 상품정보들을 생성한 뒤
함수를 실행시켜도 된다.
createMergeBlogForUi() 라는 함수를 [Merge] 버튼에 할당시켜준다.
function createMergeBlogForUi() {
const ss = SpreadsheetApp.getActive();
ss.getRangeByName("merge_1").setValue(createMergeBlog4());
}
범위에 이름을 지정해놓았기 때문에
getRangeByName() 메서드를 이용해 범위를 가져온다.
createMergeBlog4() 라는 함수에서는
생성한 html과 상품정보를 GPT에 전달한다.
/**
* html과 상품설명 merge (gpt-4o)
*/
function createMergeBlog4() {
const ss = SpreadsheetApp.getActive();
const html_text = ss.getRangeByName("item_html").getValue();
const item_text = ss.getRangeByName("item_desc4").getValue();
const content = `html : ${html_text}
description : ${item_text}`;
return processAzureOpenAi4(content, "merge");
}
merge_prompt 라는 함수에 병합용 프롬프트를 선언해주고,
processAzureOpenAi4() 함수에서 이 프롬프트를 사용해 병합을 진행해준다.
/**
* 텍스트 병합용 프롬프트
*/
const merge_prompt = `You are an assistant who merges html and description.
- Add product description between the product name and table of the input html.
- The existing html must be maintained.
- Print it as plain text instead of markdown.
`;
/**
* 글 생성하기 (gpt-4o)
*/
function processAzureOpenAi4(message, gubun) {
var prompt = '';
// 기본 답변을 위한 프롬프트
if (gubun == null) {
prompt = AOAI4.env.AZURE_OPENAI_SYSTEM_MESSAGE;
// 글생성을 위한 프롬프트
} else if (gubun == "content") {
prompt = content_prompt;
// 병합을 위한 프롬프
} else if (gubun == "merge") {
prompt = merge_prompt;
}
const url = `${AOAI4.env.AZURE_OPENAI_ENDPOINT}openai/deployments/${AOAI4.env.AZURE_OPENAI_MODEL}/chat/completions?api-version=${AOAI4.env.AZURE_OPENAI_PREVIEW_API_VERSION}`;
console.log(gubun)
var formData = {
"max_tokens": AOAI4.env.AZURE_OPENAI_MAX_TOKENS,
"messages": [
{ "role": "system", "content": prompt },
{ "role": "user", "content": message }
]
};
var allContent = ""; // 전체 답변을 저장할 변수
var finishReason = "length"; // 처음에는 길이 초과를 가정
while (finishReason === "length") {
const response = UrlFetchApp.fetch(url, {
method: "POST",
headers: {
"api-key": AOAI4.env.AZURE_OPENAI_KEY,
"Content-Type": "application/json"
},
payload: JSON.stringify(formData)
});
const json = response.getContentText();
const returnData = JSON.parse(json);
const currentContent = returnData.choices[0].message.content;
// 응답의 현재 내용을 추가
allContent += currentContent;
// finish_reason이 length인지 확인
finishReason = returnData.choices[0].finish_reason;
// 대화를 이어받기 위해 이전 내용을 추가하고 메시지 재구성
formData.messages.push({ "role": "assistant", "content": currentContent });
}
console.log(allContent); // 전체 내용을 로그에 출력
return allContent; // 전체 답변 반환
}
이건 답변의 길이가 길기떄문에 그냥 실행하면 답변이 짤린다.
response 중 finishReason 란느 값을 확인해
다음답변이 더 존재하면 기존답변에 붙여서 전체답변을 완성해준다.
function processAzureOpenAi4(message, gubun) {
// ... 생략 ...
while (finishReason === "length") {
const response = UrlFetchApp.fetch(url, {
method: "POST",
headers: {
"api-key": AOAI4.env.AZURE_OPENAI_KEY,
"Content-Type": "application/json"
},
payload: JSON.stringify(formData)
});
const json = response.getContentText();
const returnData = JSON.parse(json);
const currentContent = returnData.choices[0].message.content;
// 응답의 현재 내용을 추가
allContent += currentContent;
// finish_reason이 length인지 확인
finishReason = returnData.choices[0].finish_reason;
// 대화를 이어받기 위해 이전 내용을 추가하고 메시지 재구성
formData.messages.push({ "role": "assistant", "content": currentContent });
}
// ... 생략 ...
}
가끔 GPT 가 병합을 잘못해서 이미지가 누락되는 경우가 발생한다.
그래서 노란음영에 빨간 테두리를 강조해두었고, 한번정도 컨텐츠가 잘 생성되었는지 확인해주는게 좋다.
나는 귀찮지만 티스토리에 html로 글쓰기 화면에서 잘 작성되었는지 확인하고 진행한다.
원래 티스토리에 글을올릴때는 하루에 3개니깐 복사붙여넣기로 진행을 했으나
자동화라는 명분으로 GPT에게 업무를 하달하였다.
직접하는거보다 검수만 하는것이고, 잘못생성했을 경우 재지시를 하면되니 나의 업무가 줄어 좋은것 같다.
'GCP > Apps Script' 카테고리의 다른 글
Apps Script와 ChatGPT로 WordPress에 쿠팡 어필리에이트 글 올리기 #3 (6) | 2024.10.08 |
---|---|
Apps Script와 ChatGPT로 WordPress에 쿠팡 어필리에이트 글 올리기 #1 (3) | 2024.10.02 |
Apps Script 디버그 하기 (4) | 2024.09.12 |
[도서] 앱스 스크립트 관련 도서 소개 (5) | 2024.09.03 |
Apps Script에서 GPT를 이용해 구글 시트의 데이터 분석하기 (0) | 2024.07.10 |