Получение пользователям возможностей потоков через FQL (сообщения, комментарии, картинки, ссылки и т.д.)

Мне нужна помощь в получении пользователями элементов потока через FQL. У меня есть некоторые из подобных возвращений, но не могу понять, как получить других. Для access_token предоставляется каждое разрешение.


Позвольте мне показать вам, что я смог сделать:

сообщения, которые мне нравятся на лентах страниц:

fql?q=Select post_id, source_id, message FROM stream where source_id in (SELECT target_id FROM connection WHERE source_id=me() and is_following=1) AND likes.user_likes=1 LIMIT 10 Примечание. Это работало с середины декабря 2011 года, когда был отправлен исходный вопрос. Теперь (в середине февраля 2012 года) он больше не возвращает ничего, что понравилось потоку контента со страницы.

сообщений Мне понравились сообщения, которые я опубликовал:

fql?q=Select post_id, source_id, message FROM stream where source_id=me() AND likes.user_likes=1 LIMIT 10


Вот что мне не хватает

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

fql?q=Select post_id, source_id, message FROM stream where source_id in (SELECT uid1 FROM friend WHERE uid2=me()) AND likes.user_likes=1 & LIMIT 5000

сообщения, которые мне понравились на стенах событий:

????

сообщения, которые мне нравились на стенах групп:

????

Ответ 1

Вот что я придумал, начиная со времени публикации (10-22-2012):

Для статей друзей/подписчиков/страниц:

SELECT likes, post_id, actor_id, target_id, message
FROM stream
WHERE source_id IN (SELECT target_id FROM connection WHERE source_id=me())
AND likes.user_likes=1 

ИЛИ

Из таблицы 'like':

SELECT user_id, object_id, post_id
FROM like
WHERE user_id=me()

Но post_id всегда имеет значение null, а object_id не существует иногда при запросе через график api (т.е. graph.facebook.com/OBJECT_ID)

Для ссылок/внешних объектов - нет прямого способа получить информацию о записи в facebook, но она возвращает много результатов. Возможно, с другим запросом/мультилогическим поиском этих URL-адресов в потоковых или связанных таблицах.

SELECT url
FROM url_like
WHERE user_id=me()

Ответ 2

Я нашел решение, используя API Open Graph. Надеюсь, это тоже поможет?

Для выполнения этого действия вам необходимы права пользователя read_stream.

Пожалуйста, дайте мне знать, если мое решение работает для ваших требований.

Поскольку FQL не будет поддерживаться больше, чем V2.0, я бы предпочел использовать Open Graph API над FQL.

/*
*
*   Count my_user_id likes in wall of user "123"
*
*   ex: url = /123/posts
*   
*   setTimeout to avoid exceed api level rate limit, code 613
*/

function findMyLikes(url,my_user_id,count,callback) {
    console.log(url);
    FB.api(url, function (response) {
        if (response.data) {
            response.data.forEach(function (post) {
                //console.log(post);
                if (post.likes) {
                    post.likes.data.forEach(function (like) {
                        if (like.id == my_user_id) {
                            count++;
                        }
                    });
                }
            });
        }

        if (response.paging && response.paging.next) {
            setTimeout(function() {findMyLikes(response.paging.next,my_user_id,count,callback)},1000);
        } else {
            callback(count);
        }
    });

};

Я заметил, что это решение может занять некоторое время, если вы анализируете очень длинные каналы. Для этой проблемы у меня все еще остается открытый вопрос: получение всех желаний от конкретного пользователя на стене новостей с меньшим количеством вызовов API-интерфейса графика https://codereview.stackexchange.com/q/58270/50013?sem=2

Ответ 3

@Джефф Шерлок, партнер-разработчик в Facebook, говорит здесь, что "вы не можете вытащить все подобный человеку, использующему платформу fb. Мы ограничиваем его актерами, фильмами, спортивными командами и т.д. По соображениям конфиденциальности". Я знаю, что это не имеет большого смысла, поскольку вы можете запрашивать все виды других материалов с помощью API Facebook. Я предложил бы вам pic Ashton Kutcher и попытаться запросить его на своем столе... Подождите, вам нужно его разрешение; ]

Ответ 4

Проблема в том, что подобная таблица возвращает пустой post_id для всего. Однако он возвращает object_id для ваших любимых.

Вы можете поместить все эти object_ids в строку, разделенную запятыми, а затем отправить вызов API графа с помощью: ids = objectid1, objectid2, objectid3 и т.д.

Затем будут возвращены все найденные объекты. Таким образом, вы можете получить понравившиеся элементы для потоков.

Кажется, прошло 4 недели назад. Кажется, я не могу сделать это дальше, чем это.

В стороне, одна вещь, которую вы найдете, это то, что понравившиеся комментарии также возвращаются как object_ids в подобной таблице. Тем не менее, похоже, нет никакого способа узнать детали объекта этих object_ids. Немного тайны с этими.

Ответ 5

Если вы прочитали документацию таблицы like, в поле post_id появится примечание, которое гласит:

Эти идентификаторы сообщений должны быть запрошены из таблицы FQL потока.

Следовательно, когда вы сравниваете post_id как post_id<>"", он ничего не вернет вам, поскольку результат по умолчанию содержит пустые сообщения post_ids. И кажется, что когда вы запускаете запрос ниже:

SELECT user_id, object_id, post_id
FROM like
WHERE user_id=me()

Он возвращает страницы, понравившиеся пользователю и другим вещам, но не сообщениям фида.

Как вы уже хотите получать симпатии из таблицы потоков, вы просто хотите получить post_id из таблицы потоков. Чтобы получить post_id NewsFeed за данный день, вы можете попробовать выполнить запрос ниже.

SELECT post_id
FROM stream
WHERE filter_key IN (
    SELECT filter_key
    FROM stream_filter
    WHERE uid=me()
    AND type='newsfeed'
)
AND is_hidden = 0
AND description<>''

Возможно, вы захотите использовать поля Limit и Created_time, чтобы получить больше нет. сообщений. И как только вы используете над запросом в Multi-query, чтобы получить понравившиеся пользователю, вы наверняка получите понравившиеся вам данные за данный день.

Ответ 6

SELECT post_id, actor_id, message, type, permalink, attachment, likes, 
    comments, description, updated_time, created_time
FROM stream 
WHERE filter_key in (
        SELECT filter_key 
        FROM stream_filter 
        WHERE uid=me() AND type='newsfeed'
)

просто измените тип по вашему требованию

Ответ 7

Это невозможно с помощью GraphAPI. GraphAPI позволит вам видеть страницы, которые пользователь понравился с помощью /me/likes, но он не даст вам список всех предметов, отправленных на пользовательскую стену, которую они любили.

Подробнее об этом можно узнать в Документация для Facebook.

У меня нет опыта работы с FQL, как указано в вашем вопросе, но вопрос о переполнении стека, кажется, дает ответ на ваш вопрос.

Смотрите: API Facebook - "Все мои предпочтения" запрос

Отлично работает в тестировании.