楽天ROOMに投稿する品物と紹介文をChatGPTに自動で書いてもらう。GASで。

GAS

楽天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キーの取得方法

Just a moment...

Organization作成、アプリ作成の上設定からAPIKeysに移動し、APIキーを確認してください。
使用料に応じて課金されますので気を付けて。
まあ、詳しいことはChatGPTに聞いてください。

使い方

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

こんなこともGASではできますよ、というはなしでした。

コメント

タイトルとURLをコピーしました