如何按类别和/或位置解析Facebook页面的FQL响应? (Python)
作者:互联网
长时间听众,第一次来电…
我从Facebook Open Graph API查询得到了很好的结果:
fbtest = graph.request("/fql", {"q": "SELECT name, page_id, categories, location
FROM page WHERE page_id IN (SELECT page_id FROM page_fan WHERE uid=me())"})
虽然我已经在Learning Python the Hard Way年采取了Zed的伟大课程,但我仍然是绿色的并且在这些方面需要帮助:
>我喜欢只请求与某些类别相匹配的页面,例如“本地商家”,但因为“类别”是一个列表(并且它没有在FB表中编入索引),我很难搞清楚它;我认为这是不可能的.
>所以我找回了一个人喜欢的所有页面,我需要在之后对其进行整理.这就是我在做的事情:
如何操作结果(按类别和/或位置过滤,这两个列表)并以可读格式将它们发送到我的fbtest.html文件?
目前我只是在HTML中呈现fbtest的输出;
self.render("test.html", fbtest=fbtest)
这很难看:
fbtest: {u’data’: [{u’page_id’: 8495417058L, u’name’: u’Mat Zo’,
u’categories’: [], u’location’: {u’street’: u”, u’zip’: u”}},
{u’page_id’: 9980651805L, u’name’: u’deadmau5′, u’categories’: [],
u’location’: {u’street’: u”, u’zip’: u”}}, {u’page_id’: 6209079710L,
u’name’: u’Ultra Records’, u’categories’: [], u’location’: {u’street’:
u”, u’zip’: u”}}, {u’page_id’: 12609724042L, u’name’: u’Oceanlab’,
u’categories’: [], u’location’: {u’street’: u”, u’zip’: u”}}, etc
一旦我尝试操作列表,我就可以发送一个结果(比如匹配name =“thesocialbusiness”的页面),但不是我正在寻找的一系列结果.我的愿景是拥有一个很好的图画书缩略图视图,按页面分类和排序.
谢谢,节日快乐,
-詹姆士
解决方法:
如果我理解正确,你只是想在这里过滤最终结果?如果还没有,请继续将json字符串转换为python对象
import json
resp = json.loads(fql_resp)
data = resp['data']
负载代表负载串,这是您将从服务中获得的.从这里你有几个选择.如果您事先知道您想要的类别,可以选择使用内置过滤器.以下面的数据集为例
objs = [{'_id': 1, 'categories': ['a', 'b', 'c']},
{'_id': 2, 'categories': ['b']},
{'_id': 3, 'categories': ['c']}]
您可以过滤仅包含b类别的结果
def f(obj):
return 'b' in obj['categories']
filtered_objs = filter(f, objs)
print(filtered_objs)
# outputs:
# [{'_id': 1, 'categories': ['a', 'b', 'c']},
# {'_id': 2, 'categories': ['b']}]
如果你想要一个可重用的函数来过滤不同的类别,你可以做类似的事情
def filter_objs(objs, category):
result = []
for obj in objs:
if category in obj['categories']:
result.append(category)
return result
filtered_objs = filter_objs(objs, 'b')
最后,您可以使用列表推导,根据需要内联或在filter_objs函数中使用.
filtered_objs = [obj for obj in objs if 'b' in obj['categories']]
所以有很多方法可以过滤结果,但第一步是使用json.loads
标签:python,facebook,facebook-opengraph,facebook-fql 来源: https://codeday.me/bug/20190709/1417180.html