楽天ROOMが副業界隈でにわかに盛り上がっているとのことで、ちょっと乗っかってみます。
楽天市場とOpenAIはAPIを公開していますので、それをGASとスプレッドシートで使いやすいように仕上げてみました。
楽天ROOMへの自動投稿は規約的にNGっぽいのと、ROOMのAPIは無いのでブラウザ操作を自動化しないといけないのでそこはGASではできませんので悪しからず。
(node.jsやpython、seleniumでやっている人はいるみたいです)
コード
/*
20件の生成で$0.1くらい
1回の実行で10件生成してます
*/
// スプレッドシートの設定
const SHEET_NAME = '楽天商品リスト';
// 楽天APIの設定
const APPLICATION_ID = '**********';
const AFFILIATE_ID = '**********';
const ENDPOINT = 'https://app.rakuten.co.jp/services/api/IchibaItem/Search/20220601';
const OPENAI_API_KEY = '**********';
const GENREID = 215783;//日用品
/*
100371: レディースファッション
551177: メンズファッション
100433: インナー・下着・ナイトウェア
216131: バッグ・小物・ブランド雑貨
558885: 靴
558929: 腕時計
216129: ジュエリー・アクセサリー
100533: キッズ・ベビー・マタニティ
566382: おもちゃ
101070: スポーツ・アウトドア
562637: 家電
211742: TV・オーディオ・カメラ
100026: パソコン・周辺機器
564500: スマートフォン・タブレット
565004: 光回線・モバイル通信
100227: 食品
551167: スイーツ・お菓子
100316: 水・ソフトドリンク
510915: ビール・洋酒
510901: 日本酒・焼酎
100804: インテリア・寝具・収納
215783: 日用品雑貨・文房具・手芸
558944: キッチン用品・食器・調理器具
200162: 本・雑誌・コミック
101240: CD・DVD
101205: テレビゲーム
101164: ホビー
112493: 楽器・音響機器
101114: 車・バイク
503190: 車用品・バイク用品
100939: 美容・コスメ・香水
100938: ダイエット・健康
551169: 医薬品・コンタクト・介護
101213: ペット・ペットグッズ
100005: 花・ガーデン・DIY
101438: サービス・リフォーム
111427: 住宅・不動産
101381: カタログギフト・チケット
100000: 百貨店・総合通販・ギフト
*/
// GASで動く楽天商品紹介文自動生成スクリプト
// 楽天APIで商品情報を取得し、ChatGPT APIで紹介文を生成
function generateHighRewardDescriptions() {
const products = fetchHighRewardItems(APPLICATION_ID, AFFILIATE_ID);
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME);
sheet.clear();
sheet.appendRow(['商品名', 'URL', '価格', '報酬率(%)', '紹介文']);
products.slice(0, 10).forEach(product => {
const prompt = `楽天ROOMに投稿するために以下の商品に対する魅力的な紹介文を日本語で150文字以内で書いてください:\n商品名:${product.itemName}\n価格:${product.itemPrice}円`;
const description = getGPTResponse(prompt);
sheet.appendRow([
product.itemName,
product.affiliateUrl,
product.itemPrice,
product.affiliateRate,
description
]);
});
}
// 商品情報とアフィリエイト報酬率を取得
function fetchHighRewardItems(appId, affiliateId) {
const apiUrl = ENDPOINT;
const genreId = GENREID; // 例:日用品雑貨(必要に応じて変更可)
const params = {
applicationId: appId,
affiliateId: affiliateId,
genreId: genreId,
sort: "+affiliateRate", // アフィリエイト報酬が高い順
hits: 10
};
const query = Object.keys(params)
.map(k => `${k}=${encodeURIComponent(params[k])}`)
.join("&");
const response = UrlFetchApp.fetch(`${apiUrl}?${query}`);
const json = JSON.parse(response.getContentText());
return json.Items.map(i => i.Item);
}
function getGPTResponse(prompt) {
const apiUrl = 'https://api.openai.com/v1/chat/completions';
const payload = {
model: 'gpt-3.5-turbo',
messages: [{ role: 'user', content: prompt }],
max_tokens: 300,
temperature: 0.7
};
const options = {
method: 'post',
contentType: 'application/json',
headers: { Authorization: `Bearer ${OPENAI_API_KEY}` },
payload: JSON.stringify(payload),
muteHttpExceptions: true
};
const res = UrlFetchApp.fetch(apiUrl, options);
const result = JSON.parse(res.getContentText());
return result.choices && result.choices[0]
? result.choices[0].message.content.trim()
: '生成失敗';
}
周辺情報
あればいいですが、楽天とOpenAIのアカウントは作ってください。
楽天APIについて
https://webservice.rakuten.co.jp/documentation/ichiba-item-search
エンドポイントのドキュメントです。
楽天ユーザーではあるのですが、こんなAPIあるなんて知りませんでした。
他API情報もここから見ていってください。
楽天アプリケーションIDとアフィリエイトIDの取得方法
https://webservice.rakuten.co.jp/
上記URLから、画面右上の「アプリID発行」すればOKです。
アプリIDが発行できると一緒にアフィリエイトIDも表示してくれます。
こちらで取得したIDをコードの*****のところに書き換えて入れてください。
コールバック許可ドメインは空白で大丈夫です。(入れてますがこのコードでは使ってません)

OpenAIのAPIキーの取得方法
Organization作成、アプリ作成の上設定からAPIKeysに移動し、APIキーを確認してください。
使用料に応じて課金されますので気を付けて。
まあ、詳しいことはChatGPTに聞いてください。
使い方
コードを実行するとジャンルに応じてアフィリエイト報酬の高い10件を楽天APIから取得します。
それをスプシに書き込んで、書き込まれた内容を基にOpenAI APIでChatGPTに楽天ROOM用の紹介文を書いてもらいます。
なお、このコードで使っているのは’gpt-3.5-turbo’という安いモデルです。
これで充分かなと。高いモデル使うと結構課金されてしまいますしね。
スプシには商品のリンクも書いてありますので、そこからROOMに移動、スプシの紹介文を貼り付けて投稿、という流れです。
こんなこともGASではできますよ、というはなしでした。
コメント