我试图从plugin_comment webhook中检索Facebook评论插件中配置的href属性,这样我就可以知道评论来源并向发表评论的内容的所有者触发通知。
我已经审核了webhook评论的facebook文档以及图API返回的评论数据,但我无法找到有关如何获取评论源URL的提示。
是否有可能获得该值?
注意:内容的所有者不属于我们公司,因此我不能使用审核工具。
答案 0 :(得分: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”,“来自”:{“名称”:“丹尼尔·莫拉莱斯(Daniel Morales) Lira”,“ id”:“ 10161627783545224”},“ message”:“新回复”, “ created_time”:“ 2019-09-23T16:46:46 + 0000”,“ parent”:{“ created_time”: “ 2019-09-23T16:46:17 + 0000”,“来自”:{“名称”:“丹尼尔·莫拉莱斯里拉”, “ id”:“ 10161627783545224”},“ message”:“新评论”,“ id”: “ 2249651171827020_2250206608438143”}},“字段”: “ plugin_comment_reply”}]}]}
在changes字段中,值ID为:2249651171827027020_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通知中的下划线后得到的数字)