vue多图片发布到 Facebook 绑定的 Instagram

前提:可以连外网,可以使用 FB.API

1.授权,获取该 facebook 用户的公共主页的信息

export const initsendfacebook = () => {
  return new Promise((resolve, reject) => {
    FB.getLoginStatus(function (response) {
      if (response.status === "connected") {
        var id = 0;
        var accessToken = response.authResponse.accessToken;
        FB.api("/me", function (response) {
          id = response.id;
          FB.api(
            "/" + id + "/accounts",
            "GET",
            {
              access_token: accessToken,
            },
            function (res) {
              if (res.data == null) {
                reject("您的公共主页未开通或权限未开通,请开通后再尝试");
              }
              if (res.data.length > 0) {
                resolve(res.data);
              }
            }
          );
        });
      } else {
        FB.login(
          function (response) {
            var id = 0;
            if (response.authResponse) {
              FB.api("/me", function (response) {
                id = response.id;
                FB.getLoginStatus(function (response) {
                  if (response.status === "connected") {
                    var accessToken = response.authResponse.accessToken;
                    FB.api(
                      "/" + id + "/accounts",
                      "GET",
                      {
                        access_token: accessToken,
                      },
                      function (res) {
                        if (res.data == null) {
                          reject(
                            "您的公共主页未开通或权限未开通,请开通后再尝试"
                          );
                        }
                        if (res.data.length > 0) {
                          resolve(res.data);
                        }
                      }
                    );
                  }
                });
              });
            } else {
              reject("授权登录失败");
            }
          },
          {
            scope:
              "public_profile,email,pages_show_list,pages_read_engagement,pages_manage_posts,publish_video",
          }
        );
      }
    });
  });
};

返回的格式如下:两个公共主页:一个为“你的公共主页名字 1”,一个为“你的公共主页名字 2”

{
  "data": [
    {
      "access_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "category": "游戏/玩具",
      "category_list": [
        {
          "id": "0000000000000000",
          "name": "游戏/玩具"
        }
      ],
      "name": "你的公共主页名字1",
      "id": "0000000000000000",
      "tasks": [
        "ADVERTISE",
        "ANALYZE",
        "CREATE_CONTENT",
        "MESSAGING",
        "MODERATE",
        "MANAGE"
      ]
    },
    {
      "access_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "category": "商业供应服务",
      "category_list": [
        {
          "id": "0000000000000000",
          "name": "商业供应服务"
        }
      ],
      "name": "你的公共主页名字2",
      "id": "0000000000000000",
      "tasks": [
        "ADVERTISE",
        "ANALYZE",
        "CREATE_CONTENT",
        "MESSAGING",
        "MODERATE",
        "MANAGE"
      ]
    }
  ],
  "paging": {
    "cursors": {
      "before": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "after": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    }
  }
}

2.保存,选择你要发布的 facebook 公共主页,如果你选择的是“你的公共主页名字 1”的公共主页,那么就把该公共主页的 id 和 access_token 保存下来。这里,我把这两个记录为 FacebookHomPageID 和 FacebookHomPageaccess_token

3.获取 Facebook 绑定的 Instagram 主页的 ID,记录为:InstagramHomePageID

export const getinscountid = (
  FacebookHomPageID,
  FacebookHomPageaccess_token
) => {
  return new Promise((resolve, reject) => {
    FB.api(
      "/" + FacebookHomPageID + "?fields=instagram_business_account",
      "GET",
      {
        access_token: FacebookHomPageaccess_token,
      },
      function (response) {
        if (response.instagram_business_account) {
          // InstagramHomePageID
          resolve(response.instagram_business_account.id);
        } else {
          reject("该公共主页没有绑定ins");
        }
      }
    );
  });
};

4.上传图片,返回结果为图片的 ID,分为几个部分

1.首先要判断图片是否符合发布到 Instagram 的规范,如长宽比要大于 0.6 小于 1.91(具体不太清楚多大,但差不多)

// 筛选符合要求的图片url
function filterimage(imgurl) {
  return new Promise((resolve) => {
    const img = new Image();
    img.src = imgurl;
    // 设置加载完成后的回调函数
    img.onload = function () {
      let bil = this.width / this.height;
      if (bil >= 0.6 && bil <= 1.91) {
        resolve(imgurl);
      } else {
        resolve(false);
      }
    };
    img.onerror = function () {
      resolve(false);
    };
  });
}
// oldimgarr:为需要过滤的图片数组
export const panduantupianshifoufuhe = (oldimgarr) => {
  return new Promise(async (resolve) => {
    let newimgarr = [];
    for (let index = 0; index < oldimgarr.length; index++) {
      let url = await filterimage(oldimgarr[index]);
      if (url) {
        newimgarr.push(url);
      }
    }
    // 返回符合要求的图片URL数组
    resolve(newimgarr);
  });
};

2.上传图片到 Instagram

// imageurl:图片URL,图片的地址如:https://www.xxxx.com/xxxx.png
export const uploadInsimage = (
  InstagramHomePageID,
  imageurl,
  FacebookHomPageaccess_token
) => {
  return new Promise(function (resolve) {
    FB.api(
      "/" + InstagramHomePageID + "/media",
      "POST",
      {
        access_token: FacebookHomPageaccess_token,
        image_url: imageurl,
        is_carousel_item: true, // 是否为多图(这里是告诉Instagram我要发多图)
      },
      function (response) {
        if (response.id) {
          // 返回结果为图片的iD
          resolve(response.id);
        } else {
          resolve(false);
        }
      }
    );
  });
};

5.创建轮播容器

/* 
caption:发布帖子的标题,自定义的
imgidlist:图片ID的数组 [id,id,id....],id为第三步中返回的图片的 ID
 */
FB.api(
  "/" + InstagramHomePageID + "/media",
  "POST",
  {
    access_token: FacebookHomPageaccess_token,
    caption: caption,
    media_type: "CAROUSEL",
    children: imgidlist,
  },
  function (response) {
    if (response.id) {
      //创建轮播容器成功
      // 返回response.id为创建轮播容器id
    } else {
      reject("创建轮播容器失败");
    }
  }
);

6.发布轮播容器

/*
imgidlist:一个对象数组[{ media_fbid: id },{ media_fbid: id },{ media_fbid: id }...],其中id就是第三步中返回的图片ID
 */

FB.api(
  "/" + InstagramHomePageID + "/media_publish",
  "POST",
  {
    access_token: FacebookHomPageaccess_token,
    creation_id: "创建轮播容器id",
  },
  function () {
    console.log("发布成功", true);
  }
);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值