楽天市場APIを使ってLINEbotを作ってみた

# はじめに
私は、某小売業のECショップで働いております。
約半年前、ECショップで働く事となりました。
右も左もわからないまま、働くこととなりました。

会社では、楽天市場への出店をしていた店舗のシステム面でのメンテナンスを主業務としています。
右も左もわからない所でしたが、なんとか半年かけて楽天市場の仕組みを理解してきた所です。

そこで、もう少し踏み込んだ施策としてAPIを使いたいと思いました。
楽天市場APIは、出店者なら無料で使える反面、技術・知識が必要となりました。

今回の記事では、そんな楽天市場のAPIを使う初期の初期段階でのお話となります。

# 楽天市場とは
楽天市場とは、Amazonについで売上第二位を誇るモール型ECサイトです。
モール型ECサイトとは、仮想空間上の商店街をイメージで各ショップが出店するECサイトになります。
楽天市場の特徴は、なんと言ってもポイント！
毎月5の付く日は、ポイント＋４倍。いろんなショップで買い回りすると最大ポイント１０倍など
これらの魅力的なポイントサービスにより、人気を獲得しています。

私は、某社でECショップ担当しており、楽天市場にも出店しております。

# 楽天APIとは
楽天APIとは、その名の通り楽天が発行しているAPIです
主な種類は下記の通り

**●楽天市場 API**
**●楽天ブックス API**
**●楽天トラベル API**
**●楽天レシピ API**
**●楽天Kobo API**
**●楽天GORA API**

楽天が展開しているサービスで使えるAPIが揃っています。
今回は、**●楽天市場 API**と**LINEbot**を使って出品している商品の情報を引き出すbotを作成します

# 作成手順
#### 使用したツール
・楽天市場API
・LINE
・Make

#### 準備
今回、楽天市場APIを使う為には楽天市場に出店している必要があります。
楽天市場API自体は無料で使えますが、出店に際し一部有料サービスもあるので試す方は注意が必要です。

#### ①serviceSecretキー、licenseキーの準備
楽天WEB APIサービスページ内に**serviceSecretキー**と**licenseキー**があります。
licenseキーは有効期限があるので、注意が必要です。
開示ページは以下の通りに進みます。


**①-1　楽天RMSログイン後に”店舗様向け情報・サービス→WEB APIをクリック**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881447/8cb686fe-5fce-36f7-6ca7-a9389e624c05.png)

**①-2　2-1WEB APIをクリック→画面に現れるのがserviceSecretキー**
              **※licenseキーも画面に表示されるが末尾4桁のみ。ライセンスキーの確認・変更をクリック**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881447/74421329-3cce-efb3-82e4-6806e3bbf0f5.png)


**①-3　ロボットにより操作ではないをチェック後確認をクリック**
その次の、ページに表示されるのがLicenseキーとなります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881447/05fe7c0a-0e28-6617-84fa-de5acc3ee1b6.png)




#### ②serviceSecretキー、licenseキーのBase64でエンコード
Base64は、64進数を意味する言葉で、すべてのデータをアルファベット(a~z, A~z)と数字(0~9)、一部の記号(+,/)の64文字で表すエンコード方式。
下記サイトなど、エンコードをしてくれるサイトがあるので参照

[Base64 エンコード・デコード](https://rakko.tools/tools/24/ "タイトル")

**serviceSecretキー**と**licenseキー**をコロン(:)で繋げてエンコードをする。

###### 例
**serviceSecretキー**：aaa
**licenseキー**      ：bbb

エンコード前→ aaa:bbb
エンコード後→ **YWFhOmJiYg==** 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881447/57ba8c30-cec8-f48e-e7c0-113fad3108e0.png)

今回使用するのは、エンコード後の「**YWFhOmJiYg==**」部分、これをメモしておく。

## MakeのLINEbot構築
今回使用する楽天市場APIは「**ItemAPI2.0**」
その中でも**items.get**をAPIを使い、商品コードを入力すると商品情報が返ってくるbotを作成します。

※商品コードとは楽天市場ページ内の商品固有の番号になります
※画像内の「**ta004**」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881447/3b574b49-0b61-fa3b-21c6-f27664164093.png)

### Make全体図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881447/f064cc36-a943-6e0c-b3c7-360bd0043739.png)
Makeは難しい設定は必要なくLINEbotが作成できます。

### HTTPの設定
**URLでは、楽天市場APIに説明文があるのでURLをそのまま使う**
※1.Events[]Message.Text部分は、LINEからの送信メッセージを代入するタグ

**Methodでは、GETを選択**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881447/bd83b0ff-7f5d-6028-0077-4fb06c7e3995.png)


**Headersでは先ほどエンコードしたserviceSecretキーとlicenseキー使用する**
Nameに「Authorization」と入力
Valuに「ESA 」＋②で作成したエンコードした**serviceSecretキー**と**licenseキー**
**※半角スペースなど、コピーミスに注意！**

**Methodでは、GETを選択**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881447/be847353-0671-26c7-e92e-383b4e54a4bc.png)


### LINEの設定
Messages部分に返答したい情報を記入する
今回は商品名と商品説明を表示するようにする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881447/430226f2-2d24-44f1-75fc-1f7853fec1f6.png)


## LINEbot　出力結果
###### LINEのメッセージで商品コードを入力すると情報を返してくれました!!
※＜br＞はHTMLタグで改行を表します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881447/85702984-13c7-3af1-2495-71bb4085c5eb.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881447/0c4a7175-c9d3-fca3-8348-3734e7c01c25.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881447/f635c36f-0318-87b4-fda2-d6d10b406868.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881447/2aba3ac3-21de-7499-8ffb-d2c6c17dce32.png)

## 最後に
今回は、非常に簡単なGETメソッドを使いましたが
楽天市場APIには、様々な種類があります。
在庫情報を引き出したり、書き換えたりもAPIでできるようになります。

お歳暮の時期では商品の終売など急な連絡も多々あります。
PCがない時でも、それらに対応できるようにこういった様々なAPIを活用したいと思います。

**ここまで読んでいただきありがとうございました!!**