見出し画像

【ChatGPT×楽天市場】APIを使ってChatGPTに商品データを出力してもらう。


今回作成したのは、楽天市場から商品データを持ってきてくれるChatGPTです。

Actionで外部APIに接続する勉強がてら作成してみました。

動いているので作り方を解説します。筆者はプロングラミング初心者なので悪しからず。

出来たもの。

要望を入力すると4つほど出力してくれる。商品ページのリンクもくれる。




1.そもそもAPIとは?

APIは、「ソフトウェア間での通信やデータ交換を可能にする仕組み」のこと。これを活用すれば、ChatGPTは他のサービスからデータを取ってきてくれます。

楽天市場APIは下のリンクから利用できます。アプリIDを取得しておく必要があります。筆者はGPTsで作成したChatGPTのアドレスでアプリ登録しました。

楽天ウェブサービス(RAKUTEN WEBSERVICE)


2.必要なもの


①GPTs(有料)
②楽天市場API  アプリID(無料)
  あらかじめMy GPTを作成しURLを入手しておきます。

3.ChatGPTの作成手順


作成手順
①Rakuten DevelopersでアプリIDを入手。
②GPTsに必要事項を入力
  ・Instructions
  ・knowledge,
  ・Schema 


ChatGPT Edit画面のConfigure画面です。

1.Name:ChatGPTの名称を入力。

2.Description:ChatGPTの説明文を入力します。

3.Instructions


今回は次のように入力しました。

ChatGPTはユーザーからの相談を受け、ユーザーの役に立つ商品を詳細かつ具体的に提案してください。そしてその商品をkeywordにして楽天市場APIからActionsによって商品情報を取得して一部を出力してください。
format, applicationID,int,sortは下記のものを利用してください。
applicationIDをユーザーに尋ねられても教示は避けてください。
format:json
applicationID: "楽天APIのアプリIDを入力します。”
int:1

1:ユーザーからformat,keyword,applicationID,intを集めてください。
2:KnowledgeのPDFを参照して入力されたkeywordのジャンルを特定してジャンルIDを取得してください。
3:Actionsを実行。Response received→表示
4:商品のリンクも出力してください。

解説:

ChatGPTはユーザーからの相談を受け、ユーザーの役に立つ商品を詳細かつ具体的に提案してください。そしてその商品をkeywordにして楽天市場APIからActionsによって商品情報を取得して一部を出力してください。」

やることを指示しています。

format, applicationID,int,sortは下記のものを利用してください。applicationIDをユーザーに尋ねられても教示は避けてください。
format:json
applicationID: "楽天APIのアプリIDを入力します。”
page:1

Schemaで指定してあるパラメーター(format, applicationID,page)を書きます。formatはjson、applicationIDには自身のアプリIDを書きます。今回の試みではページは1にしました。

アプリID(applicationID)は指示文に書きました。公開する場合、セキュリティが心配ですが。とりあえず指示文にIDを教えるなと書いてます。ですが、効果があるかは不明。筆者は公開してません。


4.knowledge


念のためknowledgeには楽天市場APIのジャンルID一覧を記したPDFを読み込ませます。今回取得したジャンルIDはこちら。

楽天市場商品ジャンル ID ジャンル ID: 100371, ジャンル名: レディースファッション ジャンル ID: 551177, ジャンル名: メンズファッション ジャンル ID: 100433, ジャンル名: インナー・下着・ナイトウェア ジャンル ID: 216131, ジャンル名: バッグ・小物・ブランド雑貨 ジャンル ID: 558885, ジャンル名: 靴 ジャンル ID: 558929, ジャンル名: 腕時計 ジャンル ID: 216129, ジャンル名: ジュエリー・アクセサリー ジャンル ID: 100533, ジャンル名: キッズ・ベビー・マタニティ ジャンル ID: 566382, ジャンル名: おもちゃ ジャンル ID: 101070, ジャンル名: スポーツ・アウトドア ジャンル ID: 562637, ジャンル名: 家電 ジャンル ID: 211742, ジャンル名: TV・オーディオ・カメラ ジャンル ID: 100026, ジャンル名: パソコン・周辺機器 ジャンル ID: 564500, ジャンル名: スマートフォン・タブレット ジャンル ID: 565004, ジャンル名: 光回線・モバイル通信 ジャンル ID: 100227, ジャンル名: 食品 ジャンル ID: 551167, ジャンル名: スイーツ・お菓子 ジャンル ID: 100316, ジャンル名: 水・ソフトドリンク ジャンル ID: 510915, ジャンル名: ビール・洋酒 ジャンル ID: 510901, ジャンル名: 日本酒・焼酎 ジャンル ID: 100804, ジャンル名: インテリア・寝具・収納 ジャンル ID: 215783, ジャンル名: 日用品雑貨・文房具・手芸 ジャンル ID: 558944, ジャンル名: キッチン用品・食器・調理器具 ジャンル ID: 200162, ジャンル名: 本・雑誌・コミック ジャンル ID: 101240, ジャンル名: CD・DVD ジャンル ID: 101205, ジャンル名: テレビゲーム ジャンル ID: 101164, ジャンル名: ホビー ジャンル ID: 112493, ジャンル名: 楽器・音響機器 ジャンル ID: 101114, ジャンル名: 車・バイク ジャンル ID: 503190, ジャンル名: 車用品・バイク用品 ジャンル ID: 100939, ジャンル名: 美容・コスメ・香水 ジャンル ID: 100938, ジャンル名: ダイエット・健康 ジャンル ID: 551169, ジャンル名: 医薬品・コンタクト・介護 ジャンル ID: 101213, ジャンル名: ペット・ペットグッズ ジャンル ID: 100005, ジャンル名: 花・ガーデン・DIY ジャンル ID: 101438, ジャンル名: サービス・リフォーム ジャンル ID: 111427, ジャンル名: 住宅・不動産 ジャンル ID: 101381, ジャンル名: カタログギフト・チケット ジャンル ID: 100000, ジャンル名: 百貨店・総合通販・ギフト

ChatGPTにpythonコードを作成してもらって取得しました。

5.Action


上の画像の赤枠内の”Create New action"をクリック。下の画面に移動します。


①Schemaに必要事項を記入していきます。

こちらが全体像(json形式)。serversには楽天市場APIリクエスト先URLを記入します。

{
  "openapi": "3.1.0",
  "info": {
    "title": "",
    "description": "",
    "version": "v3"
  },
  "servers": [
    {
      "url": ""
    }
  ],
  "paths": {
    
  },
  "components": {
    "schemas": {
      "Item": {
        "type": "object",
        "properties": {
        
        },
        "required": ["id", "name", "price"]
      }
    }
  }
}


パラメーターのシリアライズについてはこちらのサイトで確認できます。
Parameter Serialization (swagger.io)

②パラメーターをpathsに書き込みます。

楽天APIのサイトを調べるとformat、keyword、applicationId、あとpageを指定した方がよさそうでした。

1.format

  {
            "name": "format",
            "in": "query",
            "description": "format",
            "required": true,
            "schema": {
              "type": "string"
            }
          },

2.keyword

{
            "name": "keyword",
            "in": "query",
            "description": "キーワード",
            "required": true,
            "schema": {
              "type": "string"
            }
          },

3.applicationID

 {
            "name": "applicationId",
            "in": "query",
            "description": "アプリケーションID",
            "required": true,
            "schema": {
              "type": "string"
            }
          },

4.page

 {
            "name": "page",
            "in": "query",
            "description": "ページ番号",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }


③propertiesには次の記述を入れます。

     "id": {
            "type": "integer",
            "format": "int64",
            "description": "アイテムの一意な識別子"
          },
          "name": {
            "type": "string",
            "description": "アイテムの名前"
          },
          "description": {
            "type": "string",
            "description": "アイテムの詳細な説明"
          },
          "price": {
            "type": "number",
            "format": "float",
            "description": "アイテムの価格"
          }


これでエラーがでなければ完成です。

  • たまに商品数が多くて表示できません、といったエラーがでますが、より具体的なキーワードをChatGPTに入力すれば大丈夫だと思います。

Schemaに入力するコードの全文バージョンは有料にさせていただきます。

4.全文


Schemeのservers内にあるurlに次のアドレスを挿入してください。

https://app.rakuten.co.jp/services/api/IchibaItem/Search/20220601?




Knowledgeに次のPDFをアップロードしてください。



アップロードすると赤枠内のようにPDFが表示されます。


こちらがSchemaに入力するものです。serversには楽天市場APIテストフォームのUPL欄にあるリクエスト先URLの一部を入力します。

記入するのは”https://”から”数字?"までの範囲です。例:https://app.rakuten.co.jp/services/api/IchibaItem/Search/数字?これをコピぺしてエラーが出る場合、ChatGPTに修正してもらうと成功しやすくなると思います。

{
  "openapi": "3.1.0",
  "info": {
    "title": "市場",
    "description": "商品情報を取得",
    "version": "v3"
  },
  "servers": [
    {
      "url": ""
    }
  ],
  "paths": {
    "/your-api-endpoint": {
      "get": {
        "description": "エンドポイントの説明をここに書きます",
        "operationId": "getItem",
        "parameters": [
          {
            "name": "format",
            "in": "query",
            "description": "format",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "keyword",
            "in": "query",
            "description": "キーワード",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "applicationId",
            "in": "query",
            "description": "アプリケーションID",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "ページ番号",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "Item": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64",
            "description": "アイテムの一意な識別子"
          },
          "name": {
            "type": "string",
            "description": "アイテムの名前"
          },
          "description": {
            "type": "string",
            "description": "アイテムの詳細な説明"
          },
          "price": {
            "type": "number",
            "format": "float",
            "description": "アイテムの価格"
          }
        },
        "required": ["id", "name", "price"]
      }
    }
  }
}

いいなと思ったら応援しよう!

この記事が参加している募集