GoogleAppScriptからFacebookに投稿

この記事は2017年07月23日にqiitaに投稿した内容です。

環境

V2.10

概要

GoogleAppScriptを使用して一定時間ごとにFacebookにメッセージを投稿します

Facebookアプリの作成

https://developers.facebook.com/apps/

・「新しいアプリの追加」を押す ・「表示名」を入力する(例:TestGAS) ・「アプリIDを作成したください」を押す ・セキュリティチェックで文字を入力する

アクセストークンの取得

https://developers.facebook.com/tools/explorer/

・「グラフAPIエクスプローラ」の右側の「アプリ」と表示されているドロップボックスを作成したアプリに変更する(例:TestGAS)  最初は「GraphApiExplorer」と表示されているかもしれない ・「トークンを取得」を押す ・「ユーザーアクセストークンを取得」を押す ・「publish_actions」にチェックする ・「アクセストークンを取得」を押す  「アクセストークン」に表示される このアクセストークンは短期で1時間くらいしか有効じゃない

長期アクセストークンの取得

https://developers.facebook.com/tools/explorer/

・「GET/V2.10/」の横に「oauth/access_token?grant_type=fb_exchange_token&client_id=AAA&client_secret=BBB&fb_exchange_token=XXX」と入力して、「送信」  AAAはアプリID(ダッシュボードで確認)  BBBはappsecret(ダッシュボードで確認)  XXXは取得したアクセストークン ・返ってきた長期アクセストークンをメモる  

ユーザーIDの確認

https://developers.facebook.com/tools/explorer/

・「GET/V2.10/」の横に「me?fields=id,name」と入力して、「送信」

投稿のテスト

https://developers.facebook.com/tools/explorer/

・「GET/V2.10/」の「GET」を「POST」に変更 ・「me/feed?message=TestMessage」と入力して「送信」  TestMessageが投稿される

ブラウザからUrlで投稿

・ブラウザのURL入力欄で「https://graph.facebook.com/me/feed?method=POST&version=v2.10&message=TestMessage&access_token=XXX」と入力してリターン  meの部分はユーザーIDでも可能  XXXは取得した長期アクセストーク

アクセストークンデバッガ

https://developers.facebook.com/tools/debug/accesstoken/

アクセストークンを入力すると有効期限等の情報が得られる

GoogleAppScriptの作成

https://script.google.com/macros/d/

・下記のスクリプトをコピペして置き換える

アクセストークン用スクリプトプロパティの作成

https://script.google.com/macros/d/

・「ファイル」>「プロジェクトのプロパティ」を押す ・「スプリプトのプロパティ」タブに変更する ・「行の追加」を押す ・「名前」にプロパティ名を入れる(例:accessToken) ・「名前」欄の右側を押すと「値」入力欄が出るので取得した長期アクセストークンを入力する  PropertiesService.getScriptProperties().getProperty('accessToken')でアクセスできる

一定時間毎に処理を行う

GoogleAppScriptを使用して一定時間毎にFirebaseにレコードを追加するを参照する

スクリプト

function setTrigger()
{
  //十分毎に処理を実行
  var executeFuncName = "httpRequestFacebookPost";
  deleteTriggers( executeFuncName );
  ScriptApp.newTrigger( executeFuncName ).timeBased().everyMinutes( 10 ).create();
}

function deleteTriggers( executeFuncName )
{
  //登録されているトリガーを削除
  var triggers = ScriptApp.getProjectTriggers();
  for( var i = 0; i < triggers.length; i++ )
  {
    if ( triggers[ i ].getHandlerFunction() == executeFuncName )
      ScriptApp.deleteTrigger( triggers[ i ] );
  }
}

function httpRequestFacebookPost()
{
  var uri = "https://graph.facebook.com/me/feed?method=POST&version=v2.10";
  var message = "TestMessage4";
  var accessToken = PropertiesService.getScriptProperties().getProperty('accessToken');
  UrlFetchApp.fetch( uri + "&message=" + message + "&access_token=" + accessToken );
}