Graph API — получение событий по владельцу/создателю

Есть ли способ с помощью Facebook Graph API получить список всех событий, созданных одним профилем? Наш клиент создает кучу событий, и мы хотим вывести их список. Я сказал, что им просто нужно убедиться, что они настроены на посещение мероприятия, потому что тогда я могу легко получить список мероприятий, которые посещает profileId, но мне любопытно, есть ли другой способ. Может запрос FQL? Однако они хотят запросить первичный ключ. И как бы выглядел этот FQL-запрос, если бы это можно было сделать ??


person jwynveen    schedule 08.06.2010    source источник


Ответы (4)


В основном я использовал 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;
}
person zechdc    schedule 17.11.2011
comment
Мне больше не нужно это делать, и у меня нет времени проверять это, но я предполагаю, что это работает, если вы потратили 6 часов. Спасибо! - person jwynveen; 19.11.2011
comment
Нельзя ли использовать поле часового пояса из самого события? - person Trefex; 28.05.2013
comment
Если у него есть это поле, я не понимаю, почему бы и нет. Прошло некоторое время с тех пор, как я смотрел на этот сценарий. Извините, я не могу больше помочь. - person zechdc; 29.05.2013

Вы можете использовать FQL. Простое использование создателя в качестве предложения where не работает, потому что создатель не индексируется. Однако обходной путь состоит в том, чтобы включить индексируемое предложение where и добавить создателя в дополнение. Бывший:

ВЫБЕРИТЕ eid, имя, изображение, создатель ИЗ события, ГДЕ eid В (ВЫБЕРИТЕ eid ИЗ event_member, ГДЕ uid = 12345) И создатель = 12345

person jhchen    schedule 19.08.2010

Это одна из тех проблем, «отсюда нет хорошего способа добраться туда». Вы не можете использовать FQL, потому что столбец создателя не индексируется. Лучшим решением, которое я могу придумать на данный момент, было бы использование Graph API для запроса соединения событий создателя и фильтрации любых событий, для которых они не являются создателем. Это будет не очень эффективно, так как вы будете скачивать информацию обо всех событиях пользователя, даже о тех, которые он не создавал. Итак, я бы поэкспериментировал с разбиением его на два запроса:

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

а затем, как только вы отфильтровали все события, которые они не создали:

graph.facebook.com/?ids=[event_ids for the user's events]
person Daniel Schaffer    schedule 21.06.2010
comment
Вы можете использовать FQL с предложением where eid in (выбрать eid из event_member, где uid=‹...›), как описано в jcmoney. - person Airsource Ltd; 05.10.2010

Ответ от zechdc идеален, но мне просто нужно было добавить strtotime, чтобы start_time работал.

$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']));
person geo    schedule 03.07.2014