【问题标题】:Posting to facebook from json on google apps script在谷歌应用脚​​本上从 json 发布到 facebook
【发布时间】:2014-12-06 20:41:52
【问题描述】:

我有以下 .gs 代码

function updateStatus(){
var myId="100006898720726";
var myAppAccess_token="APP-ID|APP-SECRET";
var graphUrl="https://graph.facebook.com/"+myId+"/feed";
var theDate=new Date().toString();
UrlFetchApp.fetch(graphUrl,{method:"post",payload:{
message:"foo\n"+theDate,
access_token:myAppAccess_token
}});
}

并且你有一个 JSON URL http://pipes.yahoo.com/pipes/pipe.run?_id=a6c5eeff220e55a4fe9607065384817a&_render=json

我想将每个带有描述和链接的新项目发布到 facebook

我尝试了几种方法,但谷歌控制台总是显示错误

提前致谢

【问题讨论】:

  • 那么,您想遍历 JSON 对象中的每个属性,并为每个属性创建不同的帖子吗?您是否正在尝试从该 JSON 对象中获取特定内容?所以,我猜这不是关于 Facebook API,而是关于如何从 JSON 对象中获取信息?
  • 我想发布每个项目的描述和链接,而不是每个属性
  • 您需要弄清楚该对象的结构,以及它是否总是相同的结构。里面有很多数据。该对象有 232,000 个字符。当我将它粘贴到一个文本文件中时,它有 44 页长。它是一个多维对象。在其他对象内部的对象内部有对象。你可以看看这个 SO 问题:How to list the properties of a JavaScript object
  • 对象由 data.value.items 构成,并且每个项目始终相同。我已经开发了一种使用 jquery 在网页上显示它的方法,它运行正常,但我不知道如何融合代码为每个项目分配变量以及将其发布到 FB 的代码
  • 我假设您可以将所需的值放入变量中。将您想要的变量传递给updateStatus() 函数。我不知道你知道什么或不知道什么。我不知道你有多少编程经验。在你的函数中加入一个参数:function updateStatus(argToReceive){ the code }; 然后你可以在updateStatus 函数中使用argToReceive。把一些东西放在一起,即使它很糟糕,然后发布你尝试过的东西。

标签: javascript json facebook google-apps-script


【解决方案1】:

最大的问题是您将有效负载添加到选项中,并且要发布到 Facebook 的消息必须是 Facebook URL 的一部分。我在答案底部更新了您的代码。

这是我使用的:

function fncPostSecurly_(argToPost) { //argToPost is the message to post to Facebook that is passed to this function.
  Logger.log("fncPostSecurly ran: " + argToPost);

  var sttsUpdate = argToPost + "your text to post here" + argToPost;
  var fromLogInTkn = cache.get('fbTkn'); // Get facebook token that was stored in cache

  Logger.log("cache FB token: " + fromLogInTkn);

  //This is added security https://developers.facebook.com/docs/graph-api/securing-requests/
  var appsecret_sig = Utilities.computeHmacSha256Signature(fromLogInTkn, "YourAppSecret");
  var optnPostFB = {"method" : "post"};  //
  var PostToFB_URL = "https://graph.facebook.com/FacebookPageOrGroupID/feed?message=" + sttsUpdate + "&access_token=" 
    + fromLogInTkn;


    //Make a post to the Page
    var whatHappened = UrlFetchApp.fetch(PostToFB_URL, optnPostFB );

    //The return from facebook is an object.  Has to be converted to a string.
    var strFrmFbObj = whatHappened.getContentText();
    Logger.log("Return value of Post: " + strFrmFbObj);

    //When a post is successfully made to Facebook, a return object is passed back with an id value.

    var rtrnVerify = strFrmFbObj.indexOf('{\"id\":\"');
    Logger.log("rtrnVerify: " + rtrnVerify);

    if (rtrnVerify != -1) {
      return true;
    } else {
      return false;
    };
 };

我觉得/feed后面需要一个问号,像这样:

var graphUrl="https://graph.facebook.com/"+myId+"/feed?";

此外,发布到 Facebook 的内容也是 URL 的一部分。您正在添加要发布到有效负载的内容。放错地方了。

Fetch 有两个参数。第二个参数只能是:{"method" : "post"}

你有:

{method:"post",payload:{
  message:"foo\n"+theDate,
  access_token:myAppAccess_token
}}

同样,您不能将有效负载添加到选项中。有效负载必须是 URL 的一部分。这就是 Facebook 使用 API 处理信息的方式。

更新代码:

function updateStatus(){
  var myId="100006898720726";

  var myAppAccess_token="APP-ID|APP-SECRET";
  var graphUrl=  "https://graph.facebook.com/" + myId+ "/feed?message=" + "foo\n" + theDate + "&access_token=" 
    + myAppAccess_token;

  var theDate=new Date().toString();

  var optnPostFB = {"method" : "post"};
  UrlFetchApp.fetch(graphUrl, optnPostFB);

}

【讨论】:

  • 谢谢!没关系,但我用原始代码发布到 facebook 没有问题...问题是为 json 上的每个项目设置一个变量,以便使用消息上的变量发布。这是 json:pipes.yahoo.com/pipes/…,在你的回答中我看不到 json 的运行情况......
【解决方案2】:
  • 切勿发布任何访问令牌。 App Secret 被称为 Secret 是有原因的。我已编辑并删除了 App Secret,但不确定它是否在任何更改历史记录中。
  • 您不能使用应用访问令牌发布任何内容,您需要具有publish_actions 权限的用户令牌才能发布到用户个人资料
  • publish_actions 最初仅适用于在应用程序中具有角色的用户(管理员、开发人员、测试人员)。如果你想上市,你必须先通过review process
  • 消息必须始终 100% 由用户生成,并且您不能“自动发布”。每个帖子都必须得到用户的批准。请参阅platform policy 了解更多信息。

Facebook登录信息:https://developers.facebook.com/docs/facebook-login

这是 Facebook 上实际允许的解决方案,甚至不需要用户授权:https://developers.facebook.com/docs/sharing/reference/share-dialog

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    • 2022-10-18
    • 1970-01-01
    • 1970-01-01
    • 2015-01-21
    相关资源
    最近更新 更多