如何从粉丝页面中筛选出最活跃的用户?

Posted

技术标签:

【中文标题】如何从粉丝页面中筛选出最活跃的用户?【英文标题】:How to filter out the most active users from fan page? 【发布时间】:2013-04-03 21:37:04 【问题描述】:

我正在创建一个新网站。我想使用另一个与我的主题相关的 Web 服务来推广它。我想向那些推广我的第一个网站和粉丝专页的人发送一些礼物。如何过滤掉 20 个喜欢/分享/cmets 我的大部分帖子的用户?

任何合适的编程语言都会很好。

[编辑]

好吧...老实说,我正在寻找一种方法来解析不是我的粉丝专页。我想向我比赛的粉丝页面最活跃的用户发送礼物,以简单地贿赂他们:)

【问题讨论】:

你不能,facebook不允许页面查询他们的用户 @FabioAntunes 我不想查询用户,而是从页面发帖,然后阅读哪些用户喜欢发帖,哪些用户分享或评论。此信息在 FB 页面中可供所有人使用,因此在最坏的情况下可以编写浏览器扩展,以解析打开的粉丝页面。问题是有更好的解决方案。 哦,在那种情况下忘记我说的话,我稍后会发布答案,现在我正在做一些繁重的工作。但是你必须为此使用 FQL @FabioAntunes ...您没有与此帖子相关的答案... :-( @JohannesN.我猜你不是公关人员? :) 给任何人送礼物有什么问题? :) 【参考方案1】:

基于 Ahmed Nuaman answer(也请给他们+1),我准备了这段代码:

使用示例:

分析http://www.facebook.com/cern最活跃的facebook用户

$ python FacebookFanAnalyzer.py cern likes

$ python FacebookFanAnalyzer.py cern comments

$ python FacebookFanAnalyzer.py cern likes comments

注意:不支持共享和内部 cmets

文件: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

【讨论】:

【参考方案2】:

你的问题很好,但它很难.. (实际上,一开始我的想法是这是不可能的。所以,我建立了一个完全不同的解决方案......) 最好的方法之一是创建一个网络,您的观众可以在其中以需要其社交网络页面的官方 URL 的形式进行注册,并且他们可以选择他们没有这种网络:

“你想分享我们的一些页面吗?请先在这里注册..”

因此,当他们访问您的网站时,他们可以获得一个他们想要分享的特定 URL,但是当他们访问该特定 URL 时,他们不知道他们正在跟踪.. (每次访问特定 URL 时,都会跟踪 IP,并且访问次数会在数据库中++1。)在您的网站顶部为他们提供一个动态 URL,该 URL 位于每个页面的文本区域以跟踪它们。或者使用脚本自动在您网站的 URL 上添加跟踪查询字符串。

我认为有一款免费软件可以让您轻松建立联盟网络! 如果您的观众真的很喜欢您的网站,他们会注册成为会员。但是这件事不同,会员网络与上面段落中提到的网络完全不同..

但我认为,您也可以使用Google Analytics 来完全跟踪一些不是来自具有动态查询字符串(如Digital Point)的 URL 的引荐,但不是来自 Facebook 等其他社交网络的引荐,因为您不会由于查询路径,无法通过这种社交网络获得确切的推荐路径。但是,您可以使用它来跟踪其他网络。此外,AddThis Analytics 适用于非查询字符串 URL。

Google Analytics 上的两种推荐位于STANDARD REPORTS“Traffic Sources”菜单下..

流量来源 来源 推荐 社交 网络推荐

这个答案很混乱,但有时非常有用..除此之外?请检查以下链接:

    Publishing with an App Access Token - Facebook Developers Facebook for Websites - Facebook Developers Like - Facebook Developers Open Graph Overview - Facebook Developers

【讨论】:

这绝不是回答发帖者的问题。 因为 OP 明确询问如何查找有关现有页面使用情况的信息。您的回答要求他创建自己的社交网络,让人们注册,然后对其进行某种分析。这甚至与他正在讨论的主题无关——它围绕无影响的指标收集——而不是如何跟踪注册。 是的 - 但请阅读他的编辑。我认为您正在回答最初的问题- OP 听起来好像这是在他自己的页面上。我将基于此撤消我的反对票。您的回答不适用于 edited 版本。 @TroyAlford 好的,我会稍微解释一下,如果访问者在提到的网络上注册,所有的 URL 都会根据他们的用户名自动添加一些 QUERY STRING,当他们现在共享网站上的任何 URL,当该共享 URL 被访问时,它将记录在数据库中。 (你看到了吗?这是一种可能的方式,因为这个问题是完全不可能的!)但是如果可能的话,你仍然可以检查答案中提到的链接..【参考方案3】:

有很多方法,我从最简单的开始...

    假设涉及品牌名称或#hashtag,那么您可以使用搜索 API:https://graph.facebook.com/search?q=watermelon&type=post&limit=1000,然后遍历数据,例如最新的 1000(limit 参数)以找出模式所有状态中的用户(出现最多的用户)。

    假设它只是一个页面,那么您可以访问/&lt;page&gt;/posts 端点(例如:https://developers.facebook.com/tools/explorer?method=GET&path=cocacola%2Fposts),因为它会为您提供最新帖子的列表(它们是分页的,因此您可以迭代结果),这将包括喜欢这些帖子并对其发表评论的人的列表;然后你可以找出模式用户等等。

就代码而言,您可以使用任何东西,您甚至可以使用简单的 Web 服务器(例如 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

当您运行代码时,它将返回该搜索中模式用户的有序列表,例如,使用特定搜索标签发布最多 cmets 的用户。如果您希望使用它,这可以很容易地适应第二种方法。

【讨论】:

这个答案并不完美,但它给了我足够的信息来创建我需要的东西,所以赏金给你 :) 我会尝试增强你的代码并稍后在此处粘贴链接 :)【参考方案4】:

在页面的/feed 连接处阅读页面上的帖子列表,并跟踪发布和评论每条帖子的用户的用户 ID,建立最常这样做的列表。

然后将这些存储在某个地方,并使用系统中决定将奖金发送给谁的存储列表。

例如

http://graph.facebook.com/cocacola/feed返回可口可乐页面上所有最近的帖子,您可以跟踪发帖者、评论者、喜欢者的ID,以确定谁是最活跃的用户

【讨论】:

一旦你有了一个ID,你就可以使用这个FQL来获取更多信息 请注意,上述解决方案显然需要一些用户登录FB才能检索到查询信息。 @TheKraken,图形 API 使用 oAuth,您可以自动生成 oAuth 令牌并解析 JSON 响应 @JasonSperske 真的吗?我不知道;谢谢指正。 @TheKraken,实际上我删除了那条评论,可口可乐粉丝页面返回的数据让我想回去检查一下。需要进一步研究【参考方案5】:

编写一个 php 或 jquery 脚本,当用户在实际分享/喜欢到 fb 之前在您的网站上点击或分享时执行该脚本,并记录用户信息和他/她分享/喜欢的帖子。现在您可以跟踪谁分享您的帖子最多。

PHP/Jquery 脚本会充当中间人,所以不要直接使用 facebook share/like 脚本。我将尝试找到我为此方法编写的代码。我用过 PHP 和 mysql。尝试使用 JQuery,这将在隐藏进程方面提供更好的结果(我的意思是无需重新加载页面即可记录数据)。

【讨论】:

尽管我认为您在 OP 编辑​​问题之前回答了它,但即使是他的页面,这也不是一个特别可靠或有效的解决方案(还有其他方法可以喜欢/评论页面- - 比如说,直接在 Facebook 上 - 这是你无法控制的)。

以上是关于如何从粉丝页面中筛选出最活跃的用户?的主要内容,如果未能解决你的问题,请参考以下文章

python如何从字符串中筛选出包含词最多的那个字符串呢!

我无法从结果中筛选出_id?

Python 从文件中筛选出ip 正则表达(re)

oracle中从一张表中筛选出不再多个时间段内的时间

在 iOS Facebook SDK 3.0 上作为粉丝页面发布

通过 API 将 Facebook 应用程序添加到粉丝页面