Как я могу получить количество фотографий на Facebook? - PullRequest
8 голосов
/ 22 февраля 2012

Используя Graph API, я могу получать комментарии, количество лайков как внутреннего, так и внешнего URL Facebook Но я могу получить только количество акций внешнего URL-адреса Facebook

Например:

https://graph.facebook.com/?ids=http://www.youtube.com/watch?v=tu8BNocnVzc

Но не в фейсбуке

http://graph.facebook.com/?ids=http://www.facebook.com/photo.php?fbid=364861533533284

Как я могу получить общие номера объекта Facebook?

(я могу получать лайки и комментарии, используя этот URL http://graph.facebook.com/364861533533284)

Ответы [ 3 ]

2 голосов
/ 07 июня 2013

Предыдущий ответ верен в одном - вы должны использовать FQL. Это медленнее, но работает. В остальном - он не будет работать вообще, потому что API не будет возвращать share_count для ссылки на фотографию, поскольку он является внутренним для Facebook и имеет параметры PHP в самой ссылке или по какой-то другой неизвестной причине.

Плохо, что API не возвращает такую ​​информацию, поскольку в большинстве случаев она общедоступна, поэтому им следует это реализовать, но это не сработает.

Хотя этот тип работы и заключается в том, чтобы получить ссылку на пост, связанную с этой фотографией, и подсчитать ее долю.

Вот используемый код: `

       $photo_link = $photo['link'];
       //First Query - Find the ID of the Post for the Photo
       $query_post_id = "SELECT post_id, permalink FROM stream WHERE source_id = '[PAGE_OR_USER_ID]' AND permalink = '$photo_link'";
       $fb_post_info = $facebook->api(array('method' => 'fql.query', 'query' => $query_post_id));
       $id = $fb_post_info['0']['post_id'];
       $whole_id = $fb_post_info['0']['post_id'];
       $fb_post_id = explode('_', $id);

       $fb_post_id = $fb_post_id['1'];


       //Second Query - Find the Share Count Using the Post Link (not the Photo link)
       $query_share_count = "SELECT share_count FROM link_stat WHERE url='http://www.facebook.com/[PAGE_OR_PERSONAL_USERNAME]/posts/$fb_post_id'";

       $post_info = $facebook->api(array('method' => 'fql.query', 'query' => $query_share_count));
       $share_count = $post_info['0']['share_count'];
       echo $share_count;
        ?></span>`

Первый запрос возвращает массив идентификатора поста и постоянной ссылки. Идентификатор записи выглядит следующим образом: PAGEID_POSTID, например, 3333333333_453536456464, поэтому мы должны разделить его, чтобы получить только вторую часть, которая представляет собой идентификатор записи, найденный в постоянной ссылке.

После этого мы создаем нашу ссылку для поста, которая обычно выглядит следующим образом: facebook.com/USERNAME/posts/POSTID, а затем получаем количество акций для этой ссылки. Здесь вы также можете использовать Graph API для получения share_count.

Это единственный способ получить информацию, которую я нашел до сих пор - она ​​немного неаккуратная, потому что FQL медленнее, и иногда обновления для ресурсов не появляются в течение определенного времени, но, как я уже сказал - это вроде работает.

0 голосов
/ 04 июня 2014

Если к фотографии относится пост и post_id - вы можете получить количество акций из таблицы stream , в противном случае у вас будут только ссылки, количество комментариев.

post_id также сохраняется в photo table как page_story_id ,

в противном случае вы можете попытаться подделать его (объединение идентификаторов владельца и объекта), но теперь это всегда так,

или выможет попытаться найти соответствующую запись по source + permalink, или attachment.media.link, или create_time (используйте ограничение в этом случае из-за хитрого поведения FB)

Но я думаю, что page_story_id пустов фото таблица, когда нет связанных постов.

Пример (php):

$query = array(
    'photoInfo' => "SELECT object_id, aid, album_object_id, comment_info.comment_count, like_info.like_count, page_story_id, concat(owner, '_', object_id), owner, pid, images  FROM photo where object_id='{$fbActivity['object_id']}'",
    'postInfo'  => "SELECT post_id, share_count, like_info.like_count, comment_info.comment_count, message FROM stream WHERE
                        post_id IN (SELECT page_story_id FROM #photoInfo)
                        OR post_id IN (SELECT anon FROM #photoInfo)
                    ' //OR (source_id IN (SELECT owner FROM #photoInfo) AND permalink = '{$fbActivity['link']}') LIMIT 999
);
$t = $publicFb->api('/fql', 'GET', array('q' => $query));
0 голосов
/ 22 января 2013

Вы должны использовать FQL и запросить таблицу фотографий https://developers.facebook.com/docs/reference/fql/photo или таблицу link_stat https://developers.facebook.com/docs/reference/fql/link_stat..

Вы можете увидеть, как это дает результаты здесь: http://developers.facebook.com/tools/explorer?fql=SELECT%20url%2C%20normalized_url%2C%20share_count%2C%20like_count%2C%20comment_count%2C%20total_count%2C%0Acommentsbox_count%2C%20comments_fbid%2C%20click_count%20FROM%20link_stat%20WHERE%20url%3D%22http%3A%2F%2Fwww.facebook.com%2Fphoto.php%3Ffbid%3D364861533533284%22

А вот как вы можете использовать FQL-вызовы для получения результата:

    <?php 
        $img_url='http://www.facebook.com/photo.php?fbid=364861533533284';

        $query_url="https://api.facebook.com/method/fql.query?query=
                    select%20total_count,share_count,like_count,comment_count,
                    commentsbox_count%20from%20link_stat%20where%20
                    url='" . $directory_url . "'&format=json";

        $response = file_get_contents($query_url);
        $response_array = json_decode($response, true);
        $params=$response_array[0];


        $total_count=$params['total_count'];
        $like_count=$params['like_count'];
        $comment_count=$params['comment_count'];
        $share_count=$params['share_count'];

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