13

Facebook Graph API を使用して、単一のプロファイルによって作成されたすべてのイベントのリストを取得する方法はありますか? 私たちのクライアントは一連のイベントを作成し、それらすべてのリストを取得したいと考えています。profileId が参加しているイベントのリストを簡単に取得できるため、イベントに参加するように設定するだけでよいと言いましたが、別の方法があるかどうか知りたいです。多分FQLクエリ?ただし、主キーに対するクエリが必要なようです。そして、それがそれを行う方法である場合、その FQL クエリはどのように見えるでしょうか??

4

4 に答える 4

16

私は基本的にFQL@jhchenが提供したものを使用しました。しかし、その使い方を理解するのに約6時間かかりましたFQL。そこで、実用的なスクリプトを提供することにしました。完璧ではないので、バグを見つけたら更新してください。

  1. FacebookのPHP SDKをダウンロード
  2. 追加YOUR_APP_ID
  3. 追加YOUR_APP_SECRET
  4. 追加PAGE_ID
  5. 必要に応じてステートメントを変更しFQLます。FQL ドキュメント

それ以外は、準備万端です。また、デフォルトのタイムゾーンを に設定しましたAmerica/Los_Angeles。これはおそらく一部の人にとっては問題を引き起こすでしょう。タイムゾーンを処理するためのより良い方法を誰かが持っているなら、私に知らせてください.

PHP コード:

<?php
require_once("php/facebook.php");

date_default_timezone_set('America/Los_Angeles');

function display_events()
{
    $app_id = 'YOUR_APP_ID';
    $secret = 'YOUR_APP_SECRET';
    $page_id = 'PAGE_ID';

    $config = array();
    $config['appId'] = $app_id;
    $config['secret'] = $secret;
    $config['fileUpload'] = false; // optional

    $facebook = new Facebook($config);

    $fql = 'SELECT 
                eid, 
                name, 
                pic_square, 
                creator,
                start_time,
                end_time
            FROM event 
            WHERE eid IN 
                (SELECT eid 
                    FROM event_member 
                    WHERE uid='.$page_id.'
                ) 
            AND end_time >= ' . mktime() . '
            ORDER BY start_time ASC
    ';

    $ret_obj = $facebook->api(array(
        'method' => 'fql.query',
        'query' => $fql,
    ));

    $html = '';                            
    foreach($ret_obj as $key)
    {
        $facebook_url = 'https://www.facebook.com/event.php?eid=' . $key['eid'];

        $start_time = date('M j, Y \a\t g:i A', $key['start_time']);
        $end_time = date('M j, Y \a\t g:i A', $key['end_time']);

        $html .= '
            <div class="event">
                <a href="'.$facebook_url.'">
                    <img src="'.$key['pic_square'].'" />
                </a>
                <span>
                    <a href="'.$facebook_url.'">
                        <h2>'.$key['name'].'</h2>
                    </a>
                    <p class="time">'.$start_time.'</p>
                    <p class="time">'.$end_time.'</p>
                </span>
            </div>
        ';
    }

    echo $html;
}
于 2011-11-17T01:55:33.213 に答える
12

FQLを使用できます。作成者はインデックスに登録できないため、where句として作成者を使用するだけでは機能しません。ただし、回避策は、インデックス可能なwhere句を含め、さらに作成者をスローインすることです。元:

SELECT eid、name、pic、creator FROM event WHERE eid IN(SELECT eid FROM event_member WHERE uid = 12345)ANDcreator = 12345

于 2010-08-19T00:45:18.120 に答える
2

これは、「ここからそこに到達するための良い方法はありません」という問題の1つです。作成者の列はインデックスに登録されていないため、FQLを使用することはできません。現時点で考えられる最善の解決策は、Graph APIを使用して作成者のイベント接続を照会し、作成者ではないイベントを除外することです。ユーザーが作成しなかったイベントも含め、すべてのユーザーのイベントに関する情報をダウンロードするため、これはそれほど効率的ではありません。それで、私はそれを2つのクエリに分解して実験します:

graph.facebook.com/[user_id]/events?fields=id,owner&limit=1000

次に、作成されなかったすべてのイベントを除外すると、次のようになります。

graph.facebook.com/?ids=[event_ids for the user's events]
于 2010-06-21T03:10:39.597 に答える
0

zechdc からの回答は完璧ですが、start_time が機能するように strtotime を追加する必要がありました。

$start_time = date('M j, Y \a\t g:i A', strtotime($key['start_time']));
$end_time = date('M j, Y \a\t g:i A', strtotime($key['end_time']));
于 2014-07-03T05:54:31.347 に答える