網站 / 從wordpress發佈新文章同步發文到臉書粉絲專頁

既然可以透過寄信到Blogger發文

那有沒有可能在臉書粉絲專頁貼文?

答案是可以的!!

接下來可能會問:有沒有可能在個人臉書貼文

可惜答案是不可能~~,但是可以用分享的方式


臉書已經算是商業平台了,社交只是功能之一

粉絲頁的功能主要是為了跟成員互動,所以功能比較豐富

可以透過Facebook 粉絲專頁 API 來貼文

臉書提供的範例剛好就是PHP語言

  1. curl X POST “https://graph.facebook.com/v19.0/page_id/feed” \
  2.      –H “Content-Type: application/json” \
  3.      –d ‘{
  4.            “message”:”your_message_text”,
  5.             “link”:”your_url”,
  6.             “published”:”false”,
  7.             “scheduled_publish_time”:”unix_time_stamp_of_a_future_date”,
  8.             }’

臉書的說明如下:

若要發佈貼文至粉絲專頁,請傳送 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)

可以知道要用POST方法傳遞Json格式的資料

資料內要有:message、link、published

不過如果按照這個範例程式是無法在執行的,會有2個問題

1.執行這樣的curl 指令,必須經過轉譯

但是wordpress不能轉譯,而且wordpress有自己的函式wp_remote_post()

2.資料,少了重要的應用程式API編號:access_token

這個取得流程可以參考:Facebook粉專自動發文以及留言API

在多次嘗試以及餵狗之後,最後可以執行的程式碼如下

整體程式碼的架構跟之前的同步寄信到Blogger基本相同,都是藉由wordpress本身的觸發函示來執行相關程式碼

程式碼

  1. //
  2. function post_fb($new_status, $old_status, $post){
  3.     $postOne = get_post($post);
  4.     $postUrl = get_permalink($post);
  5.     $postBody= $postOne->post_content;
  6.     $postExcerpt= $postOne->post_excerpt; /* 文章摘要 */
  7.     $titleOne = $postOne->post_title;
  8.     $author = $post->post_author; /* Post author ID. */
  9.     $name = get_the_author_meta( ‘nickname’, $author );
  10. //判斷文章狀態
  11. if ( $new_status == “publish” && $old_status !== “publish” && $post->post_type == “post”)
  12.   {
  13.     $endpoint = ‘https://graph.facebook.com/v19.0/*********粉絲頁編號**********/feed’;
  14.     $body = [
  15.                ‘message’ => $postExcerpt, /* 文章摘要 */
  16.                ‘link’ => $postUrl,
  17.                ‘published’ => ‘true’,
  18.                ‘access_token’ =>‘—取得的長期權杖—‘
  19.             ];
  20.     $body = wp_json_encode( $body );
  21.     $options = [
  22.                 ‘body’ => $body,
  23.                 ‘headers’ => [
  24.                 ‘Content-Type’ => ‘application/json’,
  25.               ],
  26.               ‘timeout’ => 60,
  27.               ‘redirection’ => 5,
  28.               ‘blocking’ => true,
  29.               ‘httpversion’ => ‘1.0’,
  30.               ‘sslverify’ => false,
  31.               ‘data_format’ => ‘body’,
  32.               ];
  33.     wp_remote_post( $endpoint, $options );
  34.   }
  35. }
  36. 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就是用來接收文章的摘要

這應該是最簡單的方式

原本想嘗試能不能跳出一個訊息框,將訊息輸入後帶回程式

但是光想就很麻煩

備註

本篇文章發布之後,也同時貼文在粉絲頁

但是好像因為同時發文又寄信

導致網站速度變得很慢…