Как отфильтровать наиболее активных пользователей на странице поклонников?

Я создаю новый веб-сайт. Я хочу продвигать его, используя другой мой веб-сервис, связанный с темой. Я хочу отправить подарки людям, которые популяризировали мой первый сайт и фан-сайт. Как отфильтровать позволяет сказать 20 пользователей, которые любят/разделяют/комментируют большинство моих сообщений?

Любой подходящий язык программирования будет хорошим.

[EDIT]

Хорошо... честно говоря, я ищу способ разобрать фан-страницу, которая не моя. Я хочу отправлять подарки самым активным пользователям фан-сайта моего конкурса, чтобы просто подкупить их:)

Ответ 1

Есть несколько способов, я начну с самых простых...

  • Скажите, есть ли название бренда или #hashtag, тогда вы можете использовать API поиска как таковой: https://graph.facebook.com/search?q=watermelon&type=post&limit=1000, а затем повторить по данным, скажем, последние 1000 (параметр limit), чтобы узнать пользователя режима (который больше всего подходит) из всех статусов.

  • Скажите, что это только страница, тогда вы можете получить доступ к конечной точке /<page>/posts (например: https://developers.facebook.com/tools/explorer?method=GET&path=cocacola%2Fposts), как это 'дам вам список последних сообщений (они разбиты на страницы, чтобы вы могли перебирать результаты), и это будет включать список людей, которые любят сообщения и комментируют их; вы можете узнать пользователя режима и т.д.

В терминах кода вы можете использовать что-либо, вы можете даже запустить его локально на своем компьютере с помощью простого веб-сервера (например, MAMP или WAMP и т.д.) или CLI. Ответ - это все JSON, и современные языки способны справиться с этим. Вот быстрый пример, который я применил для первого метода в Python:

import json
import urllib2
from collections import Counter

def search():
  req = urllib2.urlopen('https://graph.facebook.com/search?q=watermelon&type=post')
  res = json.loads(req.read())
  users = []

  for status in res['data']:
    users.append(status['from']['name'])

  count = Counter(users)

  print count.most_common()

if __name__ == '__main__':
  search()

Я застрял на github, если вы захотите обратиться к нему позже: https://github.com/ahmednuaman/python-facebook-search-mode-user/blob/master/search.py

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

Ответ 2

Основываясь на Ahmed Nuaman answer (пожалуйста, дайте им +1), я подготовил этот фрагмент кода:

пример использования:

Для анализа наиболее активных пользователей facebook http://www.facebook.com/cern

$ python FacebookFanAnalyzer.py cern likes

$ python FacebookFanAnalyzer.py cern comments

$ python FacebookFanAnalyzer.py cern likes comments

примечания: общие и внутренние комментарии не поддерживаются

file: FacebookFanAnalyzer.py

# -*- coding: utf-8 -*-
import json
import urllib2
import sys
from collections import Counter
reload(sys)
sys.setdefaultencoding('utf8')
###############################################################
###############################################################
#### PLEASE PASTE HERE YOUR TOKEN, YOU CAN GENERETE IT ON:
####    https://developers.facebook.com/tools/explorer
#### GENERETE AND PASTE NEW ONE, WHEN THIS WILL STOP WORKING

token = 'AjZCBe5yhAq2zFtyNS4tdPyhAq2zFtyNS4tdPw9sMkSUgBzF4tdPw9sMkSUgBzFZCDcd6asBpPndjhAq2zFtyNS4tsBphqfZBJNzx'

attrib_limit = 100
post_limit = 100
###############################################################
###############################################################


class FacebookFanAnalyzer(object):

    def __init__(self, fanpage_name, post_limit, attribs, attrib_limit):
        self.fanpage_name = fanpage_name
        self.post_limit = post_limit
        self.attribs = attribs
        self.attrib_limit = attrib_limit
        self.data={}

    def make_request(self, attrib):
        global token
        url = 'https://graph.facebook.com/' + self.fanpage_name + '/posts?limit=' + str(self.post_limit) + '&fields=' + attrib + '.limit('+str(self.attrib_limit)+')&access_token=' + token
        print "Requesting '" + attrib + "' data: " + url
        req = urllib2.urlopen(url)
        res = json.loads(req.read())

        if res.get('error'):
            print res['error']
            exit()

        return res

    def grep_data(self, attrib):
        res=self.make_request(attrib)
        lst=[]
        for status in res['data']:
            if status.get(attrib):
                for person in status[attrib]['data']:
                    if attrib == 'likes':
                        lst.append(person['name'])
                    elif attrib == 'comments':
                        lst.append(person['from']['name'])
        return lst


    def save_as_html(self, attribs):
        filename = self.fanpage_name + '.html'
        f = open(filename, 'w') 

        f.write(u'<html><head></head><body>')
        f.write(u'<table border="0"><tr>')
        for attrib in attribs:
            f.write(u'<td>'+attrib+'</td>')
        f.write(u'</tr>')

        for attrib in attribs:
            f.write(u'<td valign="top"><table border="1">')

            for d in self.data[attrib]:
                f.write(u'<tr><td>' + unicode(d[0]) + u'</td><td>' +unicode(d[1]) + u'</td></tr>')

            f.write(u'</table></td>')

        f.write(u'</tr></table>')
        f.write(u'</body>')
        f.close()
        print "Saved to " + filename

    def fetch_data(self, attribs):
        for attrib in attribs:
            self.data[attrib]=Counter(self.grep_data(attrib)).most_common()

def main():
    global post_limit
    global attrib_limit

    fanpage_name = sys.argv[1] 
    attribs = sys.argv[2:] 

    f = FacebookFanAnalyzer(fanpage_name, post_limit, attribs, attrib_limit)
    f.fetch_data(attribs)
    f.save_as_html(attribs)

if __name__ == '__main__':
    main()

Вывод:

Requesting 'comments' data: https://graph.facebook.com/cern/posts?limit=50&fields=comments.limit(50)&access_token=AjZCBe5yhAq2zFtyNS4tdPyhAq2zFtyNS4tdPw9sMkSUgBzF4tdPw9sMkSUgBzFZCDcd6asBpPndjhAq2zFtyNS4tsBphqfZBJNzx
Requesting 'likes' data: https://graph.facebook.com/cern/posts?limit=50&fields=likes.limit(50)&access_token=AjZCBe5yhAq2zFtyNS4tdPyhAq2zFtyNS4tdPw9sMkSUgBzF4tdPw9sMkSUgBzFZCDcd6asBpPndjhAq2zFtyNS4tsBphqfZBJNzx
Saved to cern.html

enter image description here

Ответ 3

Прочитайте список сообщений на странице на странице /feed соединения и отследите идентификаторы пользователей тех пользователей, которые отправили и прокомментировали каждое сообщение, создав список тех, кто делает это чаще всего.

Затем сохраните их где-нибудь и используйте сохраненный список в той части вашей системы, которая решает, кому отправлять бонусы.

например.

http://graph.facebook.com/cocacola/feed возвращает все последние сообщения на странице cocacola, и вы можете отслеживать идентификаторы плакатов, комментаторов, подписчиков, чтобы определить, кто является наиболее активными пользователями

Ответ 4

напишите php или jquery script, который выполняется, когда пользователь щелкает или делится на вашем сайте как раз перед тем, как делить/любить fb и записывать информацию о пользователе и сообщение, которое он поделил/любил. Теперь вы можете отслеживать, кто поделился вашим сообщением больше всего.

PHP/JQuery script будет действовать как средний человек, поэтому не используйте facebook share/like script напрямую. Я попытаюсь найти код, который я написал для этого метода. Я использовал PHP и Mysql. Попробуйте использовать JQuery, это даст лучший результат с точки зрения сдерживания процесса (я имею в виду, что данные будут записаны без перезагрузки страницы).

Ответ 5

Ваш вопрос хорош, но это довольно сложно. (На самом деле, вначале, я пришел к выводу, что это невозможно. Поэтому я создаю совершенно другое решение...). Один из наилучшим способом является создание сети, в которой ваши зрители могут зарегистрироваться в форме, которая требовала бы официальных URL-адресов на страницах их социальных сетей, а также они могли бы выбрать, что у них нет такой сети:

"Вы хотите поделиться некоторыми нашими страницами? Пожалуйста, зарегистрируйтесь здесь сначала".

Таким образом, они могут получить определенный URL-адрес, который они хотели бы разделить, когда они находятся на вашем веб-сайте, но они не знают, что они отслеживают, когда они посещают этот конкретный URL-адрес. (Каждый раз, когда конкретный URL-адрес посещается, IP-адрес отслеживается, а количество посещений получает ++ 1 в базе данных.) Дайте им динамический URL-адрес в верхней части вашего веб-сайта, который в текстовой области каждой страницы отслеживается их. Или используйте скрипты для автоматического добавления строки запроса трассировки на URL-адресах вашего сайта.

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

Но я думаю, вы также можете использовать Google Analytics, чтобы полностью отслеживать некоторые рефералы, которые не поступали с URL-адресов с динамическим QUERY STRING, например Digital Point, но не из другой социальной сети, такой как Facebook, потому что вы не получите точных путей перехода с такой социальной сетью из-за путь запроса. Однако вы можете использовать его для отслеживания других сетей. Кроме того, AddThis Analytics подходит для URL-адресов без запроса.

Два типа рефералов в Google Analytics находятся в разделе меню "Источники трафика" СТАНДАРТНЫЕ ОТЧЕТЫ.

  • Источники трафика
    • Источники
      • Переходов
    • Социальные
      • Рефералы сети

Этот ответ довольно грязный, но иногда весьма полезный. Кроме этого? Пожалуйста, проверьте эти ссылки ниже: