Получение пользовательских лайков потоковых элементов через FQL (посты, комментарии, картинки, ссылки и т. Д.) - PullRequest
11 голосов
/ 14 декабря 2011

Мне нужна помощь в получении пользовательских лайков потоковых элементов через 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

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

????

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

????

Ответы [ 7 ]

2 голосов
/ 22 октября 2012

Вот что я придумал на момент публикации (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 

OR

Из таблицы «Мне нравится»:

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

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

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

SELECT url
FROM url_like
WHERE user_id=me()
1 голос
/ 13 августа 2014

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

Для выполнения этого действия вам нужно разрешение на чтение от пользователя.

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

Поскольку 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 Graph https://codereview.stackexchange.com/q/58270/50013?sem=2

0 голосов
/ 20 июля 2012
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'
)

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

0 голосов
/ 18 февраля 2012

Если вы читаете документацию таблицы как , поле 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, чтобы получить больше no.сообщений.И как только вы используете вышеупомянутый запрос в Multi-query, чтобы получить лайки для пользователя, вы определенно получите лайки за данный день.

0 голосов
/ 13 февраля 2012

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

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

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

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

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

0 голосов
/ 12 января 2012

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

0 голосов
/ 11 января 2012

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

Выподробности см. в документации Facebook .

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

См .: API Facebook - запрос "Все мои лайки"

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...