avatar

Tetsuya Ohira's Blog

Software Developer in Japan 🚀

楽天ROOMに自動投稿するNode.jsアプリケーションを作成した

2023-12-05

はじめに

  • ChatGPT APIの機能を活用して何か作りたいという思いから、このツールを作った
  • 楽天ROOMは商品を紹介し、紹介ページ経由での商品購入がアフィリエイト収益につながる楽天のサービス
  • このツールは、楽天APIから商品一覧を取得し、ChatGPT APIを使用して商品の紹介文を生成、そしてスクレイピングで自動投稿する。

GitHubリポジトリ

GitHubリポジトリ

使用したnpmライブラリ

  • スクレイピング: puppeteer
  • 定期実行: cron

工夫した点

  • 商品紹介文の自動生成にはChatGPT APIを使用。英語でのロール指示を採用した理由は、英語の精度が高いため

    // generateProductDescription.ts const ROLE_CONTENT = `Please write short, attractive, friendly sentences to post on Rakuten ROOM so that people will want to buy your products. - Please do not use "[ and ]" because they are garbled. - Please use pictograms. - Please add a relevant hashtag at the end of the sentence. - Please keep it within 350 characters. - Answer in the language asked.`;
  • Modelはgpt-3.5-turboを使用した。実行コストが安いため

  • 楽天APIから取得した商品名や概要をプロンプトに入力し、効果的な紹介文を作成

    // generateProductDescription.ts const catchcopy = '楽天APIから取得' const itemName = '楽天APIから取得' const itemCaption1000 = '楽天APIから取得' const prompt = `以下の商品を購入したくなるように魅力的にフレンドリーに短く書いてください。 250字以内に収めてください。 以下、商品の特徴 ${catchcopy} ${itemName} ${itemCaption1000} `
  • 楽天ROOMに既に投稿済みの商品かどうかを判定し、不要なChatGPT APIの呼び出しを避けるよう工夫

    // scrapeWebsite.ts // コレ!済みの場合は、処理を終了 let modalElement = null try { await page.waitForSelector('.modal-dialog-container', { visible: true, timeout: 500 }) modalElement = await page.$('.modal-dialog-container') } catch (error) { } if (modalElement) { console.log('「すでにコレしている商品です」のため処理を終了') await browser.close() return }
  • cronを使用して定期実行するように設定

    // index.ts const job = new CronJob('0 0 9,12,18,21 * * *', () => { console.log('Start job:' + new Date().toLocaleString()) main() })
  • 実行時間によって投稿する商品ジャンルが変わる仕組みを実装

    // getGenreIdsByTime.ts const genres: Genres = { 9: ['100371', '100433'], // 9時にジャンル「レディースファッション」、「インナー・下着・ナイトウェア」を投稿 12: ['216131', '558885'], // 12時にジャンル「バッグ・小物・ブランド雑貨」、「靴」を投稿 15: ['216129', '100533'], // 15時にジャンル「ジュエリー・アクセサリー」、「キッズ・ベビー・マタニティ」を投稿 18: ['551167', '100804'], // 18時にジャンル「スイーツ・お菓子」、「インテリア・寝具・収納」を投稿 21: ['558944', '100939'] // 21時にジャンル「キッチン用品・食器・調理器具」、「美容・コスメ・香水」を投稿 }

成果

  • 実施期間:2023/11/13 〜 2023/12/6
  • 成果報酬: ¥2,839
  • ChatGPT Cost: ¥576.50 ($3.92) 2023-12-05-01.png

感想

  • 自動化の力とAIの可能性を実感した

参考