我正在创建一个新网站。我想使用另一个与我的主题相关的 Web 服务来推广它。我想向那些推广我的第一个网站和粉丝专页的人发送一些礼物。如何过滤掉 20 个喜欢/分享/评论我大部分帖子的用户?
任何合适的编程语言都会很好。
[编辑]
好的...老实说,我正在寻找一种方法来解析不是我的粉丝专页。我想向我比赛的粉丝专页最活跃的用户发送礼物,以简单地贿赂他们 :)
我正在创建一个新网站。我想使用另一个与我的主题相关的 Web 服务来推广它。我想向那些推广我的第一个网站和粉丝专页的人发送一些礼物。如何过滤掉 20 个喜欢/分享/评论我大部分帖子的用户?
任何合适的编程语言都会很好。
[编辑]
好的...老实说,我正在寻找一种方法来解析不是我的粉丝专页。我想向我比赛的粉丝专页最活跃的用户发送礼物,以简单地贿赂他们 :)
根据 Ahmed Nuaman 的回答(也请给他们+1),我准备了这段代码:
用法示例:
分析http://www.facebook.com/cern最活跃的 facebook 用户
$ python FacebookFanAnalyzer.py cern likes
$ python FacebookFanAnalyzer.py cern comments
$ python FacebookFanAnalyzer.py cern likes comments
注意:不支持分享和内部评论
文件: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
方法有很多,我先从最简单的...
假设涉及品牌名称或#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 ),因为它会给您一个最新帖子的列表(它们是分页的,因此您可以遍历结果),这将包括一个喜欢这些帖子并对其发表评论的人的列表;然后你可以找出模式用户等等。
就代码而言,您可以使用任何东西,您甚至可以使用简单的 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
当您运行代码时,它将返回该搜索中模式用户的有序列表,例如,使用特定搜索标签发布最多评论的用户。如果您希望使用它,这可以很容易地适应第二种方法。
在页面/feed
连接处阅读页面上的帖子列表,并跟踪在每个帖子上发布和评论的用户的用户 ID,建立一个最常这样做的列表。
然后将这些存储在某处并使用系统中决定将奖金发送给谁的存储列表。
例如
http://graph.facebook.com/cocacola/feed返回可口可乐页面上所有最近的帖子,您可以跟踪发帖者、评论者、喜欢者的 ID,以确定谁是最活跃的用户
编写一个 php 或 jquery 脚本,当用户在实际分享/喜欢到 fb 之前在您的网站上单击或分享时执行该脚本,并记录用户信息和他/她分享/喜欢的帖子。现在您可以跟踪谁分享了您的帖子最多。
PHP/Jquery 脚本将充当中间人,所以不要直接使用 facebook share/like 脚本。我将尝试找到我为此方法编写的代码。我用过 PHP 和 Mysql。尝试使用 JQuery,这将在隐藏进程方面提供更好的结果(我的意思是无需重新加载页面即可记录数据)。