首页 > 解决方案 > 如何获取 Facebook 公共页面内容访问权限只是为了提取数据?

问题描述

对于大学的一个项目,我需要从相同的 Facebook 页面中提取帖子和评论等数据。几个月前一切都很好,但现在要从页面获取数据,您需要公共页面内容访问。

为了让我的应用得到审核,我需要添加:

作为一个只需要为考试提取一些数据的学生,我没有任何可以使用该应用程序的网站/平台。我在 Python 上使用 Facebook Graph API。
我在这个网站上查看了隐私政策生成器,但我没有任何网站或移动应用程序可以使用 API...

我的情况是否有某种方法可以在没有此要求的情况下通过 API 提取数据,或者我最好找到其他解决方案,例如网络抓取?

标签: pythonfacebookfacebook-graph-apiweb-scrapingfacebook-page

解决方案


为了能够使用 python 代码从 Facebook 提取数据,您需要在 Facebook 上注册为开发人员,然后拥有访问令牌。这是它的步骤。

去链接developers.facebook.com,在那里创建一个帐户。转到链接 developers.facebook.com/tools/explorer。转到右上角的“我的应用程序”下拉菜单,然后选择“添加新应用程序”。选择显示名称和类别,然后选择“创建 App ID”。再次回到同一个链接developers.facebook.com/tools/explorer。您将在右上角的“我的应用程序”下方看到“Graph API Explorer”。从“Graph API Explorer”下拉菜单中,选择您的应用程序。然后,选择“获取令牌”。从此下拉列表中,选择“获取用户访问令牌”。从出现的菜单中选择权限,然后选择“获取访问令牌”。转到链接 developer.facebook.com/tools/accesstoken。选择“User Token”对应的“Debug”。转到“扩展令牌访问”。这将确保您的令牌不会每两个小时过期一次。

访问 Facebook 公共数据的 Python 代码:如果想收集任何公开可用的数据,请转到链接https://developers.facebook.com/docs/graph-api 。请参阅https://developers.facebook.com/docs/graph-api/reference/v2.7/。从此文档中,选择要从中提取数据的任何字段,例如“组”或“页面”等。选择这些后转到代码示例,然后选择“facebook graph api”,您将获得有关提示如何提取信息。这个博客主要是关于获取事件数据。首先,导入'urllib3'、'facebook'、'requests'(如果它们已经可用)。如果没有,请下载这些库。定义一个变量令牌并将其值设置为您在上面得到的“用户访问令牌”。

token= ‘aiufniqaefncqiuhfencioaeusKJBNfljabicnlkjshniuwnscslkjjndfi’

获取事件列表:现在要查找任何搜索词的事件信息,例如“诗歌”并将这些事件的数量限制为 10000:

graph = facebook.GraphAPI(access_token=token, version = 2.7)
events = graph.request(‘/search?q=Poetry&type=event&limit=10000’)

这将提供在 Facebook 上创建的所有事件的字典,并在其名称中包含字符串“Poetry”。要获取事件列表,请执行以下操作:

eventList = events[‘data’]

从上面提取的事件列表中提取事件的所有信息:通过以下方式获取列表中第一个事件的 EventID

eventid = eventList[1][‘id’]

对于此 EventID,获取所有信息并设置一些变量,稍后将使用这些变量:

event1=graph.get_object(id=eventid,fields=’attending_count,can_guests_invite,category,cover,declined_count,description,end_time,guest_list_enabled,interested_count,is_canceled,is_page_owned,is_viewer_admin,maybe_count,noreply_count,owner,parent_group,place,ticket_uri,timezone,type,updated_time’)
attenderscount = event1[‘attending_count’]
declinerscount = event1[‘declined_count’]
interestedcount = event1[‘interested_count’]
maybecount = event1[‘maybe_count’]
noreplycount = event1[‘noreply_count’]

获取所有参加活动的人员的列表并将响应转换为 json 格式:

attenders = requests.get(“https://graph.facebook.com/v2.7/"+eventid+"/attending? 
access_token="+token+”&limit=”+str(attenderscount)) 
attenders_json = attenders.json()

获取活动管理员:

admins = requests.get(“https://graph.facebook.com/v2.7/"+eventid+"/admins? 
access_token="+token)
admins_json = admins.json()

同样,您可以根据需要提取其他信息,例如该事件的照片/视频/提要。转到https://developers.facebook.com/docs/graph-api/reference/event/并查看文档中的“Edges”部分。


推荐阅读