Graph API - получать события от владельца/создателя

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

Ответы

Ответ 1

В основном я использовал FQL, предоставленный @jhchen. Однако мне понадобилось около 6 часов, чтобы выяснить, как использовать этот FQL. Поэтому я решил, что предоставил бы вам рабочий script. Это не идеально, поэтому, пожалуйста, обновите его, если найдете ошибку.

  • Загрузить Facebooks 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;
}

Ответ 2

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

SELECT eid, name, pic, creator FROM event WHERE eid IN (SELECT eid FROM event_member WHERE uid = 12345) AND creator = 12345

Ответ 3

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

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

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

graph.facebook.com/?ids=[event_ids for the user events]

Ответ 4

Ответ от 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']));