オフラインアクセス(3/3)

では今回は、前回取得したアクセストークンを使用して、Facebookにオフラインアクセスしてみましょう。fb.php を以下のように修正して、コマンドラインPHPを実行します。

<?php

require 'facebook/facebook.php';

$user_token = 'アクセストークン';

$facebook = new Facebook(array(
    'appId' => 'アプリID',
    'secret' => 'アプリの秘訣',
    'cookie' => false,
));

// タイムゾーンを変更する関数
function conv_tz($y=NULL, $m=NULL, $d=NULL, $h=0, $i=0, $s=0)
{
    if( is_null($y) ) $y = date("Y");
    if( is_null($m) ) $m = date("m");
    if( is_null($d) ) $d = date("d");

    $before_tz = date_default_timezone_get();

    date_default_timezone_set('America/Los_Angeles');
    $ts = mktime($h, $i, $s, $m, $d, $y);

    date_default_timezone_set($before_tz);

    return $ts;
}

$res = $facebook->api(
        "/me/events",
        "POST",
        array(
            "access_token"  => $user_token,
            "name"          => "イベント名を適当に",
            "description"   => "イベントの説明です",
            "privacy"       => "SECRET", // or OPEN or CLOSED
            "start_time"    => conv_tz(2011, 3, 23, 15, 30),
            "end_time"      => conv_tz(2011, 3, 25, 10),
        )
    );

var_dump($res);

このように実行します。成功すればイベントIDが返ってきます。

> php fb.php

array(1) {
  ["id"]=>
  string(15) "イベントID"
}

少し説明を。

apiの引数

  • access_token:これに前回取得したアクセストークンをセットします
  • name:イベント名です
  • description:イベントの説明です
  • privacy:イベントの公開設定です。指定できるのは3種類です。こちら から引用します
    • OPEN:イベント情報は公開され、誰でも参加 (参加者リストに名を連ねる) できます。
    • CLOSED:イベント情報は公開されますが、イベントの作成者が招待しないと参加できません。
    • SECRET:非公開。カレンダーに自分用の予定を入れたりするのに使うと良いでしょう。
  • start_time:イベントの開始日時です(※)
  • end_time:イベントの終了日時です(※)

さらに詳しい情報は、こちら をご覧下さい

※指定する日時について

これが結構厄介なのですが、日付文字列 or タイムスタンプ を受け付けるようになってまして、普通に"2010-01-01" とか、mktime() 関数で簡単かと思いきや、どうもイベントのタイムゾーンFacebook内部では太平洋標準時が使用されているようで、日本時間だと変な時間になってしまいます。タイムゾーン付き日付でもだめっぽいです。しかも太平洋標準時はサマータイムが導入されていますので、さらにややこいです。まぁアメリカ人が作ったシステムなので、そういうこともありますね。

# ブラウザでイベントを作成する際にサマータイムの切り替わり日 2011/3/13 は2:00が選択できなくなっています。

なので、conv_tz関数で、America/Los_Angeles タイムゾーンのタイムスタンンプを取得するようにしました。mktime 関数はサマータイムも考慮してくれるようなので、それ程難しくないですね。