【问题标题】:Publish an Open Graph Story from url / hyperlink从 url / 超链接发布 Open Graph Story
【发布时间】:2013-12-18 12:21:28
【问题描述】:

我已在我的 Facebook 应用程序的 Open Graph 模块中成功创建了一个故事。

故事是:

“约翰 [选中] [巴西] 成为 MYDOMAIN 的足球世界杯世界杯的新世界冠军”

[pick] 是动作,[country] 是用户选择的国家。这似乎工作正常。但是接下来的步骤让我很困惑。

我希望在我的网站上通过 Facebook 登录的访问者点击他们认为将赢得即将到来的世界杯的国家的国旗。随后,上述故事被发布到他们的时间线上。

我不知道如何设置。 Facebook 的开发中心很广泛,但对于像我这样的 PHP 新手来说,这一步的流程并不是很清楚。

假设我页面上的标志所代表的超链接需要看起来像这样:

http://mydomain.com/storypublisher.php?&country="Brazil"&image="Brazilflag.jpg" 等

所以我的问题是:

  • storypublisher.php 的正确代码是什么?
  • 我上面提到的网址的正确格式是什么?

我已经阅读了有关“食谱”等的各种教程,但是当谈到您实际开始发布上述故事的部分时,它们让我感到困惑。

【问题讨论】:

    标签: php facebook facebook-graph-api facebook-opengraph


    【解决方案1】:

    像这样?根据您对代码部分的需要采用它。使用Facebook PHP SDK

    // 0. We don't need to clear session
    require_once realpath(dirname(__FILE__)) . 'facebook.php';
    
    $facebook = new Facebook(array(
        'appId' => '',
        'secret' => '',
    ));
    
    $fbCurrentUserID = $facebook->getUser();
    
    // 1. If we cant get the user log him in and request permissions This requests combined permissions (basic + post)
    if (!$fbCurrentUserID){
        $loginUrl = $facebook->getLoginUrl(array(
            'scope' => 'publish_actions',            
            'redirect_uri' => $current_url, // Replace here
        ));
        $this->abortToUrl($loginUrl);
    }
    
    // 2. So we do have a current FB user. Lets try to read data (Maybe he declined perms)
    try {
        // 2.a Check if has granted us the perms and post
        $isGranted = $facebook->api(array(
            "method"    => "users.hasAppPermission",
            "ext_perm"  => "publish_actions",
            "uid"       => $fbCurrentUserID,
        ));
    
        if (!$isGranted){
            $login_url = $facebook->getLoginUrl(array(
                'scope' => 'publish_actions',
                'redirect_uri' => $current_url // Replace here
            ));
            die(header('Location: '. $login_url .''));
        }
    
    
        $res = $facebook->api('/me/feed', 'POST', array(
            'link' => '', // Replace and fill with your params
            'name' => '', // Replace and fill with your params
            'message' => '', // Replace and fill with your params
            'description' => '', // Replace and fill with your params
            'picture' => '', // Replace and fill with your params
        ));
    } catch (FacebookApiException $e) {
        // 2.b Log any error and retry please
    
        die(header('Location: /'));
    }
    

    至于其余的使用一个小表单发布到 facebook 控制器。如果您传递大量数据,则首选 $_POST 而不是 $_GET。然后从控制器获取它们并填写我留在代码中的replace here cmets。如果您是 PHP 新手,您将需要进一步的指导。在我看来,从 facebook SDK 控制器开始是错误的开始。好吧,我可能是错的。

    【讨论】:

    • 谢谢吉米。我理解您的示例,直到您通过 POST 调用 api 的部分,我必须定义“链接”“名称”“消息”等。我的印象是开放图故事需要像这样格式化操作:@ 987654322@? access_token=ACCESS_TOKEN& method=POST& object= 假设我的操作称为“PICK”并且对象称为“COUNTRY”,我如何在用户通过 GET(或您建议的 POST)提交的 url 值中定义它
    • @user3097481 如果您使用的是 php SDK,则不要。如您所见,您正在构建一个使用它的 facebook 对象。小建议:facebook 文档已过时。在这里寻找 SDK 并使用它! github.com/facebook/facebook-php-sdk
    • @user3097481 我发布的代码基于 Facebook SDK。这样做的好处是您不需要为大多数情况构建参数和查询。检查上面的链接,我希望事情会变得清楚。 Facebook 开发人员将在 github 上回复一些问题后尽快更新他们的文档
    • 谢谢吉米,我会看看它把我带到哪里!
    • @user3097481 祝你好运:-)。前路艰辛
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多