既然可以透過寄信到Blogger發文
那有沒有可能在臉書粉絲專頁貼文?
答案是可以的!!
接下來可能會問:有沒有可能在個人臉書貼文
可惜答案是不可能~~,但是可以用分享的方式
臉書已經算是商業平台了,社交只是功能之一
粉絲頁的功能主要是為了跟成員互動,所以功能比較豐富
可以透過Facebook 粉絲專頁 API 來貼文
臉書提供的範例剛好就是PHP語言
-
curl –X POST “https://graph.facebook.com/v19.0/page_id/feed” \
-
–H “Content-Type: application/json” \
-
–d ‘{
-
“message”:”your_message_text”,
-
“link”:”your_url”,
-
“published”:”false”,
-
“scheduled_publish_time”:”unix_time_stamp_of_a_future_date”,
-
}’
臉書的說明如下:
若要發佈貼文至粉絲專頁,請傳送 POST 要求至 /page_id/feed 端點(其中 page_id 為粉絲專頁編號),並使用下列參數:
- message 設為貼文的文字
- link 設為您的網址(若要張貼連結)
- published 設為 true 以立即發佈貼文(預設),或設為 false 以稍後發佈。
- 若設為 false,請包含 scheduled_publish_time,並使用下列任一日期格式:
- 整數 UNIX 時間戳記(以秒為單位),例如 1530432000
- ISO 8061 時間戳記字串(例如 2018-09-01T10:15:30+01:00)
- 可用 PHP 語言 strtotime() 解析的字串(例如 +2 weeks、tomorrow)
- 若設為 false,請包含 scheduled_publish_time,並使用下列任一日期格式:
可以知道要用POST方法傳遞Json格式的資料
資料內要有:message、link、published
不過如果按照這個範例程式是無法在執行的,會有2個問題
1.執行這樣的curl 指令,必須經過轉譯
但是wordpress不能轉譯,而且wordpress有自己的函式wp_remote_post()
2.資料,少了重要的應用程式API編號:access_token
這個取得流程可以參考:Facebook粉專自動發文以及留言API
在多次嘗試以及餵狗之後,最後可以執行的程式碼如下
整體程式碼的架構跟之前的同步寄信到Blogger基本相同,都是藉由wordpress本身的觸發函示來執行相關程式碼
程式碼
-
//
-
function post_fb($new_status, $old_status, $post){
-
$postOne = get_post($post);
-
$postUrl = get_permalink($post);
-
$postBody= $postOne->post_content;
-
$postExcerpt= $postOne->post_excerpt; /* 文章摘要 */
-
$titleOne = $postOne->post_title;
-
$author = $post->post_author; /* Post author ID. */
-
$name = get_the_author_meta( ‘nickname’, $author );
-
//判斷文章狀態
-
if ( $new_status == “publish” && $old_status !== “publish” && $post->post_type == “post”)
-
{
-
$endpoint = ‘https://graph.facebook.com/v19.0/*********粉絲頁編號**********/feed’;
-
$body = [
-
‘message’ => $postExcerpt, /* 文章摘要 */
-
‘link’ => $postUrl,
-
‘published’ => ‘true’,
-
‘access_token’ =>‘—取得的長期權杖—‘
-
];
-
$body = wp_json_encode( $body );
-
$options = [
-
‘body’ => $body,
-
‘headers’ => [
-
‘Content-Type’ => ‘application/json’,
-
],
-
‘timeout’ => 60,
-
‘redirection’ => 5,
-
‘blocking’ => true,
-
‘httpversion’ => ‘1.0’,
-
‘sslverify’ => false,
-
‘data_format’ => ‘body’,
-
];
-
wp_remote_post( $endpoint, $options );
-
}
-
}
-
add_action(‘transition_post_status’,‘post_fb’,10,3);
主要的程式碼是#14~39,執行wp_remote_post()的參數設定
$endpoint 是要發出請求的網址
$body是陣列,架構為 key => value,之後用 wp_json_encode()轉為Json
$options是要帶入wp_remote_post()的參數陣列
後續編寫貼文的調整
過往沒有寫「 內容摘要」
但是為了讓分享內容時可以帶入訊息,所以要把寫在粉絲頁的訊息寫入摘要
程式裡的$postExcerpt就是用來接收文章的摘要
這應該是最簡單的方式
原本想嘗試能不能跳出一個訊息框,將訊息輸入後帶回程式
但是光想就很麻煩
備註
本篇文章發布之後,也同時貼文在粉絲頁
但是好像因為同時發文又寄信
導致網站速度變得很慢…