ECCUBEにInstagram Graph APIを使ってインスタを表示させる

ECCUBEで、ECサイトを作ることになりましたよっと。
果たして無事に作成することはできるのでしょうか💖

さて、今回はECCUBEにインスタグラムの投稿を表示させていく。

ECCUBEってさ、プラグインでちょいちょい金を奪われていくシステムだよね。
できることは、プラグインに頼らずにやっていきたい気持ちだよね。

なので、Instagram Graph APIを使ってみたいと思います。

必要なのは、インスタのビジネスIDと、無限のアクセストークンです。
はてなんのことやらね。

前提として、このふたつを手に入れるには

  • Instagramアカウントをプロアカウントにすること
  • Facebookページを作成してあり、Instagramのアカウントと連携していること

が必要。

APIを使えるようにするぞ!

まず、開発者向けページにアクセスします。(Facebookにログインした状態で)
開発者アカウントを持っていない人は、最初にアカウントを作成してね。
https://developers.facebook.com/

アカウントができたら、メニューから「マイアプリ」を選ぶ。

上部の「アプリを作成」をクリック。
「その他」を選択し、次へ。
「ビジネス」を選択し、次へ。
アプリの名前、メールアドレス、ビジネスポートフォリオ(任意)を選択して
「アプリを作成」をクリック。
Facebookのパスワードを求められるので入力。

アプリの設定>ベーシックの中の
アプリIDとapp secretをメモしておく。

アクセストークン1をGETする

グラフAPIエクスプローラーへアクセス。
https://developers.facebook.com/tools/explorer?locale=ja_JP

Metaアプリを選択
許可を追加する。↓

追加するのは下記。
Events Groups Pages
・business_management
・pages_manage_ads
・pages_manage_metadata
・pages_read_engagement
・pages_read_user_content
・pages_show_list
Other
・instagram_basic
・instagram_manage_comments
・instagram_manage_insights

「Generate Access Token」をクリックして「●●さんとして続行」をクリックする。

アプリがアクセスするビジネスを選択し、続行
アプリがあるアクセスを選択し、続行
アプリがアクセスするInstagramアカウントを選択し、続行
トークン取得が不要なものにチェックを入れないように。

最後に保存をクリック、OKをクリックするとアクセストークン1が発行される。

これもメモしてね。
これは有効期限があるので、(…確か1時間とか…)
無限のアクセストークン3をゲットするまで時間をあけずにいくよー!✨

アクセストークン2をGETする

↓のURLにアクセス。

https://graph.facebook.com/v4.0/oauth/access_token?grant_type=fb_exchange_token&client_id=アプリIDを入力&client_secret=app secretを入力&fb_exchange_token=アクセストークン1を入力

メモしたアプリID、app secret 、アクセストークン1を入力してアクセス。
青色のところを書き換えてね。

すると下記が表示される。

めもしてね。

アクセストークン3をGETする

トークン2を下記に入力し、アクセスする

https://graph.facebook.com/v4.0/me?access_token=アクセストークン2を入力

するとnameとidが表示されるのでこれもメモ。。

そして下記のURLにアクセスする

https://graph.facebook.com/v4.0/↑で取得したidを入力/accounts?access_token=アクセストークン2を入力

すると下記が表示。

アクセストークンデバッガーで確認する。
https://developers.facebook.com/tools/debug/accesstoken

下記のように有効期限「受け取らない」スコープが許可を追加で追加したものになってればおっけー。
ページIDの数字をメモしておいてね。

あーつかれたね。あと少しだよ。

InstagramビジネスアカウントIDをGETする

下記にアクセスする。

https://graph.facebook.com/アクセストークンデバッガーで確認したページIDを入力?fields=instagram_business_account&access_token=アクセストーン3を入力

すると下記が表示される。

うわー!つかれたー!!
あとは実装するだけだよー!!

ECCUBEにいざ反映!

コンテンツ管理のJavaScript管理に下記を張り付けるよ。

/* カスタマイズ用Javascript */

/*insta*/
$.ajax({
   type: 'GET',
   url: 'https://graph.facebook.com/v5.0/InstagramビジネスアカウントID?fields=name%2Cmedia.limit(表示する画像の数)%7Bcaption%2Clike_count%2Cmedia_url%2Cpermalink%2Cthumbnail_url%7D&access_token=アクセストークン3',
   dataType: 'json',
   success: function(json) {
       var ig = json.media.data;
       var html = "";
       for (var i = 0; i < ig.length; i++) {
           var link = ig[i].permalink;
           var image;
           if(!ig[i].thumbnail_url) {
               image = ig[i].media_url;
           } else {
               image = ig[i].thumbnail_url;
           }
           html += '<li><a href="' + link + '" target="_blank"><img src="' + image + '"></a></li>'
       }
       $(".ec_instagram").append(html);
   }
});

これさー、最初、media_urlで投稿URLを取得してたわけ。
そしたら、リールのサムネイルが表示されなくて、えーーーっなんでやねーん。てなったわけ。
なので、thumbnail_urlでリールのurlを取得しているよ。

次に、コンテンツ管理のブロック管理から、新しいブロックを作成するよ。
ブロック名とファイル名は好きなものを。

<div class="ec_instaRole">
    <h3>Instagram</h3>
    <ul class="ec_instagram"></ul>
</div>

CSSはひとまずこんな感じ。

/*Instagram*/
.ec_instaRole{
    max-width: 1130px;
    margin: 0 auto;
}
.ec_instagram{
    display: flex;
    justify-content: space-between;
    flex-wrap: wrap;
    padding: 0;
}
.ec_instagram li{
    width: calc(100% / 5);
    list-style: none;
}
.ec_instagram img{
    width: 100%;
    object-fit: cover;
    height: 230px;
}
@media screen and (max-width:599px){
    .ec_instagram li{
        width: calc(100% / 3);
    }
    .ec_instagram li:last-child{
        display: none;
    }
    .ec_instagram img {
        height: 120px;
    }
}

そして、レイアウト管理から好きなところにブロックを配置したら完成!🎉a

おっつかれさまでしたー!!