Подсчет лайков Facebook с помощью Graph API - PullRequest
4 голосов
/ 23 октября 2010

Facebook исправил /likes в Graph API. /likes теперь возвращает полный список пользователей, которым понравился определенный объект на графике (фотографии, альбомы и т. Д.). В прошлом он возвращает только 3 - 5 пользователей.

Мой вопрос: как вы подсчитываете общее количество лайков, не анализируя весь JSON и не получая количество элементов? Меня интересует только количество лайков; Мне не интересны пользователи, которые подарили лайки.

Кажется немного дороже получить весь набор данных JSON для подсчета.

EG: https://graph.facebook.com/161820597180936/likes

Эта фотография имеет более 1000 лайков.

Ответы [ 2 ]

2 голосов
/ 01 февраля 2011

Поскольку строка представляет собой JSON, почему бы не преобразовать ее в стандартный объект .net и использовать .Count для создаваемого массива. Затем кешируйте эту информацию в течение 15 или более минут (в зависимости от того, какую устаревшую информацию вы хотите получить).

Вышеописанный метод довольно сложен, так как вы по сути собираетесь искать строку неизвестное количество раз, возвращать индекс, сравнивать его с int, добавлять другой индекс и так далее. А вышеприведенный C # не работает (при условии, что вы используете C #).

Вместо этого используйте что-то вроде этого:

public static T FromJson<T>(this string s)
{
    var ser = new System.Web.Script.Serialization.JavaScriptSerializer.JavaScriptSerializer();
    return ser.Deserialize<T>(s);
}

где этот метод является методом расширения, который берет правильно отформатированную строку JSON и преобразует ее в объект T, например

    var result = // call facebook here and get your response string
    List<FacebookLikes> likes = result.FromJson <List<FacebookLikes>>();
    Response.Write(likes.Count.ToString());

    // now cache the likes somewhere, and get from cache next time.

Я не уверен в производительности этого, не проводил никаких испытаний, но для меня это выглядит намного аккуратнее и намного более читабельным. И, видя, как вы кешируете данные, я бы начал читать с помощью предыдущего метода.

1 голос
/ 28 декабря 2010

Почему стоит анализировать весь набор данных? Это должно занять миллисекунды:

public static int CountLikes(string dataSet)
{
    int i = 0;
    int j = 0;
    while ((i = dataSet.IndexOf('"id":', i)) != -1)
    {
        i += 5;
        j++;
    }
    return j;
}

Вы также можете добавить параметр limit = #, например:

https://graph.facebook.com/161820597180936/likes?limit=1000

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