グラフ API - 所有者/作成者ごとにイベントを取得する
-
25-09-2019 - |
質問
Facebook Graph API を使用して、単一のプロファイルによって作成されたすべてのイベントのリストを取得する方法はありますか?私たちのクライアントは大量のイベントを作成しており、私たちはそれらすべてのリストを取得したいと考えています。私は、彼らがイベントに参加するように設定していることを確認する必要があるだけだと言いました。そうすれば、profileId が参加しているイベントのリストを簡単に取得できるからですが、別の方法があるかどうか知りたいです。たぶんFQLクエリでしょうか?ただし、主キーに対するクエリが必要なようです。それを実行する場合、その FQL クエリはどのようになりますか??
解決
基本的に使っていたのは、 FQL
@jhchen が提供してくれました。ただし、その使い方を理解するまでに約6時間かかりました FQL
. 。そこで私は、実用的なスクリプトを提供しようと考えました。完璧ではないのでバグを見つけたらアップデートしてください。
- ダウンロード Facebook PHP SDK
- 追加
YOUR_APP_ID
- 追加
YOUR_APP_SECRET
- 追加
PAGE_ID
- に変更を加えます
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;
}
他のヒント
あなたはFQLを使用することができます。同じように作成者を使用して、作成者が刃先交換式ではないので、節が動作しません。しかし、この問題を回避するには、ほかにクリエーターで割り出し可能where句とスローを含めることです。例:
SELECT EID、名前、PIC、クリエイターイベントFROM WHERE EID IN(SELECT EID event_member FROM WHERE UID = 12345)と作成者= 12345
これは、これらの問題を「ここからそこに着くために良い方法はありません」の一つです。作成者列がインデックス化されていないので、あなたは、FQLを使用することはできません。私は、現時点での考えることができる最善の解決策は、彼らがために作成者ではないことをクリエイターのイベント接続を照会するグラフAPIを使用して、任意のイベントをフィルタリングすることになります。あなたはすべてのユーザーのイベント、彼らが作成していないものも含めについての情報をダウンロードすることがありますので、これは、ひどく効率的ではありません。だから、私は2つのクエリに分解を試したいます:
graph.facebook.com/[user_id]/events?fields=id,owner&limit=1000
あなたはすべてのイベントを除外したら、その後、自分が作成していない。
graph.facebook.com/?ids=[event_ids for the user's events]
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']));