1

我正在尝试从 plugin_comment webhook 中检索 Facebook 评论插件中配置的 href 属性,这样我就可以知道评论的来源并触发对发表评论的内容所有者的通知。

我已经查看了评论 webhook 的 facebook 文档和图形 API 返回的评论数据,但我找不到有关如何获取评论源 URL 的提示。

是否有可能获得该值?

注意:内容的所有者不是我们公司的一部分,所以很遗憾我不能使用审核工具。

4

1 回答 1

0

最后更新:好的,现在!这里是!哈哈...

你可以有一个看起来像这样的 webhook 文件:

<?php
    if ( $_GET['hub_verify_token'] === 'MyPl@ylist.FunRulez!') 
    {
        echo $_GET['hub_challenge'];
    }

    $filename = dirname( dirname( __FILE__ ) ) . '/fb_webook/log.json';

    if ( file_exists( $filename ) )
    {
        $data = file_get_contents( $filename );
        $data = json_decode( $data , true );
    }
    else
    {
        $data = array();
    }

    $new = file_get_contents( 'php://input' );
    $new = json_decode( $new , true );

    $new['href'] = get_fb_comment_url( $new );

    $data[] = $new;

    file_put_contents(
        $filename , json_encode( $data , JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES )
    );

    exit();
?>

现在......对于 get_fb_comment_url() 函数,这里是:

<?php

function get_fb_comment_url( $data )
{
    $comment_id = $data['entry'][0]['changes'][0]['value']['id'];
    $comment_id = explode( '_' , $comment_id );
    $comment_id = $comment_id[1];

    $client_id = 'yourappclientid';
    $client_secret = 'yourappclientsecret';

    //GET ACCESS TOKEN
    $url = 'https://graph.facebook.com/oauth/access_token?client_id=' . 
        $client_id . '&client_secret=' . $client_secret . '&grant_type=client_credentials';

    $ch = curl_init();

    curl_setopt( $ch , CURLOPT_URL , $url );
    curl_setopt( $ch , CURLOPT_RETURNTRANSFER , 1 );

    $result = curl_exec( $ch );
    curl_close( $ch );

//RESPONSE LOOKS LIKE THIS
//{"access_token":"[access-token]","token_type":"bearer"}
    $access_token_data = json_decode( $result , true );

    $url = 'https://graph.facebook.com/' . 
        $comment_id . '?fields=permalink_url&access_token=' . $access_token_data['access_token'];

    $ch = curl_init();

    curl_setopt( $ch , CURLOPT_URL , $url );
    curl_setopt( $ch , CURLOPT_RETURNTRANSFER , 1 );

    $result = curl_exec( $ch );
    curl_close( $ch );

/*RESPONSE LOOKS LIKE THIS
{
    "permalink_url": "https://l.facebook.com/l.php?u=https\u00253A\u00252F\u00252Fmiplaylist.fun\u00252FyRz3RyE8314Q\u00252F\u00253Ffb_comment_id\u00253D2249651171827020_2250200588438745\u002526comment_id\u00253D2250200588438745&h=AT1z4LqCDM_CUg_0zvt1m5fKEPeCEQqrjvH8t27Wepuy3y_gFbwG6FaFY-bSHBH1-Ypfji7R-59HL0yBIeRrXuqBCRVWosvRGURvc3j55gG1iu4ClZQ51oFqouxWbh3-CNupERMQ-NvmstLXF3N_d_vejS2NzXXCZJE&s=1",
    "id": "2250200588438745"
}
*/

    $data = json_decode( $result , true );

    $permalink_url = explode( '?' , $data['permalink_url'] );
    parse_str( $permalink_url[1] , $data );

    $href = explode( '?' , $data['u'] );
    $href = $href[0];
    return $href;
}

?>

请享用!:D

原始答案:

好的,在这里...
我自己正在寻找答案,我想我想通了。

Webhook 发送这样的对象:

{“对象”:“应用程序”,“条目”:[{“id”:“325011391698942”,“时间”:1569257207,“更改”:[{“值”:{“id”:“2249651171827020_2250207455104725”,“从": {"name": "Daniel Morales Lira", "id": "10161627783545224"}, "message": "新回复", "created_time": "2019-09-23T16:46:46+0000", "父”:{“created_time”:“2019-09-23T16:46:17+0000”,“来自”:{“name”:“Daniel Morales Lira”,“id”:“10161627783545224”},“消息”: “新评论”,“id”:“2249651171827020_2250206608438143”}},“字段”:“plugin_comment_reply”}]}]}

在更改字段中,值 id 为:2249651171827020_2250207455104725

取下划线后的数字:2250207455104725

并像这样运行 FB API 调用:

FB.api(
    "/2250207455104725/" ,
    {
        'fields' : 'permalink_url'
    } ,
    function ( response ) 
    {
        if( window.console ) console.log( response );
        myfb.page_info = response;
    }
);

这是来自 javascript sdk。它在服务器上可能看起来不同。我稍后会更新。

你会得到这样的回应:

{"permalink_url":" https://l.facebook.com/l.php?u=https%3A%2F%2Fmiplaylist.fun%2FyRz3RyE8314Q%2F%3Ffb_comment_id%3D2249651171827020_2250207455104725%26comment_id%3D2250206608438143%26reply_comment_id%3D2250207455104725&h=AT3eO0qIkDRuNpTWhP650IQ9DKVJREdcQyYUknRo2CJdNFtnDDT8YgvOqfFxVph04FWkTI80rBaiehHllACgoZdSqilIFPlA- Jq8FK4Hy6YlrelNUtQRKIXCqNPmRgp_HsT0GbovLfV45uhI&s=1 ","id":"2250207455104725"}

嵌入在 permalink_url 中的是发表评论的 url,url 编码在 u 参数中。

更新:您可以从服务器端对该 URL 进行 API 调用:

https://graph.facebook.com/2250200588438745?fields=permalink_url&access_token=youraccesstoken

(将 2250200588438745 替换为您在 webhook 通知中的下划线后获得的数字)

于 2019-09-23T17:33:33.133 回答