update.自分自身やfacebookページのタイムラインへ、pythonから投稿してみよう。webhookの仕組みがないため、投稿用のfacebookアプリを作らなければならない。facebookを操作するにはアクセストークンが必要だが、facebookはOAuth認証が必須なため、CLIからアクセストークンを取得することは難しい(headlessなブラウザを使いレスポンスを解析すれば不可能ではないが)。そこで今回は、localhost上にpythonでCGIサーバを起動し、OAuthのコールバックをCGIで処理してアクセストークンを取得することにする。groupへも投稿できるようにしたかったが、そのためにはfacebook運営者によるfacebookアプリの承認が必要なようで、残念ながら今回は断念。2.5ソースコードhttps://github.com/nmatsui/post_facebook_using_pythonfacebookアプリの作成まずfacebookアプリを作成する。作成したfacebookアプリの情報や、投稿するfacebookページの情報を記載した設定ファイルを作成する。}}環境準備facebookアプリができたので、次はpython環境を準備する。ライブラリのインストールconf.jsonと同じ場所にrequirements.txtを作成し、以下3つのライブラリをpipを用いてインストールする。今回は、以下3つの権限範囲を指定する。権限(公開プロフィールを取得する権限)が与えられるため、今回取得するアクセストークンはこれら4つの権限範囲内での操作が許可される。indexfacebookアプリのOAuth認証URLを生成し、ブラウザにそのリンクを表示する。conf.jsonを読み込み下記フォーマットのOAuth認証URLを生成する。print(html.encode('utf-8'))main()コールバックURLはそのままだとURLパラメータとして渡せないので、urllib.quote_plus()でエスケープしている。生成したURLをリンクとして表示する。</body></html>get_tokenfacebookのOAuth認証機能からコールバックされ、認証コードを取得する。認証コードを用いてfacebookのAPIから以下のアクセストークンを取得し、jsonファイルとして保存する。Tokenを取得する。取得したアクセストークンは、token.jsonに保存する。APIを利用するために、requestsライブラリを利用している。Tokenは、通常では取得後1〜2時間で有効期限が切れる。APIを用いて60日有効なトークンに交換している。取得したアクセストークンを表示する。Token</b>を取得しました。}}に書き出しました。<b>次のエラーが発生しました。</body></html>CGIプログラムの動作とアクセストークン取得では、CGIを動作させてアクセストークンを取得する。今回は検証なので、nginxやapache等のhttpdは用いずにpython2.7のCGIHTTPServerで代用する。CGIHTTPServer起動conf.jsonやcgi-binディレクトリ、templatesディレクトリがあるディレクトリから、以下のコマンドでCGIHTTPServerを起動する。CGIHTTPServerindexへアクセスCGIHTTPServerを起動したPCのブラウザから、次のURLへアクセスする。http://localhost:8000/cgi-bin/indexOAuthで認証されるget_tokenをクリックするとfacebookアプリの認証が行われ、権限の承認を問われる。ユーザに与える権限のチェック承認する権限のチェックを行う。このfacebookアプリは未承認のため、グループへの書き込みなど権限の一部が無効化されている旨の警告が表示される。投稿範囲のチェックfacebookアプリが自分に成り代わって投稿する公開範囲を指定する。facebookページへの権限チェックfacebookページの管理権限と投稿権限のチェックを行う。facebookページへの投稿に関しては、未承認アプリでも警告は出ない。アクセストークンの取得と表示CGIがアクセストークンを取得してtoken.jsonに保存し、画面へも表示する。}}facebookへの投稿アクセストークンが取得できたので、pythonからfacebookへ投稿する。pythonスクリプトSDKとアクセストークンを用いて自分自身とfacebookページのEndpointを取得し、メッセージを書き込む。自分のタイムラインとfacebookページのタイムラインでは、書き込みメソッドが異なることに注意。自分のタイムラインへ投稿してみる。これはpythonスクリプトからの投稿のテストです。これはpythonスクリプトからの投稿のテストです。今回の実験用に作成したfacebookページのタイムラインへ投稿してみる。これはpythonスクリプトからの投稿のテストです。これはpythonスクリプトからの投稿のテストです。最後にただpythonからfacebookへ投稿したかっただけなのに、非常に長い道のりだったが、自分のタイムラインやfacebookページのタイムラインへ無事に投稿することができた。創業40年超のSIerです。upLoginユーザーは見つかりませんでした。